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  }