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

Commit d16a129

Browse files
dryajovdaviddias
authored andcommitted
feat: reworking tests with new ipfsd-ctl (#1167)
1 parent bbb7cc5 commit d16a129

30 files changed

+522
-676
lines changed

.aegir.js

+10-28
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,23 @@
11
'use strict'
22

3-
const parallel = require('async/parallel')
4-
const ads = require('./test/utils/another-daemon-spawner')
5-
const js = ads.spawnJsNode
6-
const stop = ads.stopNodes
7-
8-
/*
9-
* spawns a daemon with ports numbers starting in 10 and ending in `num`
10-
*/
11-
function start (done) {
12-
const base = '/ip4/127.0.0.1/tcp'
13-
if (!process.env.IPFS_TEST) {
14-
parallel([
15-
(cb) => js([`${base}/10007`, `${base}/20007/ws`], true, 31007, 32007, cb),
16-
(cb) => js([`${base}/10008`, `${base}/20008/ws`], true, 31008, 32008, cb),
17-
(cb) => js([`${base}/10012`, `${base}/20012/ws`], true, 31012, 32012, cb),
18-
(cb) => js([`${base}/10013`, `${base}/20013/ws`], true, 31013, 32013, cb),
19-
(cb) => js([`${base}/10014`, `${base}/20014/ws`], true, 31014, 32014, cb),
20-
(cb) => js([`${base}/10015`, `${base}/20015/ws`], true, 31015, 32015, cb)
21-
], done)
22-
} else if (process.env.IPFS_TEST === 'bootstrapers') {
23-
done()
24-
}
25-
}
3+
const createServer = require('ipfsd-ctl').createServer
264

5+
const server = createServer()
276
module.exports = {
287
karma: {
298
files: [{
309
pattern: 'node_modules/interface-ipfs-core/test/fixtures/**/*',
3110
watched: false,
3211
served: true,
33-
included: false,
34-
singleRun: false
35-
}]
12+
included: false
13+
}],
14+
browserNoActivityTimeout: 100 * 1000,
15+
singleRun: true
3616
},
3717
hooks: {
38-
pre: start,
39-
post: stop
18+
browser: {
19+
pre: server.start.bind(server),
20+
post: server.stop.bind(server)
21+
}
4022
}
4123
}

package.json

+5-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
"build": "aegir build",
2525
"test": "aegir test -t node -t browser -t webworker --no-cors",
2626
"test:node": "aegir test -t node",
27-
"test:browser": "aegir test -t browser -t webworker --no-cors",
27+
"test:browser": "aegir test -t browser --no-cors",
28+
"test:webworker": "aegir test -t webworker --no-cors",
2829
"test:node:core": "aegir test -t node -f test/core/**.js",
2930
"test:node:http": "aegir test -t node -f test/http-api/index.js",
3031
"test:node:gateway": "aegir test -t node -f test/gateway/index.js",
@@ -70,8 +71,10 @@
7071
"execa": "^0.9.0",
7172
"expose-loader": "^0.7.4",
7273
"form-data": "^2.3.1",
74+
"go-ipfs-dep": "^0.4.13",
7375
"hat": "0.0.3",
74-
"interface-ipfs-core": "~0.40.0",
76+
"interface-ipfs-core": "~0.41.0",
77+
"ipfsd-ctl": "^0.27.0",
7578
"left-pad": "^1.2.0",
7679
"lodash": "^4.17.4",
7780
"mocha": "^4.1.0",

test/cli/pubsub.js

+40-16
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,28 @@ const expect = chai.expect
88
chai.use(dirtyChai)
99
const delay = require('delay')
1010
const series = require('async/series')
11-
const InstanceFactory = require('../utils/ipfs-factory-instance')
12-
const DaemonFactory = require('../utils/ipfs-factory-daemon')
1311
const ipfsExec = require('../utils/ipfs-exec')
12+
const IPFS = require('../../src')
13+
14+
const DaemonFactory = require('ipfsd-ctl')
15+
const df = DaemonFactory.create({ type: 'js' })
16+
17+
const config = {
18+
Bootstrap: [],
19+
Discovery: {
20+
MDNS: {
21+
Enabled:
22+
false
23+
}
24+
}
25+
}
1426

