github.com/anacrolix/torrent@v1.61.0/metainfo/nodes_test.go (about) 1 package metainfo 2 3 import ( 4 "bytes" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 10 "github.com/anacrolix/torrent/bencode" 11 ) 12 13 func testFileNodesMatch(t *testing.T, file string, nodes []Node) { 14 mi, err := LoadFromFile(file) 15 require.NoError(t, err) 16 assert.EqualValues(t, nodes, mi.Nodes) 17 } 18 19 func TestNodesListStrings(t *testing.T) { 20 testFileNodesMatch(t, "testdata/trackerless.torrent", []Node{ 21 "udp://tracker.openbittorrent.com:80", 22 "udp://tracker.openbittorrent.com:80", 23 }) 24 } 25 26 func TestNodesListPairsBEP5(t *testing.T) { 27 testFileNodesMatch(t, "testdata/issue_65a.torrent", []Node{ 28 "185.34.3.132:5680", 29 "185.34.3.103:12340", 30 "94.209.253.165:47232", 31 "78.46.103.11:34319", 32 "195.154.162.70:55011", 33 "185.34.3.137:3732", 34 }) 35 testFileNodesMatch(t, "testdata/issue_65b.torrent", []Node{ 36 "95.211.203.130:6881", 37 "84.72.116.169:6889", 38 "204.83.98.77:7000", 39 "101.187.175.163:19665", 40 "37.187.118.32:6881", 41 "83.128.223.71:23865", 42 }) 43 } 44 45 func testMarshalMetainfo(t *testing.T, expected string, mi *MetaInfo) { 46 b, err := bencode.Marshal(*mi) 47 assert.NoError(t, err) 48 assert.EqualValues(t, expected, string(b)) 49 } 50 51 func TestMarshalMetainfoNodes(t *testing.T) { 52 testMarshalMetainfo(t, "d4:infodee", &MetaInfo{InfoBytes: []byte("de")}) 53 testMarshalMetainfo(t, "d4:infod2:hi5:theree5:nodesl12:1.2.3.4:555514:not a hostportee", &MetaInfo{ 54 Nodes: []Node{"1.2.3.4:5555", "not a hostport"}, 55 InfoBytes: []byte("d2:hi5:theree"), 56 }) 57 } 58 59 func TestUnmarshalBadMetainfoNodes(t *testing.T) { 60 var mi MetaInfo 61 // Should barf on the integer in the nodes list. 62 err := bencode.Unmarshal([]byte("d5:nodesl1:ai42eee"), &mi) 63 require.Error(t, err) 64 } 65 66 func TestMetainfoEmptyInfoBytes(t *testing.T) { 67 var buf bytes.Buffer 68 require.NoError(t, (&MetaInfo{ 69 // Include a non-empty field that comes after "info". 70 UrlList: []string{"hello"}, 71 }).Write(&buf)) 72 var mi MetaInfo 73 require.NoError(t, bencode.Unmarshal(buf.Bytes(), &mi)) 74 }