Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions lib/client/websocket-tracker.js
Original file line number Diff line number Diff line change
Expand Up @@ -169,12 +169,12 @@ WebSocketTracker.prototype._openSocket = function () {
} else {
self.socket = socketPool[self.announceUrl] = new Socket(self.announceUrl)
self.socket.consumers = 1
self.socket.on('connect', self._onSocketConnectBound)
self.socket.once('connect', self._onSocketConnectBound)
}

self.socket.on('data', self._onSocketDataBound)
self.socket.on('close', self._onSocketCloseBound)
self.socket.on('error', self._onSocketErrorBound)
self.socket.once('close', self._onSocketCloseBound)
self.socket.once('error', self._onSocketErrorBound)
}

WebSocketTracker.prototype._onSocketConnect = function () {
Expand Down
51 changes: 51 additions & 0 deletions test/destroy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
var Buffer = require('safe-buffer').Buffer
var Client = require('../')
var common = require('./common')
var fixtures = require('webtorrent-fixtures')
var test = require('tape')

var peerId = Buffer.from('01234567890123456789')
var port = 6881

function testNoEventsAfterDestroy (t, serverType) {
t.plan(1)

common.createServer(t, serverType, function (server, announceUrl) {
var client = new Client({
infoHash: fixtures.leaves.parsedTorrent.infoHash,
announce: announceUrl,
peerId: peerId,
port: port,
wrtc: {}
})

if (serverType === 'ws') common.mockWebsocketTracker(client)
client.on('error', function (err) { t.error(err) })
client.on('warning', function (err) { t.error(err) })

client.once('update', function () {
t.fail('no "update" event should fire, since client is destroyed')
})

// announce, then immediately destroy
client.update()
client.destroy()

setTimeout(function () {
t.pass('wait to see if any events are fired')
server.close()
}, 1000)
})
}

test('http: no "update" events after destroy()', function (t) {
testNoEventsAfterDestroy(t, 'http')
})

test('udp: no "update" events after destroy()', function (t) {
testNoEventsAfterDestroy(t, 'udp')
})

test('ws: no "update" events after destroy()', function (t) {
testNoEventsAfterDestroy(t, 'ws')
})