From 178e01c21a712791bf6f5a190d28f82ff8a98c9d Mon Sep 17 00:00:00 2001 From: Feross Aboukhadijeh Date: Mon, 11 Jan 2016 00:08:49 +0100 Subject: test: download multiple files at same time Fixes #125 --- test/node/download-multiple.js | 142 +++++++++++++++++++++++++++++++++++++++++ test/node/multiple.js | 61 ------------------ 2 files changed, 142 insertions(+), 61 deletions(-) create mode 100644 test/node/download-multiple.js delete mode 100644 test/node/multiple.js (limited to 'test/node') diff --git a/test/node/download-multiple.js b/test/node/download-multiple.js new file mode 100644 index 0000000..f579b5f --- /dev/null +++ b/test/node/download-multiple.js @@ -0,0 +1,142 @@ +var common = require('../common') +var DHT = require('bittorrent-dht/server') +var fs = require('fs') +var networkAddress = require('network-address') +var series = require('run-series') +var test = require('tape') +var WebTorrent = require('../../') + +test('Download using DHT (via magnet uri)', function (t) { + t.plan(14) + + var dhtServer = new DHT({ bootstrap: false }) + + dhtServer.on('error', function (err) { t.fail(err) }) + dhtServer.on('warning', function (err) { t.fail(err) }) + + var client1, client2 + + series([ + function (cb) { + dhtServer.listen(cb) + }, + + function (cb) { + client1 = new WebTorrent({ + tracker: false, + dht: { bootstrap: '127.0.0.1:' + dhtServer.address().port, host: networkAddress.ipv4() } + }) + + client1.on('error', function (err) { t.fail(err) }) + client1.on('warning', function (err) { t.fail(err) }) + + var torrent = client1.add(common.leaves.torrent) + + torrent.on('dhtAnnounce', function () { + t.pass('client1 finished dht announce') + announced = true + maybeDone() + }) + + torrent.load(fs.createReadStream(common.leaves.contentPath), function (err) { + t.error(err, 'client1 started seeding') + loaded = true + maybeDone() + }) + + var announced = false + var loaded = false + function maybeDone () { + if (announced && loaded) cb(null) + } + }, + + function (cb) { + client2 = new WebTorrent({ + tracker: false, + dht: { bootstrap: '127.0.0.1:' + dhtServer.address().port, host: networkAddress.ipv4() }, + torrentPort: client1.torrentPort + 1 + }) + + client2.on('error', function (err) { t.fail(err) }) + client2.on('warning', function (err) { t.fail(err) }) + + var torrent = client2.add(common.alice.torrent) + + torrent.on('dhtAnnounce', function () { + t.pass('client2 finished dht announce') + announced = true + maybeDone() + }) + + torrent.load(fs.createReadStream(common.alice.contentPath), function (err) { + t.error(err, 'client2 started seeding') + loaded = true + maybeDone() + }) + + var announced = false + var loaded = false + function maybeDone () { + if (announced && loaded) cb(null) + } + }, + + function (cb) { + client1.add(common.alice.magnetURI) + + client1.on('torrent', function (torrent) { + torrent.files[0].getBuffer(function (err, buf) { + t.error(err) + t.deepEqual(buf, common.alice.content, 'client1 downloaded correct content') + gotBuffer1 = true + maybeDone() + }) + + torrent.once('done', function () { + t.pass('client1 downloaded torrent from client2') + gotDone1 = true + maybeDone() + }) + }) + + client2.add(common.leaves.magnetURI) + + client2.on('torrent', function (torrent) { + torrent.files[0].getBuffer(function (err, buf) { + t.error(err) + t.deepEqual(buf, common.leaves.content, 'client2 downloaded correct content') + gotBuffer2 = true + maybeDone() + }) + + torrent.once('done', function () { + t.pass('client2 downloaded torrent from client1') + gotDone2 = true + maybeDone() + }) + }) + + var gotBuffer1 = false + var gotBuffer2 = false + var gotDone1 = false + var gotDone2 = false + function maybeDone () { + if (gotBuffer1 && gotBuffer2 && gotDone1 && gotDone2) cb(null) + } + } + + ], function (err) { + t.error(err) + + client1.destroy(function (err) { + t.error(err, 'client1 destroyed') + }) + client2.destroy(function (err) { + t.error(err, 'client2 destroyed') + }) + dhtServer.destroy(function (err) { + t.error(err, 'dht server destroyed') + }) + }) +}) diff --git a/test/node/multiple.js b/test/node/multiple.js deleted file mode 100644 index 1c021f2..0000000 --- a/test/node/multiple.js +++ /dev/null @@ -1,61 +0,0 @@ -/* -var path = require('path') -var fs = require('fs') -var test = require('tape') -var WebTorrent = require('../../') - -var torrents = [ 'leaves', 'pride' ].map(function (name) { - return fs.readFileSync(path.resolve(__dirname, 'fixtures', name + '.torrent')) -}) - -// TODO: replace this with a test that can run offline -test('two simultaneous downloads with dht disabled', function (t) { - t.plan(torrents.length * 2) - - var client = new WebTorrent({ dht: false }) - var numDone = 0 - - client.on('error', function (err) { t.fail(err.message) }) - - torrents.forEach(function (torrent) { - client.add(torrent) - }) - - client.on('torrent', function (torrent) { - t.pass('received metadata for torrent ' + torrent.name) - - torrent.once('done', function () { - t.pass('done downloading torrent ' + torrent.name) - - if (++numDone >= torrents.length) { - client.destroy() - } - }) - }) -}) - -test('two simultaneous downloads with dht enabled', function (t) { - t.plan(torrents.length * 2) - - var client = new WebTorrent() - var numDone = 0 - - client.on('error', function (err) { t.fail(err.message) }) - - torrents.forEach(function (torrent) { - client.add(torrent) - }) - - client.on('torrent', function (torrent) { - t.pass('received metadata for torrent ' + torrent.name) - - torrent.once('done', function () { - t.pass('done downloading torrent ' + torrent.name) - - if (++numDone >= torrents.length) { - client.destroy() - } - }) - }) -}) -*/ -- cgit v1.2.3