diff options
author | Feross Aboukhadijeh <feross@feross.org> | 2015-12-30 02:03:00 +0300 |
---|---|---|
committer | Feross Aboukhadijeh <feross@feross.org> | 2015-12-30 02:03:00 +0300 |
commit | 0b4dfc608600390b108b846a7bebd293ebf73937 (patch) | |
tree | 976d21b7bd13dc6f162884aaad969619d731444d /test/node/download-dht-magnet.js | |
parent | b378a8e40b62348733d7bef4a75ec1798e2b1131 (diff) |
Add more browser tests
Run more of the tests in the browser. There's now a test/node and test/browser folder for tests that are specific to each environment. Anything in test/ will be run in both environments.
Diffstat (limited to 'test/node/download-dht-magnet.js')
-rw-r--r-- | test/node/download-dht-magnet.js | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/test/node/download-dht-magnet.js b/test/node/download-dht-magnet.js new file mode 100644 index 0000000..e7a7232 --- /dev/null +++ b/test/node/download-dht-magnet.js @@ -0,0 +1,108 @@ +var common = require('../common') +var DHT = require('bittorrent-dht/server') +var fs = require('fs') +var series = require('run-series') +var test = require('tape') +var WebTorrent = require('../../') + +test('Download using DHT (via magnet uri)', function (t) { + t.plan(10) + + var dhtServer = new DHT({ bootstrap: false }) + + dhtServer.on('error', function (err) { t.fail(err) }) + dhtServer.on('warning', function (err) { t.fail(err) }) + + var magnetUri = 'magnet:?xt=urn:btih:' + common.leaves.parsedTorrent.infoHash + 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 } + }) + + client1.on('error', function (err) { t.fail(err) }) + client1.on('warning', function (err) { t.fail(err) }) + + var torrent = client1.add(common.leaves.parsedTorrent) + + torrent.on('dhtAnnounce', function () { + announced = true + maybeDone() + }) + + torrent.on('ready', function () { + // torrent metadata has been fetched -- sanity check it + t.equal(torrent.name, 'Leaves of Grass by Walt Whitman.epub') + + var names = [ 'Leaves of Grass by Walt Whitman.epub' ] + t.deepEqual(torrent.files.map(function (file) { return file.name }), names) + + torrent.load(fs.createReadStream(common.leaves.contentPath), function (err) { + t.error(err) + loaded = true + maybeDone() + }) + }) + + var announced = false + var loaded = false + function maybeDone () { + if (announced && loaded) cb(null, client1) + } + }, + + function (cb) { + client2 = new WebTorrent({ + tracker: false, + dht: { bootstrap: '127.0.0.1:' + dhtServer.address().port } + }) + + client2.on('error', function (err) { t.fail(err) }) + client2.on('warning', function (err) { t.fail(err) }) + + client2.on('torrent', function (torrent) { + torrent.files[0].getBuffer(function (err, buf) { + t.error(err) + t.deepEqual(buf, common.leaves.content, 'downloaded correct content') + + gotBuffer = true + maybeDone() + }) + + torrent.once('done', function () { + t.pass('client2 downloaded torrent from client1') + + gotDone = true + maybeDone() + }) + }) + + client2.add(magnetUri) + + var gotBuffer = false + var gotDone = false + function maybeDone () { + if (gotBuffer && gotDone) cb(null, client2) + } + } + ], 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') + }) + }) +}) |