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

Commit d39e255

Browse files
committed
wip
1 parent 30763d9 commit d39e255

File tree

2 files changed

+198
-0
lines changed

2 files changed

+198
-0
lines changed

test/interop/circuit/index.js

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
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+
const waterfall = require('async/waterfall')
9+
const parallel = require('async/parallel')
10+
const Factory = require('../../utils/ipfs-factory-daemon/index')
11+
const GoDaemon = require('../daemons/go')
12+
13+
const utils = require('./utils')
14+
15+
chai.use(dirtyChai)
16+
17+
describe('circuit interop', function () {
18+
this.timeout(20 * 1000)
19+
20+
let jsTCP
21+
let jsWS
22+
let jsRelayPeer
23+
let jsRelayAddrs
24+
let goTCP = new GoDaemon()
25+
let goRelayAddrs
26+
let factory = new Factory()
27+
28+
beforeEach((done) => {
29+
jsTCP = utils.setupNode([
30+
'/ip4/0.0.0.0/tcp/9002'
31+
])
32+
33+
jsWS = utils.setupNode([
34+
'/ip4/0.0.0.0/tcp/9003/ws'
35+
])
36+
37+
waterfall([
38+
(pCb) => utils.setupRelay(['/ip4/127.0.0.1/tcp/61452/ws', '/ip4/127.0.0.1/tcp/61453'], factory, pCb),
39+
(peer, addr, pCb) => {
40+
jsRelayAddrs = addr
41+
jsRelayPeer = peer
42+
pCb()
43+
},
44+
(pCb) => jsWS.start(pCb),
45+
(pCb) => jsTCP.start(pCb),
46+
(pCb) => goTCP.start(pCb),
47+
(pCb) => {
48+
goTCP.api.id((err, peer) => {
49+
expect(err).to.not.exist()
50+
console.log(JSON.stringify(peer.addresses))
51+
52+
goRelayAddrs = peer.addresses
53+
pCb()
54+
})
55+
}
56+
], done)
57+
})
58+
59+
afterEach((done) => {
60+
waterfall([
61+
(cb) => jsWS.stop(cb),
62+
(cb) => jsTCP.stop(cb),
63+
(cb) => goTCP.stop(cb),
64+
(cb) => factory.dismantle((err) => done(err))
65+
], done)
66+
})
67+
68+
it('jsES <-> js-relay <-> jsTCP', function (done) {
69+
let addr = goRelayAddrs.filter((a) => !a.toString().includes('/p2p-circuit'))
70+
parallel([
71+
(cb) => jsWS.swarm.connect(addr[0], cb),
72+
(cb) => jsTCP.swarm.connect(addr[1], cb)
73+
], (err) => {
74+
expect(err).to.not.exist()
75+
waterfall([
76+
(cb) => jsTCP.swarm.connect(jsWS._peerInfo, cb),
77+
(conn, cb) => utils.addAndCat(new jsTCP.types.Buffer('Hello world over circuit!'),
78+
jsWS,
79+
jsTCP,
80+
(err, data) => {
81+
expect(err).to.not.exist()
82+
expect(data).to.be.equal('Hello world over circuit!')
83+
cb()
84+
})
85+
], done)
86+
})
87+
})
88+
89+
it('goTCP <-> js-relay <-> jsWS', function (done) {
90+
let addr = jsRelayAddrs.filter((a) => !a.toString().includes('/p2p-circuit'))
91+
parallel([
92+
(cb) => jsWS.swarm.connect(addr[0], cb),
93+
(cb) => goTCP.api.swarm.connect(addr[1], cb)
94+
], (err) => {
95+
expect(err).to.not.exist()
96+
waterfall([
97+
(cb) => goTCP.api.swarm.connect(jsWS._peerInfo, cb),
98+
(conn, cb) => utils.addAndCat(new jsTCP.types.Buffer('Hello world over circuit!'),
99+
jsWS,
100+
goTCP.api,
101+
(err, data) => {
102+
expect(err).to.not.exist()
103+
expect(data).to.be.equal('Hello world over circuit!')
104+
})
105+
], done)
106+
})
107+
})
108+
})

test/interop/circuit/utils.js

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
'use strict'
2+
3+
const chai = require('chai')
4+
const expect = chai.expect
5+
const waterfall = require('async/waterfall')
6+
const IPFS = require('../../../src/core/index')
7+
const createTempRepo = require('../../utils/create-repo-nodejs')
8+
const relayConfig = require('../../utils/ipfs-factory-daemon/default-config.json')
9+
10+
exports.setupNode = function setupNode (addrs, circuitEnabled) {
11+
return new IPFS({
12+
repo: createTempRepo(),
13+
start: false,
14+
config: {
15+
Addresses: {
16+
Swarm: addrs
17+
},
18+
Bootstrap: [],
19+
EXPERIMENTAL: {
20+
Relay: {
21+
Enabled: circuitEnabled || false
22+
}
23+
}
24+
}
25+
})
26+
}
27+
28+
exports.setupRelay = function setupRelay (addrs, factory, cb) {
29+
let relayPeer
30+
let relayAddrs
31+
32+
waterfall([
33+
(pCb) => {
34+
factory.spawnNode(createTempRepo(), Object.assign(relayConfig, {
35+
Addresses: {
36+
Swarm: addrs
37+
},
38+
EXPERIMENTAL: {
39+
Relay: {
40+
Enabled: true,
41+
HOP: {
42+
Enabled: true,
43+
Active: false
44+
}
45+
}
46+
}
47+
}), (err, node) => {
48+
expect(err).to.not.exist()
49+
relayPeer = node
50+
pCb()
51+
})
52+
},
53+
(pCb) => {
54+
relayPeer.swarm.localAddrs((err, addrs) => {
55+
expect(err).to.not.exist()
56+
relayAddrs = addrs
57+
pCb()
58+
})
59+
}], (err) => {
60+
expect(err).to.not.exist()
61+
cb(null, relayPeer, relayAddrs)
62+
})
63+
}
64+
65+
exports.addAndCat = function addAndCat (data, ipfsSrc, ipfsDst, callback) {
66+
waterfall([
67+
(cb) => ipfsDst.files.add(data, cb),
68+
(res, cb) => {
69+
expect(res[0]).to.not.be.null()
70+
cb(null, res[0].hash)
71+
},
72+
(hash, cb) => ipfsSrc.files.cat(hash, function (err, stream) {
73+
expect(err).to.be.null()
74+
75+
var res = ''
76+
77+
stream.on('data', function (chunk) {
78+
res += chunk.toString()
79+
})
80+
81+
stream.on('error', function (err) {
82+
cb(err)
83+
})
84+
85+
stream.on('end', function () {
86+
cb(null, res)
87+
})
88+
})
89+
], callback)
90+
}

0 commit comments

Comments
 (0)