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

Commit 744a9e7

Browse files
dryajovdaviddias
authored andcommitted
test: Circuit Relay Interop tests
1 parent 47ca31b commit 744a9e7

File tree

10 files changed

+517
-15
lines changed

10 files changed

+517
-15
lines changed

.aegir.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
'use strict'
22

33
const createServer = require('ipfsd-ctl').createServer
4+
const parallel = require('async/parallel')
5+
const rendezvous = require('libp2p-websocket-star-rendezvous')
6+
7+
let rzserver
48

59
const server = createServer()
610
module.exports = {
@@ -16,8 +20,28 @@ module.exports = {
1620
},
1721
hooks: {
1822
browser: {
19-
pre: server.start.bind(server),
20-
post: server.stop.bind(server)
23+
pre: (done) => {
24+
parallel([
25+
(cb) => server.start(cb),
26+
(cb) => {
27+
rendezvous.start({
28+
port: 24642
29+
}, (err, _rzserver) => {
30+
if (err) {
31+
return done(err)
32+
}
33+
rzserver = _rzserver
34+
cb()
35+
})
36+
}
37+
], done)
38+
},
39+
post: (done) => {
40+
parallel([
41+
(cb) => server.stop(cb),
42+
(cb) => rzserver.stop(cb)
43+
], done)
44+
}
2145
}
2246
}
2347
}

