Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/webtorrent/webtorrent.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--index.js10
-rw-r--r--test/duplicate.js280
2 files changed, 186 insertions, 104 deletions
diff --git a/index.js b/index.js
index dc6bedf..f5adda3 100644
--- a/index.js
+++ b/index.js
@@ -208,6 +208,16 @@ WebTorrent.prototype.add = function (torrentId, opts, ontorrent) {
var torrent = new Torrent(torrentId, self, opts)
self.torrents.push(torrent)
+ torrent.once('infoHash', function () {
+ for (var i = 0, len = self.torrents.length; i < len; i++) {
+ var t = self.torrents[i]
+ if (t.infoHash === torrent.infoHash && t !== torrent) {
+ torrent.removeListener('ready', onReady)
+ torrent._destroy(new Error('Cannot add duplicate torrent ' + torrent.infoHash))
+ return
+ }
+ }
+ })
torrent.once('ready', onReady)
function onReady () {
diff --git a/test/duplicate.js b/test/duplicate.js
index ca06b3d..a189660 100644
--- a/test/duplicate.js
+++ b/test/duplicate.js
@@ -1,104 +1,176 @@
-// var fixtures = require('webtorrent-fixtures')
-// var test = require('tape')
-// var WebTorrent = require('../')
-
-// test('client.seed followed by duplicate client.add', function (t) {
-// t.plan(6)
-
-// var client = new WebTorrent({ dht: false, tracker: false })
-// client.on('error', function (err) { t.fail(err) })
-// client.on('warning', function (err) { t.fail(err) })
-
-// client.seed(fixtures.leaves.content, {
-// name: 'Leaves of Grass by Walt Whitman.epub',
-// announce: []
-// }, function (torrent1) {
-// t.equal(client.torrents.length, 1)
-
-// var torrent2 = client.add(torrent1.infoHash)
-
-// torrent2.once('ready', function () {
-// t.fail('torrent ready is not called')
-// })
-
-// torrent2.once('error', function (err) {
-// t.ok(err, 'got expected error on duplicate add')
-// t.equal(client.torrents.length, 1)
-// t.ok(torrent2.destroyed)
-// client.destroy(function (err) {
-// t.error(err, 'destroyed client')
-// t.equal(client.torrents.length, 0)
-// })
-// })
-// })
-// })
-
-// TODO
-// test('client.seed followed by two duplicate client.add calls', function (t) {
-// t.plan(9)
-
-// var client = new WebTorrent({ dht: false, tracker: false })
-// client.on('error', function (err) { t.fail(err) })
-// client.on('warning', function (err) { t.fail(err) })
-
-// client.seed(fixtures.leaves.content, {
-// name: 'Leaves of Grass by Walt Whitman.epub',
-// announce: []
-// }, function (torrent1) {
-// t.equal(client.torrents.length, 1)
-
-// var torrent2 = client.add(torrent1.infoHash)
-
-// torrent2.once('ready', function () {
-// t.fail('torrent ready is not called')
-// })
-
-// torrent2.once('error', function (err) {
-// t.ok(err, 'got expected error on duplicate add')
-// t.equal(client.torrents.length, 1)
-// t.ok(torrent2.destroyed)
-
-// var torrent3 = client.add(torrent1.infoHash)
-
-// torrent3.once('ready', function () {
-// t.fail('torrent ready is not called')
-// })
-
-// torrent3.once('error', function (err) {
-// t.ok(err, 'got expected error on duplicate add')
-// t.equal(client.torrents.length, 1)
-// t.ok(torrent3.destroyed)
-// client.destroy(function (err) {
-// t.error(err, 'destroyed client')
-// t.equal(client.torrents.length, 0)
-// })
-// })
-// })
-// })
-// })
-
-// TODO
-// test('successive sync client.add, client.remove, client.add, client.remove', function (t) {
-// t.plan(3)
-
-// var client = new WebTorrent({ dht: false, tracker: false })
-// client.on('error', function (err) { t.fail(err) })
-// client.on('warning', function (err) { t.fail(err) })
-
-// client.seed(fixtures.leaves.content, {
-// name: 'Leaves of Grass by Walt Whitman.epub',
-// announce: []
-// }, function (torrent1) {
-// t.equal(client.torrents.length, 1)
-
-// client.add(torrent1.infoHash)
-// client.remove(torrent1.infoHash)
-// client.add(torrent1.infoHash)
-// client.remove(torrent1.infoHash, function () {
-// client.destroy(function (err) {
-// t.error(err, 'destroyed client')
-// t.equal(client.torrents.length, 0)
-// })
-// })
-// })
-// })
+var fixtures = require('webtorrent-fixtures')
+var test = require('tape')
+var WebTorrent = require('../')
+
+test('client.seed followed by duplicate client.add (sync)', function (t) {
+ t.plan(6)
+
+ var client = new WebTorrent({ dht: false, tracker: false })
+ client.on('error', function (err) { t.fail(err) })
+ client.on('warning', function (err) { t.fail(err) })
+
+ client.seed(fixtures.leaves.content, {
+ name: 'Leaves of Grass by Walt Whitman.epub',
+ announce: []
+ }, function (torrent1) {
+ t.equal(client.torrents.length, 1)
+
+ var torrent2 = client.add(torrent1.infoHash)
+
+ torrent2.once('ready', function () {
+ t.fail('torrent ready is not called')
+ })
+
+ torrent2.once('error', function (err) {
+ t.ok(err, 'got expected error on duplicate add')
+ t.equal(client.torrents.length, 1)
+ t.ok(torrent2.destroyed)
+ client.destroy(function (err) {
+ t.error(err, 'destroyed client')
+ t.equal(client.torrents.length, 0)
+ })
+ })
+ })
+})
+
+test('client.seed followed by duplicate client.add (async)', function (t) {
+ t.plan(6)
+
+ var client = new WebTorrent({ dht: false, tracker: false })
+ client.on('error', function (err) { t.fail(err) })
+ client.on('warning', function (err) { t.fail(err) })
+
+ client.seed(fixtures.leaves.content, {
+ name: 'Leaves of Grass by Walt Whitman.epub',
+ announce: []
+ }, function (torrent1) {
+ t.equal(client.torrents.length, 1)
+
+ var torrent2 = client.add(fixtures.leaves.torrentPath)
+
+ torrent2.once('ready', function () {
+ t.fail('torrent ready is not called')
+ })
+
+ torrent2.once('error', function (err) {
+ t.ok(err, 'got expected error on duplicate add')
+ t.equal(client.torrents.length, 1)
+ t.ok(torrent2.destroyed)
+ client.destroy(function (err) {
+ t.error(err, 'destroyed client')
+ t.equal(client.torrents.length, 0)
+ })
+ })
+ })
+})
+
+test('client.seed followed by two duplicate client.add calls (sync)', function (t) {
+ t.plan(9)
+
+ var client = new WebTorrent({ dht: false, tracker: false })
+ client.on('error', function (err) { t.fail(err) })
+ client.on('warning', function (err) { t.fail(err) })
+
+ client.seed(fixtures.leaves.content, {
+ name: 'Leaves of Grass by Walt Whitman.epub',
+ announce: []
+ }, function (torrent1) {
+ t.equal(client.torrents.length, 1)
+
+ var torrent2 = client.add(torrent1.infoHash)
+
+ torrent2.once('ready', function () {
+ t.fail('torrent ready is not called')
+ })
+
+ torrent2.once('error', function (err) {
+ t.ok(err, 'got expected error on duplicate add')
+ t.equal(client.torrents.length, 1)
+ t.ok(torrent2.destroyed)
+
+ var torrent3 = client.add(torrent1.infoHash)
+
+ torrent3.once('ready', function () {
+ t.fail('torrent ready is not called')
+ })
+
+ torrent3.once('error', function (err) {
+ t.ok(err, 'got expected error on duplicate add')
+ t.equal(client.torrents.length, 1)
+ t.ok(torrent3.destroyed)
+ client.destroy(function (err) {
+ t.error(err, 'destroyed client')
+ t.equal(client.torrents.length, 0)
+ })
+ })
+ })
+ })
+})
+
+test('client.seed followed by two duplicate client.add calls (async)', function (t) {
+ t.plan(9)
+
+ var client = new WebTorrent({ dht: false, tracker: false })
+ client.on('error', function (err) { t.fail(err) })
+ client.on('warning', function (err) { t.fail(err) })
+
+ client.seed(fixtures.leaves.content, {
+ name: 'Leaves of Grass by Walt Whitman.epub',
+ announce: []
+ }, function (torrent1) {
+ t.equal(client.torrents.length, 1)
+
+ var torrent2 = client.add(fixtures.leaves.torrentPath)
+
+ torrent2.once('ready', function () {
+ t.fail('torrent ready is not called')
+ })
+
+ torrent2.once('error', function (err) {
+ t.ok(err, 'got expected error on duplicate add')
+ t.equal(client.torrents.length, 1)
+ t.ok(torrent2.destroyed)
+
+ var torrent3 = client.add(fixtures.leaves.torrentPath)
+
+ torrent3.once('ready', function () {
+ t.fail('torrent ready is not called')
+ })
+
+ torrent3.once('error', function (err) {
+ t.ok(err, 'got expected error on duplicate add')
+ t.equal(client.torrents.length, 1)
+ t.ok(torrent3.destroyed)
+ client.destroy(function (err) {
+ t.error(err, 'destroyed client')
+ t.equal(client.torrents.length, 0)
+ })
+ })
+ })
+ })
+})
+
+test('successive sync client.add, client.remove, client.add, client.remove (sync)', function (t) {
+ t.plan(3)
+
+ var client = new WebTorrent({ dht: false, tracker: false })
+ client.on('error', function (err) { t.fail(err) })
+ client.on('warning', function (err) { t.fail(err) })
+
+ client.seed(fixtures.leaves.content, {
+ name: 'Leaves of Grass by Walt Whitman.epub',
+ announce: []
+ }, function (torrent1) {
+ t.equal(client.torrents.length, 1)
+
+ client.add(torrent1.infoHash)
+ client.remove(torrent1.infoHash)
+ client.add(torrent1.infoHash)
+ client.remove(torrent1.infoHash, function () {
+ client.destroy(function (err) {
+ t.error(err, 'destroyed client')
+ t.equal(client.torrents.length, 0)
+ })
+ })
+ })
+})