Skip to content
This repository was archived by the owner on Feb 12, 2024. It is now read-only.

Commit c90bde2

Browse files
committed
test: verify that multiple discovery systems do not cause conflict'
1 parent cfd8e40 commit c90bde2

File tree

10 files changed

+249
-38
lines changed

10 files changed

+249
-38
lines changed

gulpfile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const API = require('./src/http-api')
99
let nodes = []
1010

1111
function startNode (num, done) {
12-
createTempNode(num, (err, node) => {
12+
createTempNode({ num: num }, (err, node) => {
1313
if (err) {
1414
return done(err)
1515
}

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
"form-data": "^2.1.2",
7373
"fs-pull-blob-store": "^0.4.1",
7474
"gulp": "^3.9.1",
75-
"interface-ipfs-core": "^0.23.4",
75+
"interface-ipfs-core": "^0.23.5",
7676
"ipfsd-ctl": "^0.18.1",
7777
"left-pad": "^1.1.3",
7878
"lodash": "^4.17.4",
@@ -107,16 +107,16 @@
107107
"ipld-resolver": "^0.4.1",
108108
"isstream": "^0.1.2",
109109
"libp2p-floodsub": "0.7.1",
110-
"joi": "^10.1.0",
111-
"libp2p-ipfs-nodejs": "^0.17.3",
112-
"libp2p-ipfs-browser": "^0.17.4",
110+
"joi": "^10.2.0",
111+
"libp2p-ipfs-nodejs": "^0.17.4",
112+
"libp2p-ipfs-browser": "^0.17.5",
113113
"lodash.flatmap": "^4.5.0",
114114
"lodash.get": "^4.4.2",
115115
"lodash.has": "^4.5.2",
116116
"lodash.set": "^4.3.2",
117117
"lodash.sortby": "^4.7.0",
118118
"lodash.values": "^4.3.0",
119-
"mafmt": "^2.1.2",
119+
"mafmt": "^2.1.5",
120120
"multiaddr": "^2.1.3",
121121
"multihashes": "^0.3.1",
122122
"path-exists": "^3.0.0",
@@ -170,4 +170,4 @@
170170
"nginnever <[email protected]>",
171171
"npmcdn-to-unpkg-bot <[email protected]>"
172172
]
173-
}
173+
}

test/cli/test-bitswap.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ describe('bitswap', () => {
1414
let node
1515

1616
before((done) => {
17-
createTempNode(38, (err, _node) => {
17+
createTempNode({ num: 38 }, (err, _node) => {
1818
expect(err).to.not.exist
1919
node = _node
2020
node.goOnline(done)

test/cli/test-pubsub.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ describe.skip('pubsub', () => {
1818
let id
1919

2020
before((done) => {
21-
createTempNode(1, (err, _node) => {
21+
createTempNode({ num: 1 }, (err, _node) => {
2222
expect(err).to.not.exist
2323
node = _node
2424
node.goOnline(done)

test/cli/test-swarm.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ describe('swarm', function () {
1414
let nodeAddr
1515

1616
before((done) => {
17-
createTempNode(1, (err, _node) => {
17+
createTempNode({ num: 1 }, (err, _node) => {
1818
expect(err).to.not.exist
1919
node = _node
2020
node.goOnline((err) => {

test/core/node-only/test-discovery.js

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
/* eslint max-nested-callbacks: ["error", 8] */
2+
/* eslint-env mocha */
3+
'use strict'
4+
5+
const expect = require('chai').expect
6+
const parallel = require('async/parallel')
7+
const series = require('async/series')
8+
const IPFS = require('../../../src/core')
9+
10+
const createTempRepo = require('../../utils/temp-repo')
11+
12+
const sigServer = require('libp2p-webrtc-star/src/sig-server')
13+
14+
/*
15+
* Note:
16+
* Do not run these tests with other nodes in the same host with MDNS enabled
17+
*/
18+
19+
// This keeps getting better, really need to finish the
20+
// improving init thing
21+
function createNode (webrtcStar, mdns, callback) {
22+
const repo = createTempRepo()
23+
const node = new IPFS(repo)
24+
25+
series([
26+
(cb) => node.init({ emptyRepo: true, bits: 1024 }, cb),
27+
(cb) => {
28+
repo.config.get((err, config) => {
29+
expect(err).to.not.exist
30+
31+
config.Addresses = {
32+
Swarm: ['/ip4/127.0.0.1/tcp/0'],
33+
API: '',
34+
Gateway: ''
35+
}
36+
if (webrtcStar) {
37+
const peerIdStr = config.Identity.PeerID
38+
const wstarAddr = '/libp2p-webrtc-star/ip4/127.0.0.1/tcp/33333/ws/ipfs/' + peerIdStr
39+
40+
config.Addresses.Swarm.push(wstarAddr)
41+
config.Discovery.MDNS.Enabled = mdns
42+
}
43+
repo.config.set(config, cb)
44+
})
45+
},
46+
(cb) => node.load(cb)
47+
], (err) => callback(err, node))
48+
}
49+
50+
describe.only('discovery', () => {
51+
let nodeA // only mdns
52+
let nodeB // mdns + webrtc-star discovery
53+
let nodeC // mdns + webrtc-star discovery
54+
let nodeD // only webrtc-star discovery
55+
56+
let ss
57+
58+
before((done) => {
59+
parallel([
60+
(cb) => {
61+
sigServer.start({
62+
port: 33333
63+
}, (err, server) => {
64+
expect(err).to.not.exist
65+
ss = server
66+
cb()
67+
})
68+
},
69+
// create 4 nodesconst IPFS = require('../../src/core')
70+
71+
(cb) => {
72+
createNode(false, true, (err, node) => {
73+
expect(err).to.not.exist
74+
nodeA = node
75+
cb()
76+
})
77+
},
78+
(cb) => {
79+
createNode(true, true, (err, node) => {
80+
expect(err).to.not.exist
81+
nodeB = node
82+
cb()
83+
})
84+
},
85+
(cb) => {
86+
createNode(true, true, (err, node) => {
87+
expect(err).to.not.exist
88+
nodeC = node
89+
cb()
90+
})
91+
},
92+
(cb) => {
93+
createNode(true, false, (err, node) => {
94+
expect(err).to.not.exist
95+
nodeD = node
96+
cb()
97+
})
98+
}
99+
100+
], done)
101+
})
102+
103+
after((done) => {
104+
series([
105+
(cb) => nodeA.goOffline(cb),
106+
(cb) => nodeB.goOffline(cb),
107+
(cb) => nodeC.goOffline(cb),
108+
(cb) => nodeD.goOffline(cb),
109+
(cb) => ss.stop(cb)
110+
], done)
111+
})
112+
113+
it('boot nodeA', (done) => {
114+
nodeA.goOnline(done)
115+
})
116+
117+
it('boot nodeB, verify that MDNS worked', (done) => {
118+
nodeB.goOnline(() => setTimeout(check, 40000))
119+
120+
function check () {
121+
parallel([
122+
(cb) => {
123+
nodeA.swarm.peers((err, peers) => {
124+
expect(err).to.not.exist
125+
expect(peers.length).to.equal(1)
126+
cb()
127+
})
128+
},
129+
(cb) => {
130+
nodeB.swarm.peers((err, peers) => {
131+
expect(err).to.not.exist
132+
expect(peers.length).to.equal(1)
133+
cb()
134+
})
135+
}
136+
], done)
137+
}
138+
})
139+
140+
it('boot nodeC, verify that MDNS or webrtc-star worked without conflict', (done) => {
141+
nodeC.goOnline(() => setTimeout(check, 60000))
142+
143+
function check () {
144+
parallel([
145+
(cb) => {
146+
nodeA.swarm.peers((err, peers) => {
147+
expect(err).to.not.exist
148+
expect(peers.length).to.equal(2)
149+
cb()
150+
})
151+
},
152+
(cb) => {
153+
nodeB.swarm.peers((err, peers) => {
154+
expect(err).to.not.exist
155+
expect(peers.length).to.equal(2)
156+
cb()
157+
})
158+
},
159+
(cb) => {
160+
nodeC.swarm.peers((err, peers) => {
161+
expect(err).to.not.exist
162+
expect(peers.length).to.equal(2)
163+
cb()
164+
})
165+
}
166+
], done)
167+
}
168+
})
169+
170+
it('boot nodeD, verify that MDNS or webrtc-star worked without conflict', (done) => {
171+
nodeD.goOnline(() => setTimeout(check, 60000))
172+
173+
function check () {
174+
parallel([
175+
(cb) => {
176+
nodeA.swarm.peers((err, peers) => {
177+
expect(err).to.not.exist
178+
expect(peers.length).to.equal(2)
179+
cb()
180+
})
181+
},
182+
(cb) => {
183+
nodeB.swarm.peers((err, peers) => {
184+
expect(err).to.not.exist
185+
expect(peers.length).to.equal(3)
186+
cb()
187+
})
188+
},
189+
(cb) => {
190+
nodeC.swarm.peers((err, peers) => {
191+
expect(err).to.not.exist
192+
expect(peers.length).to.equal(3)
193+
cb()
194+
})
195+
},
196+
(cb) => {
197+
nodeD.swarm.peers((err, peers) => {
198+
expect(err).to.not.exist
199+
expect(peers.length).to.equal(2)
200+
cb()
201+
})
202+
}
203+
], done)
204+
}
205+
})
206+
})

test/http-api/custom-ipfs-api/test-swarm.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ module.exports = (ctl) => {
1212
let remoteNodeAddr
1313

1414
before((done) => {
15-
createTempNode(6, (err, _remoteNode) => {
15+
createTempNode({ num: 6 }, (err, _remoteNode) => {
1616
expect(err).to.not.exist
1717
remoteNode = _remoteNode
1818
remoteNode.goOnline(() => {

test/http-api/inject/test-pubsub.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ module.exports = (http) => {
1717
before((done) => {
1818
api = http.api.server.select('API')
1919

20-
createTempNode(47, (err, _ipfs) => {
20+
createTempNode({ num: 47 }, (err, _ipfs) => {
2121
expect(err).to.not.exist
2222
tmpNode = _ipfs
2323
tmpNode.goOnline((err) => {

test/http-api/inject/test-swarm.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ module.exports = (http) => {
1717
before((done) => {
1818
api = http.api.server.select('API')
1919

20-
createTempNode(47, (err, _ipfs) => {
20+
createTempNode({ num: 47 }, (err, _ipfs) => {
2121
expect(err).to.not.exist
2222
tmpNode = _ipfs
2323
tmpNode.goOnline((err) => {

test/utils/temp-node.js

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,46 +7,51 @@ const series = require('async/series')
77
const IPFS = require('../../src/core')
88
const createTempRepo = require('./temp-repo')
99

10-
function setAddresses (repo, num, callback) {
10+
function setAddresses (repo, addresses, callback) {
1111
repo.config.get((err, config) => {
1212
if (err) {
1313
return callback(err)
1414
}
1515

16-
config.Addresses = {
17-
Swarm: [
18-
`/ip4/127.0.0.1/tcp/10${num}`,
19-
`/ip4/127.0.0.1/tcp/20${num}/ws`
20-
],
21-
API: `/ip4/127.0.0.1/tcp/31${num}`,
22-
Gateway: `/ip4/127.0.0.1/tcp/32${num}`
23-
}
16+
config.Addresses = addresses
2417

2518
config.Discovery.MDNS.Enabled = false
2619

2720
repo.config.set(config, callback)
2821
})
2922
}
3023

31-
function createTempNode (num, callback) {
32-
const repo = createTempRepo()
33-
const ipfs = new IPFS(repo)
24+
/*
25+
* options.repo - repo to use
26+
* options.num - generate addrs based on num for port
27+
* options.addresses - uses this addrs instead of default
28+
*/
29+
function createTempNode (options, callback) {
30+
const repo = options.repo ? options.repo : createTempRepo()
31+
const node = new IPFS(repo)
3432

35-
num = leftPad(num, 3, 0)
33+
let addresses
3634

37-
series([
38-
(cb) => ipfs.init({
39-
emptyRepo: true,
40-
bits: 1024
41-
}, cb),
42-
(cb) => setAddresses(repo, num, cb),
43-
(cb) => ipfs.load(cb)
44-
], (err) => {
45-
if (err) {
46-
return callback(err)
35+
if (options.num) {
36+
const pad = leftPad(options.num, 3, 0)
37+
38+
addresses = {
39+
Swarm: [
40+
`/ip4/127.0.0.1/tcp/10${pad}`,
41+
`/ip4/127.0.0.1/tcp/20${pad}/ws`
42+
],
43+
API: `/ip4/127.0.0.1/tcp/31${pad}`,
44+
Gateway: `/ip4/127.0.0.1/tcp/32${pad}`
4745
}
48-
callback(null, ipfs)
49-
})
46+
} else if (options.addresses) {
47+
addresses = options.addresses
48+
}
49+
50+
series([
51+
(cb) => node.init({ emptyRepo: true, bits: 1024 }, cb),
52+
(cb) => setAddresses(repo, addresses, cb),
53+
(cb) => node.load(cb)
54+
], (err) => callback(err, node))
5055
}
5156

5257
module.exports = createTempNode

0 commit comments

Comments
 (0)