1527
describe('pubsub', function () {
16-
this.timeout(40 * 1000)
28+
this.timeout(80 * 1000)
1729

18-
let instanceFactory
19-
let daemonFactory
2030
let node
31+
let ipfsdA
32+
let ipfsdB
2133
let cli
2234
let httpApi
2335

@@ -28,26 +40,38 @@ describe('pubsub', function () {
2840
before(function (done) {
2941
this.timeout(60 * 1000)
3042

31-
instanceFactory = new InstanceFactory()
32-
instanceFactory.spawnNode((err, _node) => {
33-
expect(err).to.not.exist()
34-
node = _node
35-
done()
36-
})
43+
DaemonFactory
44+
.create({ type: 'proc' })
45+
.spawn({
46+
exec: IPFS,
47+
config,
48+
args: ['--enable-pubsub-experiment']
49+
}, (err, _ipfsd) => {
50+
expect(err).to.not.exist()
51+
ipfsdA = _ipfsd
52+
node = _ipfsd.api
53+
done()
54+
})
3755
})
3856

39-
after((done) => instanceFactory.dismantle(done))
57+
after((done) => ipfsdB.stop(done))
4058

4159
before((done) => {
42-
daemonFactory = new DaemonFactory()
43-
daemonFactory.spawnNode((err, _node) => {
60+
df.spawn({
61+
args: ['--enable-pubsub-experiment'],
62+
exec: `./src/cli/bin.js`,
63+
config
64+
}, (err, _ipfsd) => {
4465
expect(err).to.not.exist()
45-
httpApi = _node
66+
httpApi = _ipfsd.api
67+
ipfsdB = _ipfsd
68+
httpApi.repoPath = ipfsdB.repoPath
4669
done()
4770
})
4871
})
4972

50-
after((done) => daemonFactory.dismantle(done))
73+
after((done) => ipfsdA.stop(done))
74+
after((done) => ipfsdB.stop(done))
5175

5276
before((done) => {
5377
cli = ipfsExec(httpApi.repoPath)

test/cli/swarm.js

+22-8
Original file line numberDiff line numberDiff line change
@@ -8,42 +8,56 @@ const expect = chai.expect
88
chai.use(dirtyChai)
99
const series = require('async/series')
1010
const ipfsExec = require('../utils/ipfs-exec')
11-
const Factory = require('../utils/ipfs-factory-daemon')
11+
12+
const parallel = require('async/parallel')
13+
14+
const DaemonFactory = require('ipfsd-ctl')
15+
const df = DaemonFactory.create({ type: 'js' })
16+
17+
const config = {
18+
Bootstrap: [],
19+
Discovery: {
20+
MDNS: {
21+
Enabled:
22+
false
23+
}
24+
}
25+
}
1226

1327
describe('swarm', () => {
14-
let factory
1528
let bMultiaddr
1629
let ipfsA
1730

31+
let nodes = []
1832
before(function (done) {
1933
// CI takes longer to instantiate the daemon, so we need to increase the
2034
// timeout for the before step
2135
this.timeout(80 * 1000)
2236

23-
factory = new Factory()
24-
2537
series([
2638
(cb) => {
27-
factory.spawnNode((err, node) => {
39+
df.spawn({ exec: `./src/cli/bin.js`, config }, (err, node) => {
2840
expect(err).to.not.exist()
2941
ipfsA = ipfsExec(node.repoPath)
42+
nodes.push(node)
3043
cb()
3144
})
3245
},
3346
(cb) => {
34-
factory.spawnNode((err, node) => {
47+
df.spawn({ exec: `./src/cli/bin.js`, config }, (err, node) => {
3548
expect(err).to.not.exist()
36-
node.id((err, id) => {
49+
node.api.id((err, id) => {
3750
expect(err).to.not.exist()
3851
bMultiaddr = id.addresses[0]
52+
nodes.push(node)
3953
cb()
4054
})
4155
})
4256
}
4357
], done)
4458
})
4559

46-
after((done) => factory.dismantle(done))
60+
after((done) => parallel(nodes.map((node) => (cb) => node.stop(cb)), done))
4761

4862
describe('daemon on (through http-api)', function () {
4963
this.timeout(60 * 1000)

test/core/bitswap.spec.js

+58-35
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@ const _ = require('lodash')
1010
const series = require('async/series')
1111
const waterfall = require('async/waterfall')
1212
const parallel = require('async/parallel')
13-
const leftPad = require('left-pad')
1413
const Block = require('ipfs-block')
15-
const API = require('ipfs-api')
1614
const multiaddr = require('multiaddr')
1715
const isNode = require('detect-node')
1816
const multihashing = require('multihashing-async')
1917
const CID = require('cids')
2018

19+
const DaemonFactory = require('ipfsd-ctl')
20+
const df = DaemonFactory.create({ type: 'js' })
21+
22+
const dfProc = DaemonFactory.create({ type: 'proc' })
23+
2124
// This gets replaced by '../utils/create-repo-browser.js' in the browser
2225
const createTempRepo = require('../utils/create-repo-nodejs.js')
2326

@@ -63,13 +66,27 @@ function connectNodes (remoteNode, inProcNode, callback) {
6366
], callback)
6467
}
6568

66-
function addNode (num, inProcNode, callback) {
67-
num = leftPad(num, 3, 0)
68-
69-
const apiUrl = `/ip4/127.0.0.1/tcp/31${num}`
70-
const remoteNode = new API(apiUrl)
71-
72-
connectNodes(remoteNode, inProcNode, (err) => callback(err, remoteNode))
69+
let nodes = []
70+
71+
function addNode (inProcNode, callback) {
72+
df.spawn({
73+
exec: `./src/cli/bin.js`,
74+
config: {
75+
Addresses: {
76+
Swarm: [`/ip4/127.0.0.1/tcp/0/ws`]
77+
},
78+
Discovery: {
79+
MDNS: {
80+
Enabled: false
81+
}
82+
},
83+
Bootstrap: []
84+
}
85+
}, (err, ipfsd) => {
86+
expect(err).to.not.exist()
87+
nodes.push(ipfsd)
88+
connectNodes(ipfsd.api, inProcNode, (err) => callback(err, ipfsd.api))
89+
})
7390
}
7491

7592
describe('bitswap', function () {
@@ -80,23 +97,20 @@ describe('bitswap', function () {
8097
beforeEach(function (done) {
8198
this.timeout(60 * 1000)
8299

83-
let options = {
84-
repo: createTempRepo(),
85-
config: {
86-
Addresses: {
87-
Swarm: []
88-
},
89-
Discovery: {
90-
MDNS: {
91-
Enabled: false
92-
}
93-
},
94-
Bootstrap: []
95-
}
100+
let config = {
101+
Addresses: {
102+
Swarm: []
103+
},
104+
Discovery: {
105+
MDNS: {
106+
Enabled: false
107+
}
108+
},
109+
Bootstrap: []
96110
}
97111

98112
if (isNode) {
99-
options = Object.assign(options, {
113+
config = Object.assign({}, config, {
100114
config: {
101115
Addresses: {
102116
Swarm: ['/ip4/127.0.0.1/tcp/0']
@@ -105,25 +119,34 @@ describe('bitswap', function () {
105119
})
106120
}
107121

108-
inProcNode = new IPFS(options)
109-
inProcNode.on('ready', () => done())
122+
dfProc.spawn({ exec: IPFS, config }, (err, _ipfsd) => {
123+
expect(err).to.not.exist()
124+
nodes.push(_ipfsd)
125+
inProcNode = _ipfsd.api
126+
done()
127+
})
110128
})
111129

112130
afterEach(function (done) {
113-
this.timeout(60 * 1000)
114-
setTimeout(() => inProcNode.stop(() => done()), 500)
131+
this.timeout(80 * 1000)
132+
const tasks = nodes.map((node) => (cb) => node.stop(cb))
133+
parallel(tasks, (err) => {
134+
expect(err).to.not.exist()
135+
nodes = []
136+
done()
137+
})
115138
})
116139

117140
describe('transfer a block between', () => {
118141
it('2 peers', function (done) {
119-
this.timeout(40 * 1000)
142+
this.timeout(80 * 1000)
120143

121144
let remoteNode
122145
let block
123146
waterfall([
124147
(cb) => parallel([
125148
(cb) => makeBlock(cb),
126-
(cb) => addNode(13, inProcNode, cb)
149+
(cb) => addNode(inProcNode, cb)
127150
], cb),
128151
(res, cb) => {
129152
block = res[0]
@@ -140,7 +163,7 @@ describe('bitswap', function () {
140163
})
141164

142165
it('3 peers', function (done) {
143-
this.timeout(60 * 1000)
166+
this.timeout(80 * 1000)
144167

145168
let blocks
146169
const remoteNodes = []
@@ -151,11 +174,11 @@ describe('bitswap', function () {
151174
blocks = _blocks
152175
cb()
153176
}),
154-
(cb) => addNode(8, inProcNode, (err, _ipfs) => {
177+
(cb) => addNode(inProcNode, (err, _ipfs) => {
155178
remoteNodes.push(_ipfs)
156179
cb(err)
157180
}),
158-
(cb) => addNode(7, inProcNode, (err, _ipfs) => {
181+
(cb) => addNode(inProcNode, (err, _ipfs) => {
159182
remoteNodes.push(_ipfs)
160183
cb(err)
161184
}),
@@ -193,10 +216,10 @@ describe('bitswap', function () {
193216

194217
waterfall([
195218
// 0. Start node
196-
(cb) => addNode(12, inProcNode, cb),
219+
(cb) => addNode(inProcNode, cb),
197220
// 1. Add file to tmp instance
198221
(remote, cb) => {
199-
remote.files.add([{path: 'awesome.txt', content: file}], cb)
222+
remote.files.add([{ path: 'awesome.txt', content: file }], cb)
200223
},
201224
// 2. Request file from local instance
202225
(filesAdded, cb) => inProcNode.files.cat(filesAdded[0].hash, cb)
@@ -247,7 +270,7 @@ describe('bitswap', function () {
247270

248271
describe('while online', () => {
249272
before(function (done) {
250-
this.timeout(40 * 1000)
273+
this.timeout(80 * 1000)
251274

252275
node.start(() => done())
253276
})

0 commit comments

Comments
 (0)