Skip to content
This repository was archived by the owner on Apr 24, 2023. It is now read-only.

Commit f4dc087

Browse files
kumavisvasco-santos
authored andcommittedMay 12, 2019
feat: start/stop discovery events when start/stop called (#176)
1 parent 6187da5 commit f4dc087

File tree

3 files changed

+101
-10
lines changed

3 files changed

+101
-10
lines changed
 

‎src/index.js

+11-2
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,15 @@ class WebRTCStar {
4343

4444
this.discovery = new EE()
4545
this.discovery.tag = 'webRTCStar'
46-
this.discovery.start = (callback) => { setImmediate(callback) }
47-
this.discovery.stop = (callback) => { setImmediate(callback) }
46+
this.discovery._isStarted = false
47+
this.discovery.start = (callback) => {
48+
this.discovery._isStarted = true
49+
setImmediate(callback)
50+
}
51+
this.discovery.stop = (callback) => {
52+
this.discovery._isStarted = false
53+
setImmediate(callback)
54+
}
4855

4956
this.listenersRefs = {}
5057
this._peerDiscovered = this._peerDiscovered.bind(this)
@@ -237,6 +244,8 @@ class WebRTCStar {
237244
}
238245

239246
_peerDiscovered (maStr) {
247+
if (!this.discovery._isStarted) return
248+
240249
log('Peer Discovered:', maStr)
241250
maStr = cleanMultiaddr(maStr)
242251

‎test/transport/discovery.js

+85-7
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ const dirtyChai = require('dirty-chai')
77
const expect = chai.expect
88
chai.use(dirtyChai)
99
const multiaddr = require('multiaddr')
10+
const series = require('async/series')
1011

1112
module.exports = (create) => {
1213
describe('peer discovery', () => {
1314
let ws1
15+
let ws1Listener
1416
const base = (id) => {
1517
return `/ip4/127.0.0.1/tcp/15555/ws/p2p-webrtc-star/ipfs/${id}`
1618
}
@@ -19,26 +21,102 @@ module.exports = (create) => {
1921
let ws2
2022
const ma2 = multiaddr(base('QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooo3B'))
2123

22-
it('listen on the first', (done) => {
23-
ws1 = create()
24+
let ws3
25+
const ma3 = multiaddr(base('QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooo3C'))
26+
27+
let ws4
28+
const ma4 = multiaddr(base('QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooo3D'))
2429

25-
const listener = ws1.createListener((conn) => {})
26-
listener.listen(ma1, (err) => {
30+
it('listen on the first', (done) => {
31+
series([
32+
(cb) => {
33+
ws1 = create()
34+
ws1Listener = ws1.createListener((conn) => {})
35+
ws1.discovery.start(cb)
36+
},
37+
(cb) => {
38+
ws1Listener.listen(ma1, cb)
39+
}
40+
], (err) => {
2741
expect(err).to.not.exist()
2842
done()
2943
})
3044
})
3145

3246
it('listen on the second, discover the first', (done) => {
33-
ws2 = create()
47+
let listener
3448

3549
ws1.discovery.once('peer', (peerInfo) => {
3650
expect(peerInfo.multiaddrs.has(ma2)).to.equal(true)
3751
done()
3852
})
3953

40-
const listener = ws2.createListener((conn) => {})
41-
listener.listen(ma2, (err) => {
54+
series([
55+
(cb) => {
56+
ws2 = create()
57+
listener = ws2.createListener((conn) => {})
58+
ws2.discovery.start(cb)
59+
},
60+
(cb) => {
61+
listener.listen(ma2, cb)
62+
}
63+
], (err) => {
64+
expect(err).to.not.exist()
65+
})
66+
})
67+
68+
// this test is mostly validating the non-discovery test mechanism works
69+
it('listen on the third, verify ws-peer is discovered', (done) => {
70+
let listener
71+
let discoveredPeer = false
72+
// resolve on peer discovered
73+
ws1.discovery.once('peer', (peerInfo) => {
74+
discoveredPeer = true
75+
})
76+
ws1Listener.io.once('ws-peer', (maStr) => {
77+
expect(discoveredPeer).to.equal(true)
78+
done()
79+
})
80+
81+
series([
82+
(cb) => {
83+
ws3 = create()
84+
listener = ws3.createListener((conn) => {})
85+
ws3.discovery.start(cb)
86+
},
87+
(cb) => {
88+
listener.listen(ma3, cb)
89+
}
90+
], (err) => {
91+
expect(err).to.not.exist()
92+
})
93+
})
94+
95+
it('listen on the fourth, ws-peer is not discovered', (done) => {
96+
let listener
97+
let discoveredPeer = false
98+
// resolve on peer discovered
99+
ws1.discovery.once('peer', (peerInfo) => {
100+
discoveredPeer = true
101+
})
102+
ws1Listener.io.once('ws-peer', (maStr) => {
103+
expect(discoveredPeer).to.equal(false)
104+
done()
105+
})
106+
107+
series([
108+
(cb) => {
109+
ws1.discovery.stop(cb)
110+
},
111+
(cb) => {
112+
ws4 = create()
113+
listener = ws4.createListener((conn) => {})
114+
ws4.discovery.start(cb)
115+
},
116+
(cb) => {
117+
listener.listen(ma4, cb)
118+
}
119+
], (err) => {
42120
expect(err).to.not.exist()
43121
})
44122
})

‎test/transport/reconnect.node.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
'use strict'
44

55
const chai = require('chai')
6+
const series = require('async/series')
67
const dirtyChai = require('dirty-chai')
78
const expect = chai.expect
89
chai.use(dirtyChai)
@@ -39,7 +40,10 @@ module.exports = (create) => {
3940
ws1 = create()
4041

4142
const listener = ws1.createListener((conn) => {})
42-
listener.listen(ma1, (err) => {
43+
series([
44+
(cb) => ws1.discovery.start(cb),
45+
(cb) => listener.listen(ma1, cb)
46+
], (err) => {
4347
expect(err).to.not.exist()
4448
done()
4549
})

0 commit comments

Comments
 (0)
This repository has been archived.