github.com/dfklegend/cell2/utils@v0.0.0-20240402033734-a0a9f3d9335d/serialize/proto/proto_test.go (about) 1 package proto 2 3 import ( 4 "log" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 9 "github.com/dfklegend/cell2/utils/serialize/proto/msgs" 10 ) 11 12 func TestNewSerializer(t *testing.T) { 13 t.Parallel() 14 15 log.Println(msgs.ServiceRequest{}) 16 17 serializer := NewSerializer() 18 assert.NotNil(t, serializer) 19 } 20 21 func TestNormal(t *testing.T) { 22 in := &msgs.ServiceRequest{ 23 Sender: "someone", 24 } 25 26 serializer := NewSerializer() 27 bytes, _ := serializer.Marshal(in) 28 29 out := &msgs.ServiceRequest{} 30 serializer.Unmarshal(bytes, out) 31 assert.Equal(t, "someone", out.Sender) 32 } 33 34 // 测试不同版本的结构定义会如何 35 // 测试结果: 36 // 序列化数据不匹配,不会异常 37 // 前面类型一致,会读出来 38 // 序号和类型匹配的会被读取出来 39 // 类型不一致,数据会被重置成初始化状态 40 func TestMismatch(t *testing.T) { 41 in := &msgs.ServiceRequest{ 42 Sender: "someone", 43 ReqId: 99, 44 Type: "type", 45 } 46 47 log.Printf("origin data: %+v\n", in) 48 49 serializer := NewSerializer() 50 bytes, _ := serializer.Marshal(in) 51 52 r1 := &msgs.ServiceRequest1{} 53 serializer.Unmarshal(bytes, r1) 54 log.Printf("%+v\n", r1) 55 56 assert.Equal(t, "someone", r1.Sender) 57 assert.Equal(t, "", r1.Type) 58 59 r2 := &msgs.ServiceRequest2{} 60 r2.ReqId = 100 61 serializer.Unmarshal(bytes, r2) 62 log.Printf("%+v\n", r2) 63 64 // 类型不一致,会被设成默认值 65 assert.Equal(t, int32(0), r2.ReqId) 66 // 类型和序号一致,能读取出来 67 assert.Equal(t, "type", r2.Type) 68 } 69 70 // 122 ns/op 71 func BenchmarkMarshal(b *testing.B) { 72 in := &msgs.ServiceRequest{ 73 Sender: "someone", 74 ReqId: 99, 75 Type: "type", 76 } 77 78 serializer := NewSerializer() 79 for i := 0; i < b.N; i++ { 80 serializer.Marshal(in) 81 } 82 } 83 84 // 149 ns/op 85 func BenchmarkUnMarshal(b *testing.B) { 86 in := &msgs.ServiceRequest{ 87 Sender: "someone", 88 ReqId: 99, 89 Type: "type", 90 } 91 92 serializer := NewSerializer() 93 ret, _ := serializer.Marshal(in) 94 out := &msgs.ServiceRequest{} 95 b.ResetTimer() 96 for i := 0; i < b.N; i++ { 97 serializer.Unmarshal(ret, out) 98 } 99 }