Skip to content

Commit 7a0fe31

Browse files
committed
add websocket tracker tests
1 parent b34fc10 commit 7a0fe31

File tree

2 files changed

+81
-53
lines changed

2 files changed

+81
-53
lines changed

test/client.js

Lines changed: 68 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,33 @@ var peerId2 = new Buffer('12345678901234567890')
1212
var peerId3 = new Buffer('23456789012345678901')
1313
var port = 6881
1414

15+
function mockWebSocketTracker (client) {
16+
client._trackers[0]._generateOffers = function (numwant, cb) {
17+
var offers = []
18+
for (var i = 0; i < numwant; i++) {
19+
offers.push('fake_offer_' + i)
20+
}
21+
process.nextTick(function () {
22+
cb(offers)
23+
})
24+
}
25+
}
26+
1527
function testClientStart (t, serverType) {
16-
t.plan(5)
28+
t.plan(4)
1729
common.createServer(t, serverType, function (server, announceUrl) {
1830
parsedTorrent.announce = [ announceUrl ]
19-
var client = new Client(peerId1, port, parsedTorrent)
31+
var client = new Client(peerId1, port, parsedTorrent, { wrtc: {} })
2032

21-
client.on('error', function (err) {
22-
t.error(err)
23-
})
24-
25-
client.on('warning', function (err) {
26-
t.error(err)
27-
})
33+
if (serverType === 'ws') mockWebSocketTracker(client)
34+
client.on('error', function (err) { t.error(err) })
35+
client.on('warning', function (err) { t.error(err) })
2836

2937
client.once('update', function (data) {
3038
t.equal(data.announce, announceUrl)
3139
t.equal(typeof data.complete, 'number')
3240
t.equal(typeof data.incomplete, 'number')
33-
})
3441

35-
client.once('peer', function () {
36-
t.pass('there is at least one peer')
3742
client.stop()
3843

3944
client.once('update', function () {
@@ -55,19 +60,19 @@ test('udp: client.start()', function (t) {
5560
testClientStart(t, 'udp')
5661
})
5762

63+
test('ws: client.start()', function (t) {
64+
testClientStart(t, 'ws')
65+
})
66+
5867
function testClientStop (t, serverType) {
5968
t.plan(3)
6069
common.createServer(t, serverType, function (server, announceUrl) {
6170
parsedTorrent.announce = [ announceUrl ]
62-
var client = new Client(peerId1, port, parsedTorrent)
71+
var client = new Client(peerId1, port, parsedTorrent, { wrtc: {} })
6372

64-
client.on('error', function (err) {
65-
t.error(err)
66-
})
67-
68-
client.on('warning', function (err) {
69-
t.error(err)
70-
})
73+
if (serverType === 'ws') mockWebSocketTracker(client)
74+
client.on('error', function (err) { t.error(err) })
75+
client.on('warning', function (err) { t.error(err) })
7176

7277
client.start()
7378

@@ -95,20 +100,21 @@ test('udp: client.stop()', function (t) {
95100
testClientStop(t, 'udp')
96101
})
97102

103+
test('ws: client.stop()', function (t) {
104+
testClientStop(t, 'ws')
105+
})
106+
98107
function testClientUpdate (t, serverType) {
99108
t.plan(4)
100109
common.createServer(t, serverType, function (server, announceUrl) {
101110
parsedTorrent.announce = [ announceUrl ]
102-
var client = new Client(peerId1, port, parsedTorrent)
103-
client.setInterval(2000)
111+
var client = new Client(peerId1, port, parsedTorrent, { wrtc: {} })
104112

105-
client.on('error', function (err) {
106-
t.error(err)
107-
})
113+
if (serverType === 'ws') mockWebSocketTracker(client)
114+
client.on('error', function (err) { t.error(err) })
115+
client.on('warning', function (err) { t.error(err) })
108116

109-
client.on('warning', function (err) {
110-
t.error(err)
111-
})
117+
client.setInterval(2000)
112118

113119
client.start()
114120

@@ -141,19 +147,19 @@ test('udp: client.update()', function (t) {
141147
testClientUpdate(t, 'udp')
142148
})
143149

150+
test('ws: client.update()', function (t) {
151+
testClientUpdate(t, 'ws')
152+
})
153+
144154
function testClientScrape (t, serverType) {
145155
t.plan(4)
146156
common.createServer(t, serverType, function (server, announceUrl) {
147157
parsedTorrent.announce = [ announceUrl ]
148-
var client = new Client(peerId1, port, parsedTorrent)
158+
var client = new Client(peerId1, port, parsedTorrent, { wrtc: {} })
149159

150-
client.on('error', function (err) {
151-
t.error(err)
152-
})
153-
154-
client.on('warning', function (err) {
155-
t.error(err)
156-
})
160+
if (serverType === 'ws') mockWebSocketTracker(client)
161+
client.on('error', function (err) { t.error(err) })
162+
client.on('warning', function (err) { t.error(err) })
157163

158164
client.once('scrape', function (data) {
159165
t.equal(data.announce, announceUrl)
@@ -177,27 +183,37 @@ test('udp: client.scrape()', function (t) {
177183
testClientScrape(t, 'udp')
178184
})
179185

186+
// TODO: uncomment once scrape is supported on WebSocket trackers
187+
// test('ws: client.scrape()', function (t) {
188+
// testClientScrape(t, 'ws')
189+
// })
190+
180191
function testClientAnnounceWithNumWant (t, serverType) {
181192
t.plan(4)
182193
common.createServer(t, serverType, function (server, announceUrl) {
183194
parsedTorrent.announce = [ announceUrl ]
184-
var client1 = new Client(peerId1, port, parsedTorrent)
185-
client1.on('error', function (err) {
186-
t.error(err)
187-
})
195+
var client1 = new Client(peerId1, port, parsedTorrent, { wrtc: {} })
196+
197+
if (serverType === 'ws') mockWebSocketTracker(client1)
198+
client1.on('error', function (err) { t.error(err) })
199+
client1.on('warning', function (err) { t.error(err) })
188200

189201
client1.start()
190202
client1.once('update', function () {
191-
var client2 = new Client(peerId2, port + 1, parsedTorrent)
192-
client2.on('error', function (err) {
193-
t.error(err)
194-
})
203+
var client2 = new Client(peerId2, port + 1, parsedTorrent, { wrtc: {} })
204+
205+
if (serverType === 'ws') mockWebSocketTracker(client2)
206+
client2.on('error', function (err) { t.error(err) })
207+
client2.on('warning', function (err) { t.error(err) })
208+
195209
client2.start()
196210
client2.once('update', function () {
197-
var client3 = new Client(peerId3, port + 2, parsedTorrent)
198-
client3.on('error', function (err) {
199-
t.error(err)
200-
})
211+
var client3 = new Client(peerId3, port + 2, parsedTorrent, { wrtc: {} })
212+
213+
if (serverType === 'ws') mockWebSocketTracker(client3)
214+
client3.on('error', function (err) { t.error(err) })
215+
client3.on('warning', function (err) { t.error(err) })
216+
201217
client3.start({ numwant: 1 })
202218
client3.on('peer', function () {
203219
t.pass('got one peer (this should only fire once)')
@@ -239,3 +255,7 @@ test('http: client announce with numwant', function (t) {
239255
test('udp: client announce with numwant', function (t) {
240256
testClientAnnounceWithNumWant(t, 'udp')
241257
})
258+
259+
test('ws: client announce with numwant', function (t) {
260+
testClientAnnounceWithNumWant(t, 'ws')
261+
})

test/common.js

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
var Server = require('../').Server
22

33
exports.createServer = function (t, serverType, cb) {
4-
var opts = serverType === 'http' ? { udp: false, ws: false } : { http: false, ws: false }
5-
var server = new Server(opts)
4+
var server = new Server({
5+
http: serverType === 'http',
6+
udp: serverType === 'udp',
7+
ws: serverType === 'ws'
8+
})
69

710
server.on('error', function (err) {
811
t.error(err)
@@ -14,9 +17,14 @@ exports.createServer = function (t, serverType, cb) {
1417

1518
server.listen(0, function () {
1619
var port = server[serverType].address().port
17-
var announceUrl = serverType === 'http'
18-
? 'http://127.0.0.1:' + port + '/announce'
19-
: 'udp://127.0.0.1:' + port
20+
var announceUrl
21+
if (serverType === 'http') {
22+
announceUrl = 'http://127.0.0.1:' + port + '/announce'
23+
} else if (serverType === 'udp') {
24+
announceUrl = 'udp://127.0.0.1:' + port
25+
} else if (serverType === 'ws') {
26+
announceUrl = 'ws://127.0.0.1:' + port
27+
}
2028

2129
cb(server, announceUrl)
2230
})

0 commit comments

Comments
 (0)