Skip to content

Commit e66a7df

Browse files
committed
chore: enable some browser tests
1 parent 5f4a7ad commit e66a7df

10 files changed

+186
-17
lines changed

.aegir.js

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
'use strict'
2+
3+
const pull = require('pull-stream')
4+
const parallel = require('async/parallel')
5+
const WebSocketStarRendezvous = require('libp2p-websocket-star-rendezvous')
6+
7+
const Node = require('./test/utils/nodejs-bundle.js')
8+
const {
9+
getPeerRelay,
10+
WS_RENDEZVOUS_MULTIADDR
11+
} = require('./test/utils/constants.js')
12+
13+
let wsRendezvous
14+
let node
15+
16+
const before = (done) => {
17+
parallel([
18+
(cb) => {
19+
WebSocketStarRendezvous.start({
20+
port: WS_RENDEZVOUS_MULTIADDR.nodeAddress().port,
21+
refreshPeerListIntervalMS: 1000,
22+
strictMultiaddr: false,
23+
cryptoChallenge: true
24+
}, (err, _server) => {
25+
if (err) {
26+
return cb(err)
27+
}
28+
wsRendezvous = _server
29+
cb()
30+
})
31+
},
32+
(cb) => {
33+
getPeerRelay((err, peerInfo) => {
34+
if (err) {
35+
return done(err)
36+
}
37+
38+
node = new Node({
39+
peerInfo,
40+
config: {
41+
relay: {
42+
enabled: true,
43+
hop: {
44+
enabled: true,
45+
active: true
46+
}
47+
}
48+
}
49+
})
50+
51+
node.handle('/echo/1.0.0', (_, conn) => pull(conn, conn))
52+
node.start(cb)
53+
})
54+
}
55+
], done)
56+
}
57+
58+
const after = (done) => {
59+
setTimeout(() =>
60+
parallel(
61+
[node, wsRendezvous].map((s) => (cb) => s.stop(cb)),
62+
done),
63+
2000)
64+
}
65+
66+
module.exports = {
67+
hooks: {
68+
pre: before,
69+
post: after
70+
}
71+
}

.travis.yml

+17-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ os:
1313
- osx
1414
- windows
1515

16-
script: npx nyc -s npm run test -- --bail
16+
script: npx nyc -s npm run test:node -- --bail
1717
after_success: npx nyc report --reporter=text-lcov > coverage.lcov && npx codecov
1818

1919
jobs:
@@ -24,5 +24,21 @@ jobs:
2424
- npx aegir dep-check
2525
- npm run lint
2626

27+
- stage: test
28+
name: chrome
29+
addons:
30+
chrome: stable
31+
script:
32+
- npx aegir test -t browser
33+
- npx aegir test -t webworker
34+
35+
- stage: test
36+
name: firefox
37+
addons:
38+
firefox: latest
39+
script:
40+
- npx aegir test -t browser -- --browsers FirefoxHeadless
41+
- npx aegir test -t webworker -- --browsers FirefoxHeadless
42+
2743
notifications:
2844
email: false

package.json

+8-1
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
"main": "src/index.js",
77
"scripts": {
88
"lint": "aegir lint",
9-
"test": "aegir test -t node",
9+
"test": "aegir test",
1010
"test:node": "aegir test -t node",
11+
"test:browser": "aegir test -t browser",
1112
"build": "aegir build",
1213
"docs": "aegir-docs",
1314
"release": "aegir release --target node --docs",
@@ -16,6 +17,9 @@
1617
"coverage": "aegir coverage",
1718
"coverage-publish": "aegir coverage --provider coveralls"
1819
},
20+
"browser": {
21+
"test/utils/nodejs-bundle": "./test/utils/browser-bundle.js"
22+
},
1923
"files": [
2024
"src",
2125
"dist"
@@ -50,7 +54,10 @@
5054
"libp2p-secio": "~0.11.1",
5155
"libp2p-spdy": "~0.13.3",
5256
"libp2p-tcp": "~0.13.0",
57+
"libp2p-websocket-star": "~0.10.2",
58+
"libp2p-websocket-star-rendezvous": "~0.3.0",
5359
"lodash": "^4.17.11",
60+
"multiaddr": "^6.0.6",
5461
"peer-id": "~0.12.2",
5562
"peer-info": "~0.15.1"
5663
},

