forked from anacrolix/torrent
-
Notifications
You must be signed in to change notification settings - Fork 0
/
nodes_test.go
74 lines (64 loc) · 1.94 KB
/
nodes_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
package metainfo
import (
"bytes"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/anacrolix/torrent/bencode"
)
func testFileNodesMatch(t *testing.T, file string, nodes []Node) {
mi, err := LoadFromFile(file)
require.NoError(t, err)
assert.EqualValues(t, nodes, mi.Nodes)
}
func TestNodesListStrings(t *testing.T) {
testFileNodesMatch(t, "testdata/trackerless.torrent", []Node{
"udp://tracker.openbittorrent.com:80",
"udp://tracker.openbittorrent.com:80",
})
}
func TestNodesListPairsBEP5(t *testing.T) {
testFileNodesMatch(t, "testdata/issue_65a.torrent", []Node{
"185.34.3.132:5680",
"185.34.3.103:12340",
"94.209.253.165:47232",
"78.46.103.11:34319",
"195.154.162.70:55011",
"185.34.3.137:3732",
})
testFileNodesMatch(t, "testdata/issue_65b.torrent", []Node{
"95.211.203.130:6881",
"84.72.116.169:6889",
"204.83.98.77:7000",
"101.187.175.163:19665",
"37.187.118.32:6881",
"83.128.223.71:23865",
})
}
func testMarshalMetainfo(t *testing.T, expected string, mi *MetaInfo) {
b, err := bencode.Marshal(*mi)
assert.NoError(t, err)
assert.EqualValues(t, expected, string(b))
}
func TestMarshalMetainfoNodes(t *testing.T) {
testMarshalMetainfo(t, "d4:infodee", &MetaInfo{InfoBytes: []byte("de")})
testMarshalMetainfo(t, "d4:infod2:hi5:theree5:nodesl12:1.2.3.4:555514:not a hostportee", &MetaInfo{
Nodes: []Node{"1.2.3.4:5555", "not a hostport"},
InfoBytes: []byte("d2:hi5:theree"),
})
}
func TestUnmarshalBadMetainfoNodes(t *testing.T) {
var mi MetaInfo
// Should barf on the integer in the nodes list.
err := bencode.Unmarshal([]byte("d5:nodesl1:ai42eee"), &mi)
require.Error(t, err)
}
func TestMetainfoEmptyInfoBytes(t *testing.T) {
var buf bytes.Buffer
require.NoError(t, (&MetaInfo{
// Include a non-empty field that comes after "info".
UrlList: []string{"hello"},
}).Write(&buf))
var mi MetaInfo
require.NoError(t, bencode.Unmarshal(buf.Bytes(), &mi))
}