|
1 | 1 | var Client = require('../').Client |
2 | 2 | var fs = require('fs') |
3 | 3 | var magnet = require('magnet-uri') |
| 4 | +var portfinder = require('portfinder') |
| 5 | +var Server = require('../').Server |
4 | 6 | var test = require('tape') |
5 | 7 |
|
6 | 8 | var uri = 'magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36&dn=Leaves+of+Grass+by+Walt+Whitman.epub&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80' |
7 | 9 | var parsedTorrent = magnet(uri) |
8 | 10 | var peerId = new Buffer('01234567890123456789') |
9 | | -var announceUrl = 'udp://tracker.openbittorrent.com:80' // TODO: shouldn't rely on an external server! |
10 | | -var port = 6881 |
11 | 11 |
|
12 | 12 | test('magnet + udp: client.start/update/stop()', function (t) { |
13 | | - t.plan(10) |
| 13 | + t.plan(12) |
14 | 14 |
|
15 | | - var client = new Client(peerId, port, parsedTorrent) |
| 15 | + var server = new Server({ http: false }) |
16 | 16 |
|
17 | | - client.on('error', function (err) { |
18 | | - t.error(err) |
| 17 | + server.on('error', function (err) { |
| 18 | + t.fail(err.message) |
19 | 19 | }) |
20 | 20 |
|
21 | | - client.once('update', function (data) { |
22 | | - t.equal(data.announce, announceUrl) |
23 | | - t.equal(typeof data.complete, 'number') |
24 | | - t.equal(typeof data.incomplete, 'number') |
| 21 | + server.on('warning', function (err) { |
| 22 | + t.fail(err.message) |
25 | 23 | }) |
26 | 24 |
|
27 | | - client.once('peer', function (addr) { |
28 | | - t.pass('there is at least one peer') // TODO: this shouldn't rely on an external server! |
| 25 | + portfinder.getPort(function (err, port) { |
| 26 | + t.error(err, 'found free port') |
| 27 | + server.listen(port) |
| 28 | + var announceUrl = 'udp://127.0.0.1:' + port // TODO: shouldn't rely on an external server! |
| 29 | + |
| 30 | + // remove all tracker servers except a single UDP one, for now |
| 31 | + parsedTorrent.announce = [ announceUrl ] |
| 32 | + |
| 33 | + var client = new Client(peerId, 6881, parsedTorrent) |
| 34 | + |
| 35 | + client.on('error', function (err) { |
| 36 | + t.error(err) |
| 37 | + }) |
29 | 38 |
|
30 | 39 | client.once('update', function (data) { |
31 | | - // receive one final update after calling stop |
32 | 40 | t.equal(data.announce, announceUrl) |
33 | 41 | t.equal(typeof data.complete, 'number') |
34 | 42 | t.equal(typeof data.incomplete, 'number') |
| 43 | + }) |
| 44 | + |
| 45 | + client.start() |
| 46 | + |
| 47 | + client.once('peer', function (addr) { |
| 48 | + t.pass('there is at least one peer') // TODO: this shouldn't rely on an external server! |
| 49 | + |
| 50 | + client.update() |
35 | 51 |
|
36 | 52 | client.once('update', function (data) { |
37 | | - // received an update! |
| 53 | + // receive one final update after calling stop |
38 | 54 | t.equal(data.announce, announceUrl) |
39 | 55 | t.equal(typeof data.complete, 'number') |
40 | 56 | t.equal(typeof data.incomplete, 'number') |
41 | | - }) |
42 | 57 |
|
43 | | - client.stop() |
44 | | - }) |
| 58 | + client.stop() |
45 | 59 |
|
46 | | - client.update() |
47 | | - }) |
| 60 | + client.once('update', function (data) { |
| 61 | + // received an update! |
| 62 | + t.equal(data.announce, announceUrl) |
| 63 | + t.equal(typeof data.complete, 'number') |
| 64 | + t.equal(typeof data.incomplete, 'number') |
48 | 65 |
|
49 | | - client.start() |
| 66 | + server.close(function () { |
| 67 | + t.pass('server closed') |
| 68 | + }) |
| 69 | + }) |
| 70 | + }) |
| 71 | + }) |
| 72 | + }) |
50 | 73 | }) |
0 commit comments