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

Commit 996c4a3

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

File tree

10 files changed

+155
-38
lines changed

10 files changed

+155
-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: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
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, 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+
}
42+
repo.config.set(config, cb)
43+
})
44+
},
45+
(cb) => node.load(cb)
46+
], (err) => callback(err, node))
47+
}
48+
49+
describe.only('discovery', () => {
50+
let nodeA // only mdns
51+
let nodeB // mdns + webrtc-star discovery
52+
let nodeC // mdns + webrtc-star discovery
53+
54+
let ss
55+
56+
before((done) => {
57+
parallel([
58+
(cb) => {
59+
sigServer.start({
60+
port: 33333
61+
}, (err, server) => {
62+
expect(err).to.not.exist
63+
ss = server
64+
cb()
65+
})
66+
},
67+
// create 4 nodes
68+
(cb) => {
69+
createNode(false, (err, node) => {
70+
expect(err).to.not.exist
71+
nodeA = node
72+
cb()
73+
})
74+
},
75+
(cb) => {
76+
createNode(true, (err, node) => {
77+
expect(err).to.not.exist
78+
nodeB = node
79+
cb()
80+
})
81+
},
82+
(cb) => {
83+
createNode(true, (err, node) => {
84+
expect(err).to.not.exist
85+
nodeC = node
86+
cb()
87+
})
88+
}
89+
], done)
90+
})
91+
92+
after((done) => {
93+
series([
94+
(cb) => nodeA.goOffline(cb),
95+
(cb) => nodeB.goOffline(cb),
96+
(cb) => nodeC.goOffline(cb),
97+
(cb) => ss.stop(cb)
98+
], done)
99+
})
100+
101+
it('boot nodeA', (done) => {
102+
nodeA.goOnline(done)
103+
})
104+
105+
it('boot nodeB, verify that MDNS worked', (done) => {
106+
nodeB.goOnline(done)
107+
})
108+
109+
it('boot nodeC, verify that MDNS or webrtc-star worked without conflict', (done) => {
110+
nodeC.goOnline(done)
111+
})
112+
})

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)