Skip to content

Commit 539f1bf

Browse files
committed
add single scrape, multi scrape, all scrape tests
1 parent ec67f42 commit 539f1bf

File tree

1 file changed

+168
-0
lines changed

1 file changed

+168
-0
lines changed

test/scrape.js

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
var bencode = require('bencode')
2+
var Client = require('../')
3+
var common = require('../lib/common')
4+
var concat = require('concat-stream')
5+
var fs = require('fs')
6+
var http = require('http')
7+
var parseTorrent = require('parse-torrent')
8+
var portfinder = require('portfinder')
9+
var querystring = require('querystring')
10+
var Server = require('../').Server
11+
var test = require('tape')
12+
13+
var infoHash1 = 'aaa67059ed6bd08362da625b3ae77f6f4a075aaa'
14+
var encodedInfoHash1 = common.bytewiseEncodeURIComponent(
15+
new Buffer(infoHash1, 'hex')
16+
)
17+
var infoHash2 = 'bbb67059ed6bd08362da625b3ae77f6f4a075bbb'
18+
var encodedInfoHash2 = common.bytewiseEncodeURIComponent(
19+
new Buffer(infoHash2, 'hex')
20+
)
21+
22+
var bitlove = fs.readFileSync(__dirname + '/torrents/bitlove-intro.torrent')
23+
var parsedBitlove = parseTorrent(bitlove)
24+
var encodedBitlove = common.bytewiseEncodeURIComponent(
25+
new Buffer(parsedBitlove.infoHash, 'hex')
26+
)
27+
var peerId = new Buffer('01234567890123456789')
28+
29+
test('server: single info_hash scrape', function (t) {
30+
var server = new Server({ udp: false })
31+
server.on('error', function (err) {
32+
t.error(err)
33+
})
34+
server.on('warning', function (err) {
35+
t.error(err)
36+
})
37+
38+
portfinder.getPort(function (err, port) {
39+
t.error(err)
40+
server.listen(port)
41+
var scrapeUrl = 'http://127.0.0.1:' + port + '/scrape'
42+
43+
server.once('listening', function () {
44+
var url = scrapeUrl + '?' + querystring.stringify({
45+
info_hash: encodedInfoHash1
46+
})
47+
http.get(url, function (res) {
48+
t.equal(res.statusCode, 200)
49+
res.pipe(concat(function (data) {
50+
data = bencode.decode(data)
51+
t.ok(data.files)
52+
t.equal(Object.keys(data.files).length, 1)
53+
t.ok(data.files[encodedInfoHash1])
54+
t.equal(typeof data.files[encodedInfoHash1].complete, 'number')
55+
t.equal(typeof data.files[encodedInfoHash1].incomplete, 'number')
56+
t.equal(typeof data.files[encodedInfoHash1].downloaded, 'number')
57+
58+
server.close(function () {
59+
t.end()
60+
})
61+
}))
62+
}).on('error', function (e) {
63+
t.error(err)
64+
})
65+
})
66+
})
67+
})
68+
69+
test('server: multiple info_hash scrape', function (t) {
70+
var server = new Server({ udp: false })
71+
server.on('error', function (err) {
72+
t.error(err)
73+
})
74+
server.on('warning', function (err) {
75+
t.error(err)
76+
})
77+
78+
portfinder.getPort(function (err, port) {
79+
t.error(err)
80+
server.listen(port)
81+
var scrapeUrl = 'http://127.0.0.1:' + port + '/scrape'
82+
83+
server.once('listening', function () {
84+
var url = scrapeUrl + '?' + querystring.stringify({
85+
info_hash: [ encodedInfoHash1, encodedInfoHash2 ]
86+
})
87+
http.get(url, function (res) {
88+
t.equal(res.statusCode, 200)
89+
res.pipe(concat(function (data) {
90+
data = bencode.decode(data)
91+
t.ok(data.files)
92+
t.equal(Object.keys(data.files).length, 2)
93+
94+
t.ok(data.files[encodedInfoHash1])
95+
t.equal(typeof data.files[encodedInfoHash1].complete, 'number')
96+
t.equal(typeof data.files[encodedInfoHash1].incomplete, 'number')
97+
t.equal(typeof data.files[encodedInfoHash1].downloaded, 'number')
98+
99+
t.ok(data.files[encodedInfoHash2])
100+
t.equal(typeof data.files[encodedInfoHash2].complete, 'number')
101+
t.equal(typeof data.files[encodedInfoHash2].incomplete, 'number')
102+
t.equal(typeof data.files[encodedInfoHash2].downloaded, 'number')
103+
104+
server.close(function () {
105+
t.end()
106+
})
107+
}))
108+
}).on('error', function (e) {
109+
t.error(err)
110+
})
111+
})
112+
})
113+
})
114+
115+
test('server: all info_hash scrape', function (t) {
116+
var server = new Server({ udp: false })
117+
server.on('error', function (err) {
118+
t.error(err)
119+
})
120+
server.on('warning', function (err) {
121+
t.error(err)
122+
})
123+
124+
portfinder.getPort(function (err, port) {
125+
t.error(err)
126+
server.listen(port)
127+
var announceUrl = 'http://127.0.0.1:' + port + '/announce'
128+
var scrapeUrl = 'http://127.0.0.1:' + port + '/scrape'
129+
130+
parsedBitlove.announce = [ announceUrl ]
131+
132+
server.once('listening', function () {
133+
134+
// announce a torrent to the tracker
135+
var client = new Client(peerId, port, parsedBitlove)
136+
client.on('error', function (err) {
137+
t.error(err)
138+
})
139+
client.start()
140+
141+
server.once('start', function (data) {
142+
143+
// now do a scrape of everything by omitting the info_hash param
144+
http.get(scrapeUrl, function (res) {
145+
146+
t.equal(res.statusCode, 200)
147+
res.pipe(concat(function (data) {
148+
data = bencode.decode(data)
149+
t.ok(data.files)
150+
t.equal(Object.keys(data.files).length, 1)
151+
152+
t.ok(data.files[encodedBitlove])
153+
t.equal(typeof data.files[encodedBitlove].complete, 'number')
154+
t.equal(typeof data.files[encodedBitlove].incomplete, 'number')
155+
t.equal(typeof data.files[encodedBitlove].downloaded, 'number')
156+
157+
client.stop()
158+
server.close(function () {
159+
t.end()
160+
})
161+
}))
162+
}).on('error', function (e) {
163+
t.error(err)
164+
})
165+
})
166+
})
167+
})
168+
})

0 commit comments

Comments
 (0)