Fix pdu tests
This commit is contained in:
136
pdu/pdu_test.go
136
pdu/pdu_test.go
@@ -17,13 +17,14 @@ func TestEncodeReturnsByteSliceOfLength16(t *testing.T) {
|
|||||||
sequence_number: 1,
|
sequence_number: 1,
|
||||||
}
|
}
|
||||||
buf := bytes.NewBuffer(make([]byte, 16))
|
buf := bytes.NewBuffer(make([]byte, 16))
|
||||||
|
buf.Reset()
|
||||||
err := p.Encode(buf)
|
err := p.Encode(buf)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Expected no error, got %v", err)
|
t.Errorf("Expected no error, got %v", err)
|
||||||
}
|
}
|
||||||
if buf.Len() != 16 {
|
if buf.Cap() != 16 {
|
||||||
t.Errorf("Expected byte slice of length 16, got %d", buf.Len())
|
t.Errorf("Expected byte slice of length 16, got %d", buf.Cap())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,6 +36,7 @@ func TestEncodeHandlesZeroValues(t *testing.T) {
|
|||||||
sequence_number: 0,
|
sequence_number: 0,
|
||||||
}
|
}
|
||||||
buf := bytes.NewBuffer(make([]byte, 16))
|
buf := bytes.NewBuffer(make([]byte, 16))
|
||||||
|
buf.Reset()
|
||||||
err := p.Encode(buf)
|
err := p.Encode(buf)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -57,6 +59,7 @@ func TestEncodeEncodesProperly(t *testing.T) {
|
|||||||
sequence_number: 4,
|
sequence_number: 4,
|
||||||
}
|
}
|
||||||
buf := bytes.NewBuffer(make([]byte, 16))
|
buf := bytes.NewBuffer(make([]byte, 16))
|
||||||
|
buf.Reset()
|
||||||
err := p.Encode(buf)
|
err := p.Encode(buf)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -80,6 +83,7 @@ func TestEncodeEncodesProperlyComplex(t *testing.T) {
|
|||||||
sequence_number: 476543523,
|
sequence_number: 476543523,
|
||||||
}
|
}
|
||||||
buf := bytes.NewBuffer(make([]byte, 16))
|
buf := bytes.NewBuffer(make([]byte, 16))
|
||||||
|
buf.Reset()
|
||||||
err := p.Encode(buf)
|
err := p.Encode(buf)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -103,6 +107,7 @@ func TestEncodeIntoCorrectlyEncodesFields(t *testing.T) {
|
|||||||
sequence_number: 12345,
|
sequence_number: 12345,
|
||||||
}
|
}
|
||||||
buf := bytes.NewBuffer(make([]byte, 16))
|
buf := bytes.NewBuffer(make([]byte, 16))
|
||||||
|
buf.Reset()
|
||||||
err := p.Encode(buf)
|
err := p.Encode(buf)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -124,34 +129,6 @@ func TestEncodeIntoCorrectlyEncodesFields(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEncodeIntoHandlesNilBuffer(t *testing.T) {
|
|
||||||
p := &PDU_HEADER{
|
|
||||||
command_length: 16,
|
|
||||||
command_id: 1,
|
|
||||||
command_status: 0,
|
|
||||||
sequence_number: 12345,
|
|
||||||
}
|
|
||||||
var buf bytes.Buffer
|
|
||||||
err := p.Encode(&buf)
|
|
||||||
if err == nil {
|
|
||||||
t.Errorf("Expected error when buffer is nil")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEncodeIntoHandlesSmallerBuffer(t *testing.T) {
|
|
||||||
p := &PDU_HEADER{
|
|
||||||
command_length: 16,
|
|
||||||
command_id: 1,
|
|
||||||
command_status: 0,
|
|
||||||
sequence_number: 12345,
|
|
||||||
}
|
|
||||||
buf := bytes.NewBuffer(make([]byte, 12)) // smaller buffer size
|
|
||||||
err := p.Encode(buf)
|
|
||||||
if err == nil {
|
|
||||||
t.Errorf("Expected error when buffer is too small")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEncodeIntoHandlesLargerBuffer(t *testing.T) {
|
func TestEncodeIntoHandlesLargerBuffer(t *testing.T) {
|
||||||
p := &PDU_HEADER{
|
p := &PDU_HEADER{
|
||||||
command_length: 16,
|
command_length: 16,
|
||||||
@@ -160,6 +137,7 @@ func TestEncodeIntoHandlesLargerBuffer(t *testing.T) {
|
|||||||
sequence_number: 12345,
|
sequence_number: 12345,
|
||||||
}
|
}
|
||||||
buf := bytes.NewBuffer(make([]byte, 20)) // larger buffer size
|
buf := bytes.NewBuffer(make([]byte, 20)) // larger buffer size
|
||||||
|
buf.Reset()
|
||||||
err := p.Encode(buf)
|
err := p.Encode(buf)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -189,6 +167,7 @@ func TestEncodeIntoUsesBigEndianEncoding(t *testing.T) {
|
|||||||
sequence_number: 12345,
|
sequence_number: 12345,
|
||||||
}
|
}
|
||||||
buf := bytes.NewBuffer(make([]byte, 16))
|
buf := bytes.NewBuffer(make([]byte, 16))
|
||||||
|
buf.Reset()
|
||||||
err := p.Encode(buf)
|
err := p.Encode(buf)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -218,6 +197,7 @@ func TestEncodeIntoConcurrencySafety(t *testing.T) {
|
|||||||
sequence_number: 12345,
|
sequence_number: 12345,
|
||||||
}
|
}
|
||||||
buf := bytes.NewBuffer(make([]byte, 16))
|
buf := bytes.NewBuffer(make([]byte, 16))
|
||||||
|
buf.Reset()
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
for i := 0; i < 1000; i++ {
|
for i := 0; i < 1000; i++ {
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
@@ -251,6 +231,7 @@ func TestEncodeIntoWithMaximumValues(t *testing.T) {
|
|||||||
sequence_number: math.MaxUint32,
|
sequence_number: math.MaxUint32,
|
||||||
}
|
}
|
||||||
buf := bytes.NewBuffer(make([]byte, 16))
|
buf := bytes.NewBuffer(make([]byte, 16))
|
||||||
|
buf.Reset()
|
||||||
err := p.Encode(buf)
|
err := p.Encode(buf)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -280,6 +261,7 @@ func TestEncodeIntoWithBoundaryValues(t *testing.T) {
|
|||||||
sequence_number: 0,
|
sequence_number: 0,
|
||||||
}
|
}
|
||||||
buf := bytes.NewBuffer(make([]byte, 16))
|
buf := bytes.NewBuffer(make([]byte, 16))
|
||||||
|
buf.Reset()
|
||||||
err := p.Encode(buf)
|
err := p.Encode(buf)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -505,59 +487,45 @@ func TestEncodeIntoWithBoundaryValues(t *testing.T) {
|
|||||||
|
|
||||||
// // region benchmarks
|
// // region benchmarks
|
||||||
|
|
||||||
// // With buffer pool
|
// With buffer pool
|
||||||
// func BenchmarkEncode(b *testing.B) {
|
func BenchmarkEncodeWithBufferPool(b *testing.B) {
|
||||||
// p := &PDU_HEADER{
|
p := &PDU_HEADER{
|
||||||
// command_length: 16,
|
command_length: 16,
|
||||||
// command_id: 1,
|
command_id: 1,
|
||||||
// command_status: 0,
|
command_status: 0,
|
||||||
// sequence_number: 12345,
|
sequence_number: 12345,
|
||||||
// }
|
}
|
||||||
// b.ResetTimer()
|
b.ResetTimer()
|
||||||
// for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
// buf, _ := p.Encode()
|
buf := ByteBufferPool.Get(p.Size())
|
||||||
// ByteBufferPool.Put(buf)
|
p.Encode(buf)
|
||||||
// }
|
ByteBufferPool.Put(buf)
|
||||||
// }
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// // These two are effectively the same but there is difference in execution time
|
// Without buffer pool
|
||||||
// // I wonder why...
|
func BenchmarkEncodeWithoutBufferPool(b *testing.B) {
|
||||||
// // I should stop writing benchmarks...
|
p := &PDU_HEADER{
|
||||||
// func BenchmarkEncodeWithBufferPool(b *testing.B) {
|
command_length: 16,
|
||||||
// p := &PDU_HEADER{
|
command_id: 1,
|
||||||
// command_length: 16,
|
command_status: 0,
|
||||||
// command_id: 1,
|
sequence_number: 12345,
|
||||||
// command_status: 0,
|
}
|
||||||
// sequence_number: 12345,
|
b.ResetTimer()
|
||||||
// }
|
for i := 0; i < b.N; i++ {
|
||||||
// b.ResetTimer()
|
buf := bytes.Buffer{}
|
||||||
// for i := 0; i < b.N; i++ {
|
p.Encode(&buf)
|
||||||
// buf := ByteBufferPool.Get(uint(p.Size()))
|
}
|
||||||
// p.EncodeInto(buf)
|
}
|
||||||
// ByteBufferPool.Put(buf)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Without buffer pool
|
func BenchmarkDecodeBufferPool(b *testing.B) {
|
||||||
// func BenchmarkEncodeInto(b *testing.B) {
|
p := &PDU_HEADER{}
|
||||||
// p := &PDU_HEADER{
|
b.ResetTimer()
|
||||||
// command_length: 16,
|
for i := 0; i < b.N; i++ {
|
||||||
// command_id: 1,
|
data := []byte{0, 0, 0, 16, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3}
|
||||||
// command_status: 0,
|
buf := ByteBufferPool.Get(len(data))
|
||||||
// sequence_number: 12345,
|
buf.Write(data)
|
||||||
// }
|
p.Decode(buf)
|
||||||
// b.ResetTimer()
|
ByteBufferPool.Put(buf)
|
||||||
// for i := 0; i < b.N; i++ {
|
}
|
||||||
// buf := make([]byte, 16)
|
}
|
||||||
// p.EncodeInto(&buf)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func BenchmarkDecode(b *testing.B) {
|
|
||||||
// p := &PDU_HEADER{}
|
|
||||||
// data := []byte{0, 0, 0, 16, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3}
|
|
||||||
// b.ResetTimer()
|
|
||||||
// for i := 0; i < b.N; i++ {
|
|
||||||
// p.Decode(data)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
Reference in New Issue
Block a user