1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-09 09:26:54 +00:00
kyverno/vendor/github.com/gogo/protobuf/io/uint32_test.go
2019-10-23 23:19:53 -07:00

73 lines
1.9 KiB
Go

package io_test
import (
"encoding/binary"
"io/ioutil"
"math/rand"
"reflect"
"testing"
"time"
"github.com/gogo/protobuf/test"
example "github.com/gogo/protobuf/test/example"
"github.com/gogo/protobuf/io"
)
func BenchmarkUint32DelimWriterMarshaller(b *testing.B) {
w := io.NewUint32DelimitedWriter(ioutil.Discard, binary.BigEndian)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
msg := example.NewPopulatedA(r, true)
for i := 0; i < b.N; i++ {
if err := w.WriteMsg(msg); err != nil {
b.Fatal(err)
}
}
}
func BenchmarkUint32DelimWriterFallback(b *testing.B) {
w := io.NewUint32DelimitedWriter(ioutil.Discard, binary.BigEndian)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
msg := test.NewPopulatedNinOptNative(r, true)
for i := 0; i < b.N; i++ {
if err := w.WriteMsg(msg); err != nil {
b.Fatal(err)
}
}
}
// Writing the same size messaged twice should not cause another
// reader buffer allocation
func TestUint32SameSizeNoAlloc(t *testing.T) {
buf := newBuffer()
writer := io.NewUint32DelimitedWriter(buf, binary.LittleEndian)
reader := io.NewUint32DelimitedReader(buf, binary.LittleEndian, 1024*1024)
err := writer.WriteMsg(&test.NinOptNative{Field15: []byte("numbercatinvention")})
if err != nil {
t.Fatal(err)
}
err = writer.WriteMsg(&test.NinOptNative{Field15: []byte("fastenselectionsky")})
if err != nil {
t.Fatal(err)
}
if err := writer.Close(); err != nil {
t.Fatal(err)
}
msg := &test.NinOptNative{}
if err := reader.ReadMsg(msg); err != nil {
t.Fatal(err)
}
firstRead := reflect.ValueOf(reader).Elem().FieldByName("buf").Pointer()
if err := reader.ReadMsg(msg); err != nil {
t.Fatal(err)
}
secondRead := reflect.ValueOf(reader).Elem().FieldByName("buf").Pointer()
if firstRead != secondRead {
t.Fatalf("reader buf byte slice pointer did not stay the same after second same size read (%d != %d).", firstRead, secondRead)
}
}