7 "github.com/stretchr/testify/assert"
8 "github.com/stretchr/testify/require"
10 "github.com/anacrolix/torrent/bencode"
11 "github.com/anacrolix/torrent/util"
14 func testMarshalUnmarshalMsg(t *testing.T, m Msg, expected string) {
15 b, err := bencode.Marshal(m)
16 require.NoError(t, err)
17 assert.Equal(t, expected, string(b))
19 err = bencode.Unmarshal([]byte(expected), &_m)
20 assert.NoError(t, err)
21 assert.EqualValues(t, m, _m)
22 assert.EqualValues(t, m.A, _m.A)
23 assert.EqualValues(t, m.R, _m.R)
26 func TestMarshalUnmarshalMsg(t *testing.T) {
27 testMarshalUnmarshalMsg(t, Msg{}, "d1:t0:1:y0:e")
28 testMarshalUnmarshalMsg(t, Msg{
32 }, "d1:q4:ping1:t2:hi1:y1:qe")
33 testMarshalUnmarshalMsg(t, Msg{
36 E: &KRPCError{Code: 200, Msg: "fuck"},
37 }, "d1:eli200e4:fucke1:t2:421:y1:ee")
38 testMarshalUnmarshalMsg(t, Msg{
42 }, "d1:rd2:id0:e1:t2:\x8c%1:y1:re")
43 testMarshalUnmarshalMsg(t, Msg{
47 Nodes: CompactIPv4NodeInfo{
50 IP: net.IPv4(1, 2, 3, 4).To4(),
56 }, "d1:rd2:id0:5:nodes26:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x124e1:t2:\x8c%1:y1:re")
57 testMarshalUnmarshalMsg(t, Msg{
61 Values: []util.CompactPeer{
63 IP: net.IPv4(1, 2, 3, 4).To4(),
68 }, "d1:rd2:id0:6:valuesl6:\x01\x02\x03\x04\x56\x78ee1:t2:\x8c%1:y1:re")
69 testMarshalUnmarshalMsg(t, Msg{
73 ID: "\xeb\xff6isQ\xffJ\xec)ͺ\xab\xf2\xfb\xe3F|\xc2g",
76 IP: net.IPv4(124, 168, 180, 8).To4(),
79 }, "d2:ip6:|\xa8\xb4\b\xf5|1:rd2:id20:\xeb\xff6isQ\xffJ\xec)ͺ\xab\xf2\xfb\xe3F|\xc2ge1:t1:\x031:y1:re")
82 func TestUnmarshalGetPeersResponse(t *testing.T) {
84 err := bencode.Unmarshal([]byte("d1:rd6:valuesl6:\x01\x02\x03\x04\x05\x066:\x07\x08\x09\x0a\x0b\x0ce5:nodes52:\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x02\x03\x04\x05\x06\x07\x08\x09\x02\x03\x04\x05\x06\x07\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x02\x03\x04\x05\x06\x07\x08\x09\x02\x03\x04\x05\x06\x07ee"), &msg)
85 require.NoError(t, err)
86 assert.Len(t, msg.R.Values, 2)
87 assert.Len(t, msg.R.Nodes, 2)