test/fixtures/test-peer.json

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"id": "Qmex1SSsueWFsUfjdkugJ5zhcnjddAt8TxcnDLUXKD9Sx7",
3+
"privKey": "CAASqAkwggSkAgEAAoIBAQCXzV127CvVHOGMzvsn/U+/32JM58KA6k0FSCCeNFzNowiDS/vV5eezGN5AFoxsF6icWLoaczz7l9RdVD+I/t6PEt9X7XUdrDCtSS8WmAcCgvZWSSf7yAd3jT4GSZDUIgIEeRZsERDt/yVqTLwsZ1G9dMIeh8sbf2zwjTXZIWaRM6o4lq3DYFfzLvJUXlJodxPogU7l7nLkITPUv+yQAMcVHizbNwJvwiETKYeUj73/m/wEPAlnFESexDstxNiIwE/FH8Ao50QPZRO6E6Jb0hhYSI/4CLRdrzDFm/Vzplei3Wr2DokSROaNyeG37VAueyA+pDqn84um+L9uXLwbv5FbAgMBAAECggEAdBUzV/GaQ0nmoQrWvOnUxmFIho7kCjkh1NwnNVPNc+Msa1r7pcI9wJNPwap8j1w4L/cZuYhOJgcg+o2mWFiuULKZ4F9Ro/M89gZ038457g2/2pPu43c/Xoi/2YcAHXg0Gr+OCe2zCIyITBWKAFqyAzL6DubAxrJW2Ezj1LrZ+EZgMyzbh/go/eEGSJaaGkINeAkY144DqDWWWvzyhKhryipsGkZGEkVy9xJgMEI3ipVvuPez2XAvoyyeuinBBLe+Z2vY5G50XXzbIMhIQGLncHf9MwTv6wt1ilyOSLOXK0BoQbB76J3R3is5dSULXXP9r8VocjLBEkmBuf4FXAKzoQKBgQDNNS4F1XE1gxD8LPkL+aB/hi6eVHVPhr+w0I/9ATikcLGeUfBM2Gd6cZRPFtNVrv1p6ZF1D1UyGDknGbDBSQd9wLUgb0fDoo3jKYMGWq6G+VvaP5rzWQeBV8YV2EhSmUk1i6kiYe2ZE8WyrPie7iwpQIY60e2A8Ly0GKZiBZUcHQKBgQC9YDAVsGnEHFVFkTDpvw5HwEzCgTb2A3NgkGY3rTYZ7L6AFjqCYmUwFB8Fmbyc4kdFWNh8wfmq5Qrvl49NtaeukiqWKUUlB8uPdztB1P0IahA2ks0owStZlRifmwfgYyMd4xE17lhaOgQQJZZPxmP0F6mdOvb3YJafNURCdMS51wKBgEvvIM+h0tmFXXSjQ6kNvzlRMtD92ccKysYn9xAdMpOO6/r0wSH+dhQWEVZO0PcE4NsfReb2PIVj90ojtIdhebcr5xpQc1LORQjJJKXmSmzBux6AqNrhl+hhzXfp56FA/Zkly/lgGWaqrV5XqUxOP+Mn8EO1yNgMvRc7g94DyNB1AoGBAKLBuXHalXwDsdHBUB2Eo3xNLGt6bEcRfia+0+sEBdxQGQWylQScFkU09dh1YaIf44sZKa5HdBFJGpYCVxo9hmjFnK5Dt/Z0daHOonIY4INLzLVqg8KECoLKXkhGEIXsDjFQhukn+G1LMVTDSSU055DQiWjlVX4UWD9qo0jOXIkvAoGBAMP50p2X6PsWWZUuuR7i1JOJHRyQZPWdHh9p8SSLnCtEpHYZfJr4INXNmhnSiB/3TUnHix2vVKjosjMTCk/CjfzXV2H41WPOLZ2/Pi3SxCicWIRj4kCcWhkEuIF2jGkg1+jmNiCl/zNMaBOAIP3QbDPtqOWbYlPd2YIzdj6WQ6R4",
4+
"pubKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCXzV127CvVHOGMzvsn/U+/32JM58KA6k0FSCCeNFzNowiDS/vV5eezGN5AFoxsF6icWLoaczz7l9RdVD+I/t6PEt9X7XUdrDCtSS8WmAcCgvZWSSf7yAd3jT4GSZDUIgIEeRZsERDt/yVqTLwsZ1G9dMIeh8sbf2zwjTXZIWaRM6o4lq3DYFfzLvJUXlJodxPogU7l7nLkITPUv+yQAMcVHizbNwJvwiETKYeUj73/m/wEPAlnFESexDstxNiIwE/FH8Ao50QPZRO6E6Jb0hhYSI/4CLRdrzDFm/Vzplei3Wr2DokSROaNyeG37VAueyA+pDqn84um+L9uXLwbv5FbAgMBAAE="
5+
}

test/node.js

-3
This file was deleted.

