/ test / client-ws-socket-pool.js
client-ws-socket-pool.js
 1  import Client from '../index.js'
 2  import common from './common.js'
 3  import fixtures from 'webtorrent-fixtures'
 4  import test from 'tape'
 5  
 6  const peerId = Buffer.from('01234567890123456789')
 7  const port = 6681
 8  
 9  test('ensure client.destroy() callback is called with re-used websockets in socketPool', t => {
10    t.plan(4)
11  
12    common.createServer(t, 'ws', (server, announceUrl) => {
13      const client1 = new Client({
14        infoHash: fixtures.leaves.parsedTorrent.infoHash,
15        announce: announceUrl,
16        peerId,
17        port,
18        wrtc: {}
19      })
20  
21      common.mockWebsocketTracker(client1)
22      client1.on('error', err => { t.error(err) })
23      client1.on('warning', err => { t.error(err) })
24  
25      client1.start()
26  
27      client1.once('update', () => {
28        t.pass('got client1 update')
29        // second ws client using same announce url will re-use the same websocket
30        const client2 = new Client({
31          infoHash: fixtures.alice.parsedTorrent.infoHash, // different info hash
32          announce: announceUrl,
33          peerId,
34          port,
35          wrtc: {}
36        })
37  
38        common.mockWebsocketTracker(client2)
39        client2.on('error', err => { t.error(err) })
40        client2.on('warning', err => { t.error(err) })
41  
42        client2.start()
43  
44        client2.once('update', () => {
45          t.pass('got client2 update')
46          client1.destroy(err => {
47            t.error(err, 'got client1 destroy callback')
48            client2.destroy(err => {
49              t.error(err, 'got client2 destroy callback')
50              server.close()
51            })
52          })
53        })
54      })
55    })
56  })