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.
68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
package codec
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestProtobufCodec(t *testing.T) {
|
|
codec := NewProtobufCodec()
|
|
|
|
// 测试名称
|
|
assert.Equal(t, "protobuf", codec.Name(), "Expected name to be 'protobuf'")
|
|
}
|
|
|
|
func TestProtobufCodecEncodeInvalidType(t *testing.T) {
|
|
codec := NewProtobufCodec()
|
|
|
|
// 测试编码非proto.Message类型
|
|
_, err := codec.Encode("invalid")
|
|
assert.Error(t, err, "Expected error for invalid type")
|
|
}
|
|
|
|
func TestProtobufCodecDecodeInvalidType(t *testing.T) {
|
|
codec := NewProtobufCodec()
|
|
|
|
// 测试解码为非proto.Message类型
|
|
var str string
|
|
err := codec.Decode([]byte("test"), &str)
|
|
assert.Error(t, err, "Expected error for invalid type")
|
|
}
|
|
|
|
func TestProtobufCodecWithProtoMessage(t *testing.T) {
|
|
codec := NewProtobufCodec()
|
|
|
|
// 创建实现了protoMessage接口的测试类型
|
|
msg := &testProtoMessage{
|
|
data: []byte("test data"),
|
|
}
|
|
|
|
// 测试编码
|
|
encoded, err := codec.Encode(msg)
|
|
require.NoError(t, err, "Expected no error when encoding")
|
|
assert.Equal(t, msg.data, encoded, "Expected encoded data to match")
|
|
|
|
// 测试解码
|
|
decoded := &testProtoMessage{}
|
|
err = codec.Decode(encoded, decoded)
|
|
require.NoError(t, err, "Expected no error when decoding")
|
|
assert.Equal(t, msg.data, decoded.data, "Expected decoded data to match")
|
|
}
|
|
|
|
// testProtoMessage 实现protoMessage接口的测试类型
|
|
type testProtoMessage struct {
|
|
data []byte
|
|
}
|
|
|
|
func (m *testProtoMessage) Marshal() ([]byte, error) {
|
|
return m.data, nil
|
|
}
|
|
|
|
func (m *testProtoMessage) Unmarshal(data []byte) error {
|
|
m.data = data
|
|
return nil
|
|
}
|
|
|