package.json

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
},
1818
"scripts": {
1919
"lint": "aegir lint",
20-
"test": "aegir test -t node -t browser --no-cors",
21-
"test:node": "aegir test -t node -f test/node.js",
22-
"test:browser": "aegir test -t browser --no-cors -f test/browser.js"
20+
"test": "cross-env IPFS_REUSEPORT=false aegir test -t node -t browser --no-cors",
21+
"test:node": "cross-env IPFS_REUSEPORT=false aegir test -t node -f test/node.js",
22+
"test:browser": "cross-env IPFS_REUSEPORT=false aegir test -t browser --no-cors -f test/browser.js"
2323
},
2424
"pre-push": [
2525
"lint"
@@ -44,7 +44,8 @@
4444
"bs58": "^4.0.1",
4545
"buffer-loader": "0.0.1",
4646
"chai": "^4.1.2",
47-
"cids": "^0.5.3",
47+
"cross-env": "^5.1.3",
48+
"cids": "~0.5.3",
4849
"detect-node": "^2.0.3",
4950
"dir-compare": "^1.4.0",
5051
"dirty-chai": "^2.0.1",
@@ -53,12 +54,13 @@
5354
"form-data": "^2.3.2",
5455
"go-ipfs-dep": "^0.4.15",
5556
"hat": "0.0.3",
56-
"ipfs": "~0.28.2",
57-
"ipfs-api": "^21.0.0",
58-
"ipfsd-ctl": "~0.36.0",
59-
"left-pad": "^1.3.0",
60-
"lodash": "^4.17.10",
61-
"mocha": "^5.1.1",
57+
"ipfs": "~0.28.0",
58+
"ipfs-api": "^18.1.1",
59+
"ipfsd-ctl": "~0.30.3",
60+
"left-pad": "^1.2.0",
61+
"libp2p-websocket-star-rendezvous": "~0.2.2",
62+
"lodash": "^4.17.4",
63+
"mocha": "^4.0.1",
6264
"ncp": "^2.0.0",
6365
"pretty-bytes": "^5.0.0",
6466
"random-fs": "^1.0.3",

test/browser.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44
// require('./exchange-files')
55
// require('./pubsub')
66
require('./kad-dht')
7-
require('./repo')
7+
require('./circuit')
8+
// require('./repo')

test/circuit.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/* eslint max-nested-callbacks: ["error", 8] */
2+
/* eslint-env mocha */
3+
'use strict'
4+
5+
const chai = require('chai')
6+
const dirtyChai = require('dirty-chai')
7+
const expect = chai.expect
8+
chai.use(dirtyChai)
9+
10+
const parallel = require('async/parallel')
11+
12+
const all = require('./circuit/all')
13+
const browser = require('./circuit/browser')
14+
15+
const isNode = require('detect-node')
16+
const send = require('./utils/circuit').send
17+
const connect = require('./utils/circuit').connect
18+
19+
const timeout = 80 * 1000
20+
const baseTest = {
21+
connect,
22+
send,
23+
timeout
24+
}
25+
26+
// TODO: unskip once go-ipfs 0.4.15 is out
27+
describe.skip('circuit', () => {
28+
const tests = all
29+
if (!isNode) {
30+
Object.assign(tests, browser)
31+
}
32+
33+
Object.keys(tests).forEach((test) => {
34+
let nodes
35+
let nodeA
36+
let relay
37+
let nodeB
38+
39+
tests[test] = Object.assign({}, baseTest, tests[test])
40+
const dsc = tests[test].skip && tests[test].skip() ? describe.skip : describe
41+
dsc(test, function () {
42+
this.timeout(tests[test].timeout)
43+
44+
before((done) => {
45+
tests[test].create((err, _nodes) => {
46+
expect(err).to.not.exist()
47+
nodes = _nodes.map((n) => n.ipfsd)
48+
nodeA = _nodes[0]
49+
relay = _nodes[1]
50+
nodeB = _nodes[2]
51+
done()
52+
})
53+
})
54+
55+
after((done) => parallel(nodes.map((ipfsd) => (cb) => ipfsd.stop(cb)), done))
56+
57+
it('connect', (done) => {
58+
tests[test].connect(nodeA, nodeB, relay, done)
59+
})
60+
61+
it('send', (done) => {
62+
tests[test].send(nodeA.ipfsd.api, nodeB.ipfsd.api, done)
63+
})
64+
})
65+
})
66+
})

test/circuit/all.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/* eslint max-nested-callbacks: ["error", 8] */
2+
/* eslint-env mocha */
3+
'use strict'
4+
5+
const series = require('async/series')
6+
7+
const utils = require('../utils/circuit')
8+
9+
const createJs = utils.createJsNode
10+
const createGo = utils.createGoNode
11+
12+
const base = '/ip4/127.0.0.1/tcp/0'
13+
14+
module.exports = {
15+
'go-go-go': {
16+
create: (callback) => series([
17+
(cb) => createGo([`${base}/ws`], cb),
18+
(cb) => createGo([`${base}/ws`], cb),
19+
(cb) => createGo([`${base}/ws`], cb)
20+
], callback)
21+
},
22+
'js-go-go': {
23+
create: (callback) => series([
24+
(cb) => createJs([`${base}/ws`], cb),
25+
(cb) => createGo([`${base}/ws`], cb),
26+
(cb) => createGo([`${base}/ws`], cb)
27+
], callback)
28+
},
29+
'go-go-js': {
30+
create: (callback) => series([
31+
(cb) => createGo([`${base}/ws`], cb),
32+
(cb) => createGo([`${base}/ws`], cb),
33+
(cb) => createJs([`${base}/ws`], cb)
34+
], callback)
35+
},
36+
'js-go-js': {
37+
create: (callback) => series([
38+
(cb) => createJs([`${base}/ws`], cb),
39+
(cb) => createGo([`${base}/ws`], cb),
40+
(cb) => createJs([`${base}/ws`], cb)
41+
], callback)
42+
},
43+
'go-js-go': {
44+
create: (callback) => series([
45+
(cb) => createGo([`${base}/ws`], cb),
46+
(cb) => createJs([`${base}/ws`], cb),
47+
(cb) => createGo([`${base}/ws`], cb)
48+
], callback)
49+
},
50+
'js-js-go': {
51+
create: (callback) => series([
52+
(cb) => createJs([`${base}/ws`], cb),
53+
(cb) => createJs([`${base}/ws`], cb),
54+
(cb) => createGo([`${base}/ws`], cb)
55+
], callback)
56+
},
57+
'go-js-js': {
58+
create: (callback) => series([
59+
(cb) => createGo([`${base}/ws`], cb),
60+
(cb) => createJs([`${base}/ws`], cb),
61+
(cb) => createJs([`${base}/ws`], cb)
62+
], callback)
63+
},
64+
'js-js-js': {
65+
create: (callback) => series([
66+
(cb) => createJs([`${base}/ws`], cb),
67+
(cb) => createJs([`${base}/ws`], cb),
68+
(cb) => createJs([`${base}/ws`], cb)
69+
], callback)
70+
}
71+
}

test/circuit/browser.js

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
/* eslint max-nested-callbacks: ["error", 8] */
2+
/* eslint-env mocha */
3+
'use strict'
4+
5+
const series = require('async/series')
6+
7+
const utils = require('../utils/circuit')
8+
9+
const createJs = utils.createJsNode
10+
const createProc = utils.createProcNode
11+
const createGo = utils.createGoNode
12+
const connWithTimeout = utils.connWithTimeout
13+
14+
const getWsAddr = utils.getWsAddr
15+
const getWsStarAddr = utils.getWsStarAddr
16+
const getCircuitAddr = utils.getCircuitAddr
17+
18+
const base = '/ip4/127.0.0.1/tcp/0'
19+
20+
module.exports = {
21+
'browser-go-js': {
22+
create:
23+
(callback) => series([
24+
(cb) => createProc([], cb),
25+
(cb) => createGo([`${base}/ws`], cb),
26+
(cb) => createJs([`${base}/ws`], cb)
27+
], callback),
28+
connect: connWithTimeout(1500)
29+
},
30+
'browser-go-go': {
31+
create: (callback) => series([
32+
(cb) => createProc([], cb),
33+
(cb) => createGo([`${base}/ws`], cb),
34+
(cb) => createGo([`${base}/ws`], cb)
35+
], callback),
36+
connect: connWithTimeout(1500)
37+
},
38+
'browser-js-js': {
39+
create: (callback) => series([
40+
(cb) => createProc([], cb),
41+
(cb) => createJs([`${base}/ws`], cb),
42+
(cb) => createJs([`${base}/ws`], cb)
43+
], callback),
44+
connect: connWithTimeout(1500)
45+
},
46+
'browser-js-go': {
47+
create: (callback) => series([
48+
(cb) => createProc([], cb),
49+
(cb) => createJs([`${base}/ws`], cb),
50+
(cb) => createJs([`${base}/ws`], cb)
51+
], callback),
52+
connect: connWithTimeout(1500)
53+
},
54+
'js-go-browser': {
55+
create: (callback) => series([
56+
(cb) => createJs([`${base}/ws`], cb),
57+
(cb) => createGo([`${base}/ws`], cb),
58+
(cb) => createProc([], cb)
59+
], callback),
60+
connect: connWithTimeout(1500)
61+
},
62+
'go-go-browser': {
63+
create: (callback) => series([
64+
(cb) => createGo([`${base}/ws`], cb),
65+
(cb) => createGo([`${base}/ws`], cb),
66+
(cb) => createProc([], cb)
67+
], callback),
68+
connect: connWithTimeout(1500)
69+
},
70+
'js-js-browser': {
71+
create: (callback) => series([
72+
(cb) => createJs([`${base}/ws`], cb),
73+
(cb) => createJs([`${base}/ws`], cb),
74+
(cb) => createProc([], cb)
75+
], callback),
76+
connect: connWithTimeout(1500)
77+
},
78+
'go-js-browser': {
79+
create: (callback) => series([
80+
(cb) => createGo([`${base}/ws`], cb),
81+
(cb) => createJs([`${base}/ws`], cb),
82+
(cb) => createProc([], cb)
83+
], callback),
84+
connect: connWithTimeout(1500)
85+
},
86+
'go-browser-browser': {
87+
create: (callback) => series([
88+
(cb) => createGo([`${base}/ws`], cb),
89+
(cb) => createProc([`/ip4/127.0.0.1/tcp/24642/ws/p2p-websocket-star`], cb),
90+
(cb) => createProc([`/ip4/127.0.0.1/tcp/24642/ws/p2p-websocket-star`], cb)
91+
], callback),
92+
connect: (nodeA, nodeB, relay, callback) => {
93+
series([
94+
(cb) => relay.ipfsd.api.swarm.connect(getWsAddr(nodeA.addrs), cb),
95+
(cb) => relay.ipfsd.api.swarm.connect(getWsStarAddr(nodeB.addrs), cb),
96+
// TODO: needed until https://github.com/ipfs/interop/issues/17 is resolved
97+
(cb) => setTimeout(cb, 5000),
98+
(cb) => nodeA.ipfsd.api.swarm.connect(getCircuitAddr(nodeB.addrs), cb)
99+
], callback)
100+
},
101+
timeout: 100 * 1000,
102+
skip: () => false
103+
},
104+
'js-browser-browser': {
105+
create: (callback) => series([
106+
(cb) => createJs([`${base}/ws`], cb),
107+
(cb) => createProc([`/ip4/127.0.0.1/tcp/24642/ws/p2p-websocket-star`], cb),
108+
(cb) => createProc([`/ip4/127.0.0.1/tcp/24642/ws/p2p-websocket-star`], cb)
109+
], callback),
110+
connect: (nodeA, nodeB, relay, callback) => {
111+
series([
112+
(cb) => relay.ipfsd.api.swarm.connect(getWsAddr(nodeA.addrs), cb),
113+
(cb) => relay.ipfsd.api.swarm.connect(getWsStarAddr(nodeB.addrs), cb),
114+
// TODO: needed until https://github.com/ipfs/interop/issues/17 is resolved
115+
(cb) => setTimeout(cb, 3000),
116+
(cb) => nodeA.ipfsd.api.swarm.connect(getCircuitAddr(nodeB.addrs), cb)
117+
], callback)
118+
},
119+
timeout: 100 * 1000
120+
},
121+
'browser-browser-go': {
122+
create: (callback) => series([
123+
(cb) => createProc([`/ip4/127.0.0.1/tcp/24642/ws/p2p-websocket-star`], cb),
124+
(cb) => createProc([`/ip4/127.0.0.1/tcp/24642/ws/p2p-websocket-star`], cb),
125+
(cb) => createGo([`${base}/ws`], cb)
126+
], callback),
127+
connect: (nodeA, nodeB, relay, callback) => {
128+
series([
129+
(cb) => relay.ipfsd.api.swarm.connect(getWsStarAddr(nodeA.addrs), cb),
130+
(cb) => relay.ipfsd.api.swarm.connect(getWsAddr(nodeB.addrs), cb),
131+
// TODO: needed until https://github.com/ipfs/interop/issues/17 is resolved
132+
(cb) => setTimeout(cb, 5000),
133+
(cb) => nodeA.ipfsd.api.swarm.connect(getCircuitAddr(nodeB.addrs), cb)
134+
], callback)
135+
},
136+
timeout: 100 * 1000,
137+
skip: () => true
138+
},
139+
'browser-browser-js': {
140+
create: (callback) => series([
141+
(cb) => createProc([`/ip4/127.0.0.1/tcp/24642/ws/p2p-websocket-star`], cb),
142+
(cb) => createProc([`/ip4/127.0.0.1/tcp/24642/ws/p2p-websocket-star`], cb),
143+
(cb) => createJs([`${base}/ws`], cb)
144+
], callback),
145+
connect: (nodeA, nodeB, relay, callback) => {
146+
series([
147+
(cb) => relay.ipfsd.api.swarm.connect(getWsStarAddr(nodeA.addrs), cb),
148+
(cb) => relay.ipfsd.api.swarm.connect(getWsAddr(nodeB.addrs), cb),
149+
// TODO: needed until https://github.com/ipfs/interop/issues/17 is resolved
150+
(cb) => setTimeout(cb, 3000),
151+
(cb) => nodeA.ipfsd.api.swarm.connect(getCircuitAddr(nodeB.addrs), cb)
152+
], callback)
153+
}
154+
}
155+
}

0 commit comments

Comments
 (0)