package codec import ( . "git.noahlan.cn/northlan/ngs/internal/packet" "reflect" "testing" ) func TestPack(t *testing.T) { data := []byte("hello world") p1 := &Packet{Type: Handshake, Data: data, Length: len(data)} pp1, err := Encode(Handshake, data) if err != nil { t.Error(err.Error()) } d1 := NewDecoder() packets, err := d1.Decode(pp1) if err != nil { t.Fatal(err.Error()) } if len(packets) < 1 { t.Fatal("packets should not empty") } if !reflect.DeepEqual(p1, packets[0]) { t.Fatalf("expect: %v, got: %v", p1, packets[0]) } p2 := &Packet{Type: Type(5), Data: data, Length: len(data)} pp2, err := Encode(Kick, data) if err != nil { t.Error(err.Error()) } d2 := NewDecoder() upp2, err := d2.Decode(pp2) if err != nil { t.Fatal(err.Error()) } if len(upp2) < 1 { t.Fatal("packets should not empty") } if !reflect.DeepEqual(p2, upp2[0]) { t.Fatalf("expect: %v, got: %v", p2, upp2[0]) } _ = &Packet{Type: Type(0), Data: data, Length: len(data)} if _, err := Encode(Type(0), data); err == nil { t.Error("should err") } _ = &Packet{Type: Type(6), Data: data, Length: len(data)} if _, err = Encode(Type(6), data); err == nil { t.Error("should err") } p5 := &Packet{Type: Type(5), Data: data, Length: len(data)} pp5, err := Encode(Kick, data) if err != nil { t.Fatal(err.Error()) } d3 := NewDecoder() upp5, err := d3.Decode(append(pp5, []byte{0x01, 0x00, 0x00, 0x00}...)) if err != nil { t.Fatal(err.Error()) } if len(upp5) < 1 { t.Fatal("packets should not empty") } if !reflect.DeepEqual(p5, upp5[0]) { t.Fatalf("expect: %v, got: %v", p2, upp5[0]) } } func BenchmarkDecoder_Decode(b *testing.B) { data := []byte("hello world") pp1, err := Encode(Handshake, data) if err != nil { b.Error(err.Error()) } d1 := NewDecoder() b.ResetTimer() b.ReportAllocs() for i := 0; i < b.N; i++ { packets, err := d1.Decode(pp1) if err != nil { b.Fatal(err) } if len(packets) != 1 { b.Fatal("decode error") } } }