test/pubsub.js test/pubsub.spec.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ describe('pubsub base protocol', () => {
4646

4747
before((done) => {
4848
series([
49-
(cb) => createNode('/ip4/127.0.0.1/tcp/0', cb),
50-
(cb) => createNode('/ip4/127.0.0.1/tcp/0', cb)
49+
(cb) => createNode(cb),
50+
(cb) => createNode(cb)
5151
], (err, nodes) => {
5252
if (err) {
5353
return done(err)
@@ -126,8 +126,8 @@ describe('pubsub base protocol', () => {
126126

127127
before((done) => {
128128
series([
129-
(cb) => createNode('/ip4/127.0.0.1/tcp/0', cb),
130-
(cb) => createNode('/ip4/127.0.0.1/tcp/0', cb)
129+
(cb) => createNode(cb),
130+
(cb) => createNode(cb)
131131
], (cb, nodes) => {
132132
nodeA = nodes[0]
133133
nodeB = nodes[1]
@@ -177,8 +177,8 @@ describe('pubsub base protocol', () => {
177177
sandbox = chai.spy.sandbox()
178178

179179
series([
180-
(cb) => createNode('/ip4/127.0.0.1/tcp/0', cb),
181-
(cb) => createNode('/ip4/127.0.0.1/tcp/0', cb)
180+
(cb) => createNode(cb),
181+
(cb) => createNode(cb)
182182
], (err, nodes) => {
183183
if (err) return done(err)
184184

@@ -238,8 +238,8 @@ describe('pubsub base protocol', () => {
238238
sandbox = chai.spy.sandbox()
239239

240240
series([
241-
(cb) => createNode('/ip4/127.0.0.1/tcp/0', cb),
242-
(cb) => createNode('/ip4/127.0.0.1/tcp/0', cb)
241+
(cb) => createNode(cb),
242+
(cb) => createNode(cb)
243243
], (err, nodes) => {
244244
if (err) return done(err)
245245

@@ -310,8 +310,8 @@ describe('pubsub base protocol', () => {
310310
sandbox = chai.spy.sandbox()
311311

312312
series([
313-
(cb) => createNode('/ip4/127.0.0.1/tcp/0', cb),
314-
(cb) => createNode('/ip4/127.0.0.1/tcp/0', cb)
313+
(cb) => createNode(cb),
314+
(cb) => createNode(cb)
315315
], (err, nodes) => {
316316
if (err) return done(err)
317317

test/utils/browser-bundle.js

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
'use strict'
2+
3+
const WebSocketStar = require('libp2p-websocket-star')
4+
const spdy = require('libp2p-spdy')
5+
const secio = require('libp2p-secio')
6+
const libp2p = require('libp2p')
7+
8+
const { WS_STAR_MULTIADDR } = require('./constants')
9+
10+
class Node extends libp2p {
11+
constructor ({ peerInfo, peerBook }) {
12+
const starOpts = { id: peerInfo.id }
13+
const wsStar = new WebSocketStar(starOpts)
14+
15+
peerInfo.multiaddrs.add(WS_STAR_MULTIADDR)
16+
17+
const modules = {
18+
transport: [wsStar],
19+
streamMuxer: [spdy],
20+
connEncryption: [secio]
21+
}
22+
23+
super({
24+
modules,
25+
peerInfo,
26+
peerBook
27+
})
28+
}
29+
}
30+
31+
module.exports = Node

test/utils/constants.js

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
'use strict'
2+
3+
const PeerId = require('peer-id')
4+
const PeerInfo = require('peer-info')
5+
const nextTick = require('async/nextTick')
6+
const peerJSON = require('../fixtures/test-peer')
7+
const multiaddr = require('multiaddr')
8+
9+
let peerRelay = null
10+
11+
/**
12+
* Creates a `PeerInfo` that can be used across testing. Once the
13+
* relay `PeerInfo` has been requested, it will be reused for each
14+
* additional request.
15+
*
16+
* This is currently being used to create a relay on test bootstrapping
17+
* so that it can be used by browser nodes during their test suite. This
18+
* is necessary for running a TCP node during browser tests.
19+
* @private
20+
* @param {function(error, PeerInfo)} callback
21+
* @returns {void}
22+
*/
23+
module.exports.getPeerRelay = (callback) => {
24+
if (peerRelay) return nextTick(callback, null, peerRelay)
25+
26+
PeerId.createFromJSON(peerJSON, (err, peerId) => {
27+
if (err) {
28+
return callback(err)
29+
}
30+
peerRelay = new PeerInfo(peerId)
31+
32+
peerRelay.multiaddrs.add('/ip4/127.0.0.1/tcp/9200/ws')
33+
peerRelay.multiaddrs.add('/ip4/127.0.0.1/tcp/9245')
34+
35+
callback(null, peerRelay)
36+
})
37+
}
38+
39+
module.exports.WS_STAR_MULTIADDR = multiaddr('/ip4/127.0.0.1/tcp/14444/ws/p2p-websocket-star/')
40+
module.exports.WS_RENDEZVOUS_MULTIADDR = multiaddr('/ip4/127.0.0.1/tcp/14444/wss')

test/utils.js test/utils/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
const PeerId = require('peer-id')
44
const PeerInfo = require('peer-info')
55
const Node = require('./nodejs-bundle')
6+
67
const waterfall = require('async/waterfall')
78

8-
exports.createNode = (maddr, callback) => {
9+
exports.createNode = (callback) => {
910
waterfall([
1011
(cb) => PeerId.create({ bits: 1024 }, cb),
1112
(id, cb) => PeerInfo.create(id, cb),
1213
(peerInfo, cb) => {
13-
peerInfo.multiaddrs.add(maddr)
1414
cb(null, new Node({ peerInfo }))
1515
},
1616
(node, cb) => node.start((err) => cb(err, node))

test/nodejs-bundle.js test/utils/nodejs-bundle.js

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ class Node extends libp2p {
1313
connEncryption: [secio]
1414
}
1515

16+
peerInfo.multiaddrs.add('/ip4/127.0.0.1/tcp/0')
17+
1618
super({
1719
modules,
1820
peerInfo,

0 commit comments

Comments
 (0)