-
Notifications
You must be signed in to change notification settings - Fork 0
/
packet_test.go
103 lines (82 loc) · 3.15 KB
/
packet_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package marina
import (
"testing"
"github.com/lithdew/kademlia"
"github.com/stretchr/testify/require"
"go.uber.org/goleak"
)
func TestPacket(t *testing.T) {
defer goleak.VerifyNone(t)
pKid, err1 := generateKadId()
require.NoError(t, err1)
bKid, err2 := generateKadId()
require.NoError(t, err2)
sKid, err3 := generateKadId()
require.NoError(t, err3)
pkt := NewMessagePacket(pKid, uint32(88), byte(0), []byte("/finance/tom"), []byte("xyz123456abc"))
require.Equal(t, pKid, pkt.pubKadId)
pkt.SetBrokerKadId(bKid)
require.Equal(t, bKid, pkt.brkKadId)
pkt.SetSubscriberKadId(sKid)
require.Equal(t, sKid, pkt.subKadId)
require.Equal(t, uint32(88), pkt.mid)
require.Equal(t, byte(0), pkt.qos)
require.Equal(t, []byte("/finance/tom"), pkt.topic)
require.Equal(t, []byte("xyz123456abc"), pkt.payLoad)
dst := make([]byte, 0)
pktByte := pkt.AppendTo(dst)
pkt_, err4 := UnmarshalMessagePacket(pktByte)
require.NoError(t, err4)
// the pointer is not equal
require.Equal(t, pkt.mid, pkt_.mid)
require.Equal(t, pkt.qos, pkt_.qos)
require.Equal(t, pkt.topic, pkt_.topic)
require.Equal(t, pkt.payLoad, pkt_.payLoad)
dst = make([]byte, 0)
require.Equal(t, pkt.pubKadId.AppendTo(dst), pkt_.pubKadId.AppendTo(dst))
require.Equal(t, pkt.brkKadId.AppendTo(dst), pkt_.brkKadId.AppendTo(dst))
require.Equal(t, pkt.subKadId.AppendTo(dst), pkt_.subKadId.AppendTo(dst))
require.Equal(t, pkt.pubKadId.Pub, pkt_.pubKadId.Pub)
require.Equal(t, pkt.brkKadId.Pub, pkt_.brkKadId.Pub)
require.Equal(t, pkt.subKadId.Pub, pkt_.subKadId.Pub)
require.Equal(t, pkt.pubKadId.Port, pkt_.pubKadId.Port)
require.Equal(t, pkt.brkKadId.Port, pkt_.brkKadId.Port)
require.Equal(t, pkt.subKadId.Port, pkt_.subKadId.Port)
require.Equal(t, pktByte, pkt_.AppendTo(dst))
_, err := UnmarshalMessagePacket(pktByte[:4])
require.Error(t, err)
_, err = UnmarshalMessagePacket(pktByte[:6])
require.Error(t, err)
_, err = UnmarshalMessagePacket(pktByte[:8])
require.Error(t, err)
_, err = UnmarshalMessagePacket(pktByte[:20])
require.Error(t, err)
_, err = UnmarshalMessagePacket(pktByte[:32])
require.Error(t, err)
_, err = UnmarshalMessagePacket(pktByte[:64])
require.Error(t, err)
_, err = UnmarshalMessagePacket(pktByte[:96])
require.Error(t, err)
_, err = UnmarshalMessagePacket(pktByte[:128])
require.Error(t, err)
// test the packet_pool after release and renew one
pkt.Release()
require.Equal(t, (*kademlia.ID)(nil), pkt.pubKadId)
require.Equal(t, (*kademlia.ID)(nil), pkt.brkKadId)
require.Equal(t, (*kademlia.ID)(nil), pkt.subKadId)
require.Equal(t, zeroMid, pkt.mid)
require.Equal(t, zeroQos, pkt.qos)
require.Equal(t, []byte(nil), pkt.topic)
require.Equal(t, []byte(nil), pkt.payLoad)
pkt = NewMessagePacket(pKid, uint32(888), byte(1), []byte("/finance/tom/#"), []byte("....xyz123456abc...."))
defer pkt.Release()
require.Equal(t, pKid, pkt.pubKadId)
pkt.SetBrokerKadId(bKid)
require.Equal(t, bKid, pkt.brkKadId)
pkt.SetSubscriberKadId(sKid)
require.Equal(t, sKid, pkt.subKadId)
require.Equal(t, uint32(888), pkt.mid)
require.Equal(t, byte(1), pkt.qos)
require.Equal(t, []byte("/finance/tom/#"), pkt.topic)
require.Equal(t, []byte("....xyz123456abc...."), pkt.payLoad)
}