]> Sergey Matveev's repositories - btrtrc.git/blob - dht/krpc/msg_test.go
gofmt simplify
[btrtrc.git] / dht / krpc / msg_test.go
1 package krpc
2
3 import (
4         "net"
5         "testing"
6
7         "github.com/stretchr/testify/assert"
8         "github.com/stretchr/testify/require"
9
10         "github.com/anacrolix/torrent/bencode"
11         "github.com/anacrolix/torrent/util"
12 )
13
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))
18         var _m Msg
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)
24 }
25
26 func TestMarshalUnmarshalMsg(t *testing.T) {
27         testMarshalUnmarshalMsg(t, Msg{}, "d1:t0:1:y0:e")
28         testMarshalUnmarshalMsg(t, Msg{
29                 Y: "q",
30                 Q: "ping",
31                 T: "hi",
32         }, "d1:q4:ping1:t2:hi1:y1:qe")
33         testMarshalUnmarshalMsg(t, Msg{
34                 Y: "e",
35                 T: "42",
36                 E: &KRPCError{Code: 200, Msg: "fuck"},
37         }, "d1:eli200e4:fucke1:t2:421:y1:ee")
38         testMarshalUnmarshalMsg(t, Msg{
39                 Y: "r",
40                 T: "\x8c%",
41                 R: &Return{},
42         }, "d1:rd2:id0:e1:t2:\x8c%1:y1:re")
43         testMarshalUnmarshalMsg(t, Msg{
44                 Y: "r",
45                 T: "\x8c%",
46                 R: &Return{
47                         Nodes: CompactIPv4NodeInfo{
48                                 NodeInfo{
49                                         Addr: &net.UDPAddr{
50                                                 IP:   net.IPv4(1, 2, 3, 4).To4(),
51                                                 Port: 0x1234,
52                                         },
53                                 },
54                         },
55                 },
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{
58                 Y: "r",
59                 T: "\x8c%",
60                 R: &Return{
61                         Values: []util.CompactPeer{
62                                 {
63                                         IP:   net.IPv4(1, 2, 3, 4).To4(),
64                                         Port: 0x5678,
65                                 },
66                         },
67                 },
68         }, "d1:rd2:id0:6:valuesl6:\x01\x02\x03\x04\x56\x78ee1:t2:\x8c%1:y1:re")
69         testMarshalUnmarshalMsg(t, Msg{
70                 Y: "r",
71                 T: "\x03",
72                 R: &Return{
73                         ID: "\xeb\xff6isQ\xffJ\xec)ͺ\xab\xf2\xfb\xe3F|\xc2g",
74                 },
75                 IP: util.CompactPeer{
76                         IP:   net.IPv4(124, 168, 180, 8).To4(),
77                         Port: 62844,
78                 },
79         }, "d2:ip6:|\xa8\xb4\b\xf5|1:rd2:id20:\xeb\xff6isQ\xffJ\xec)ͺ\xab\xf2\xfb\xe3F|\xc2ge1:t1:\x031:y1:re")
80 }
81
82 func TestUnmarshalGetPeersResponse(t *testing.T) {
83         var msg Msg
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)
88         assert.Nil(t, msg.E)
89 }