Skip to content

Commit

Permalink
added a test case for issue gogo#587. check that we do not re-alloc a…
Browse files Browse the repository at this point in the history
… buffer when we are reading a msg of the same size (gogo#592)
  • Loading branch information
jmarais authored Jul 30, 2019
1 parent 0592a1c commit f6077ae
Showing 1 changed file with 35 additions and 0 deletions.
35 changes: 35 additions & 0 deletions io/uint32_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"encoding/binary"
"io/ioutil"
"math/rand"
"reflect"
"testing"
"time"

Expand Down Expand Up @@ -36,3 +37,37 @@ func BenchmarkUint32DelimWriterFallback(b *testing.B) {
}
}
}

// 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)
}
}

0 comments on commit f6077ae

Please sign in to comment.