UNPKG

5.48 kBJavaScriptView Raw
1var extend = require('xtend')
2var magnet = require('../')
3var test = require('tape')
4
5var leavesOfGrass = 'magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36&dn=Leaves+of+Grass+by+Walt+Whitman.epub&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337'
6
7var empty = { announce: [], announceList: [], urlList: [] }
8
9test('decode: valid magnet uris', function (t) {
10 var result = magnet(leavesOfGrass)
11 t.equal(result.xt, 'urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36')
12 t.equal(result.dn, 'Leaves of Grass by Walt Whitman.epub')
13 t.equal(result.infoHash, 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36')
14 var announce = [
15 'udp://tracker.openbittorrent.com:80',
16 'udp://tracker.publicbt.com:80',
17 'udp://tracker.istole.it:6969',
18 'udp://tracker.ccc.de:80',
19 'udp://open.demonii.com:1337'
20 ]
21 var announceList = [
22 [ 'udp://tracker.openbittorrent.com:80' ],
23 [ 'udp://tracker.publicbt.com:80' ],
24 [ 'udp://tracker.istole.it:6969' ],
25 [ 'udp://tracker.ccc.de:80' ],
26 [ 'udp://open.demonii.com:1337' ]
27 ]
28 t.deepEqual(result.tr, announce)
29 t.deepEqual(result.announce, announce)
30 t.deepEqual(result.announceList, announceList)
31
32 t.end()
33})
34
35test('decode: empty magnet URIs return empty object', function (t) {
36 var empty1 = ''
37 var empty2 = 'magnet:'
38 var empty3 = 'magnet:?'
39
40 t.deepEqual(magnet(empty1), empty)
41 t.deepEqual(magnet(empty2), empty)
42 t.deepEqual(magnet(empty3), empty)
43 t.end()
44})
45
46test('empty string as keys is okay', function (t) {
47 var uri = 'magnet:?a=&b=&c='
48
49 t.deepEqual(magnet(uri), extend({ a: '', b: '', c: '' }, empty))
50 t.end()
51})
52
53test('decode: invalid magnet URIs return empty object', function (t) {
54 var invalid1 = 'magnet:?xt=urn:btih:==='
55 var invalid2 = 'magnet:?xt'
56 var invalid3 = 'magnet:?xt=?dn='
57
58 t.deepEqual(magnet(invalid1), empty)
59 t.deepEqual(magnet(invalid2), empty)
60 t.deepEqual(magnet(invalid3), empty)
61 t.end()
62})
63
64test('decode: invalid magnet URIs return only valid keys (ignoring invalid ones)', function (t) {
65 var invalid1 = 'magnet:?a=a&==='
66 var invalid2 = 'magnet:?a==&b=b'
67 var invalid3 = 'magnet:?a=b=&c=c&d==='
68
69 t.deepEqual(magnet(invalid1), extend({ a: 'a' }, empty))
70 t.deepEqual(magnet(invalid2), extend({ b: 'b' }, empty))
71 t.deepEqual(magnet(invalid3), extend({ c: 'c' }, empty))
72 t.end()
73})
74
75test('decode: extracts 40-char hex BitTorrent info_hash', function (t) {
76 var result = magnet('magnet:?xt=urn:btih:aad050ee1bb22e196939547b134535824dabf0ce')
77 t.equal(result.infoHash, 'aad050ee1bb22e196939547b134535824dabf0ce')
78 t.end()
79})
80
81test('decode: extracts 32-char base32 BitTorrent info_hash', function (t) {
82 var result = magnet('magnet:?xt=urn:btih:64DZYZWMUAVLIWJUXGDIK4QGAAIN7SL6')
83 t.equal(result.infoHash, 'f7079c66cca02ab45934b9868572060010dfc97e')
84 t.end()
85})
86
87test('decode: extracts keywords', function (t) {
88 var result = magnet('magnet:?xt=urn:btih:64DZYZWMUAVLIWJUXGDIK4QGAAIN7SL6&kt=joe+blow+mp3')
89 t.deepEqual(result.keywords, ['joe', 'blow', 'mp3'])
90 t.end()
91})
92
93test('decode: complicated magnet uri (multiple xt params, and as, xs)', function (t) {
94 var result = magnet('magnet:?xt=urn:ed2k:354B15E68FB8F36D7CD88FF94116CDC1&xt=urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY&xt=urn:btih:QHQXPYWMACKDWKP47RRVIV7VOURXFE5Q&xl=10826029&dn=mediawiki-1.15.1.tar.gz&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&as=http%3A%2F%2Fdownload.wikimedia.org%2Fmediawiki%2F1.15%2Fmediawiki-1.15.1.tar.gz&xs=http%3A%2F%2Fcache.example.org%2FXRX2PEFXOOEJFRVUCX6HMZMKS5TWG4K5&xs=dchub://example.org')
95 t.equal(result.infoHash, '81e177e2cc00943b29fcfc635457f575237293b0')
96 t.deepEqual(result.xt, [
97 'urn:ed2k:354B15E68FB8F36D7CD88FF94116CDC1',
98 'urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY',
99 'urn:btih:QHQXPYWMACKDWKP47RRVIV7VOURXFE5Q'
100 ])
101 t.equal(result.xl, '10826029')
102 t.equal(result.dn, 'mediawiki-1.15.1.tar.gz')
103 var announce = 'udp://tracker.openbittorrent.com:80/announce'
104 var announceList = [
105 [ 'udp://tracker.openbittorrent.com:80/announce' ]
106 ]
107 t.equal(result.tr, announce)
108 t.deepEqual(result.announce, [ announce ])
109 t.deepEqual(result.announceList, announceList)
110 t.equal(result.as, 'http://download.wikimedia.org/mediawiki/1.15/mediawiki-1.15.1.tar.gz')
111 t.deepEqual(result.urlList, [ 'http://download.wikimedia.org/mediawiki/1.15/mediawiki-1.15.1.tar.gz' ])
112 t.deepEqual(result.xs, [
113 'http://cache.example.org/XRX2PEFXOOEJFRVUCX6HMZMKS5TWG4K5',
114 'dchub://example.org'
115 ])
116 t.end()
117})
118
119test('multiple as, ws params', function (t) {
120 var result = magnet('magnet:?xt=urn:ed2k:354B15E68FB8F36D7CD88FF94116CDC1&as=http%3A%2F%2Fdownload.wikimedia.org%2Fmediawiki%2F1.15%2Fmediawiki-1.15.1.tar.gz&as=http%3A%2F%2Fdownload.wikimedia.org%2Fmediawiki%2F1.15%2Fmediawiki-1.15.1.tar.gz1&ws=http%3A%2F%2Fdownload.wikimedia.org%2Fmediawiki%2F1.15%2Fmediawiki-1.15.1.tar.gz2&ws=http%3A%2F%2Fdownload.wikimedia.org%2Fmediawiki%2F1.15%2Fmediawiki-1.15.1.tar.gz3')
121 t.deepEqual(result.urlList, [
122 'http://download.wikimedia.org/mediawiki/1.15/mediawiki-1.15.1.tar.gz',
123 'http://download.wikimedia.org/mediawiki/1.15/mediawiki-1.15.1.tar.gz1',
124 'http://download.wikimedia.org/mediawiki/1.15/mediawiki-1.15.1.tar.gz2',
125 'http://download.wikimedia.org/mediawiki/1.15/mediawiki-1.15.1.tar.gz3'
126 ])
127 t.end()
128})