You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nnet/internal/unpacker/fixed_length_test.go

93 lines
3.2 KiB
Go

package unpacker
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestFixedLengthUnpacker(t *testing.T) {
u := NewFixedLengthUnpacker(4)
// 测试单个消息
data := []byte("test")
messages, remaining, consumed, err := u.Unpack(data)
require.NoError(t, err, "Expected no error")
assert.Equal(t, 1, len(messages), "Expected 1 message")
assert.Equal(t, "test", string(messages[0]), "Expected 'test'")
assert.Equal(t, 0, len(remaining), "Expected no remaining data")
assert.Equal(t, len(data), consumed, "Expected consumed equals input data length")
}
func TestFixedLengthUnpackerMultipleMessages(t *testing.T) {
u := NewFixedLengthUnpacker(4)
// 测试多个消息
data := []byte("testdata")
messages, remaining, consumed, err := u.Unpack(data)
require.NoError(t, err, "Expected no error")
assert.Equal(t, 2, len(messages), "Expected 2 messages")
assert.Equal(t, "test", string(messages[0]), "Expected 'test'")
assert.Equal(t, "data", string(messages[1]), "Expected 'data'")
assert.Equal(t, 0, len(remaining), "Expected no remaining data")
assert.Equal(t, len(data), consumed, "Expected consumed equals input data length")
}
func TestFixedLengthUnpackerIncompleteMessage(t *testing.T) {
u := NewFixedLengthUnpacker(4)
// 测试不完整的消息
data := []byte("te")
messages, remaining, consumed, err := u.Unpack(data)
require.NoError(t, err, "Expected no error")
assert.Equal(t, 0, len(messages), "Expected 0 messages")
assert.Equal(t, "te", string(remaining), "Expected 'te' as remaining")
assert.Equal(t, len(data), consumed, "Expected all data consumed when no complete message")
}
func TestFixedLengthUnpackerPack(t *testing.T) {
u := NewFixedLengthUnpacker(4)
// 测试打包(数据长度匹配)
data := []byte("test")
packed, err := u.Pack(data)
require.NoError(t, err, "Expected no error")
assert.Equal(t, "test", string(packed), "Expected 'test'")
// 测试打包(数据长度不足,需要填充)
data2 := []byte("te")
packed2, err := u.Pack(data2)
require.NoError(t, err, "Expected no error")
assert.Equal(t, 4, len(packed2), "Expected 4 bytes")
assert.Equal(t, "te", string(packed2[:2]), "Expected 'te' prefix")
// 测试打包(数据长度超过,需要截断)
data3 := []byte("testdata")
packed3, err := u.Pack(data3)
require.NoError(t, err, "Expected no error")
assert.Equal(t, 4, len(packed3), "Expected 4 bytes")
assert.Equal(t, "test", string(packed3), "Expected 'test'")
}
func TestFixedLengthUnpackerPartialMessages(t *testing.T) {
u := NewFixedLengthUnpacker(4)
// 测试部分消息 + 完整消息
data1 := []byte("te")
messages, remaining, consumed, err := u.Unpack(data1)
require.NoError(t, err)
assert.Equal(t, 0, len(messages))
assert.Equal(t, "te", string(remaining))
assert.Equal(t, len(data1), consumed, "Expected all data consumed when no complete message")
// 添加更多数据完成第一个消息并开始第二个消息
data2 := []byte("stte")
messages, remaining, consumed, err = u.Unpack(data2)
require.NoError(t, err)
assert.Equal(t, 1, len(messages))
assert.Equal(t, "test", string(messages[0]))
assert.Equal(t, "te", string(remaining))
assert.Equal(t, len(data2), consumed, "Expected all input bytes to be consumed after buffering")
}