Fix pdu tests

This commit is contained in:
2024-07-24 19:08:14 +02:00
parent a12c22587d
commit ec04fa1fb6

View File

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