test: add circuit browser test (#326)

This commit is contained in:
Jacob Heun
2019-02-25 13:44:56 +01:00
committed by GitHub
parent 5f92acd5bb
commit 9f5f07269e
6 changed files with 164 additions and 16 deletions

View File

@ -1,3 +1,4 @@
'use strict'
require('./circuit-relay.browser')
require('./transports.browser')

View File

@ -0,0 +1,98 @@
/* eslint-env mocha */
'use strict'
const chai = require('chai')
chai.use(require('dirty-chai'))
const expect = chai.expect
const createNode = require('./utils/create-node')
const tryEcho = require('./utils/try-echo')
const echo = require('./utils/echo')
const {
getPeerRelay
} = require('./utils/constants')
function setupNodeWithRelay (addrs, options = {}) {
options = {
config: {
relay: {
enabled: true
},
...options.config
},
...options
}
return new Promise((resolve) => {
createNode(addrs, options, (err, node) => {
expect(err).to.not.exist()
node.handle(echo.multicodec, echo)
node.start((err) => {
expect(err).to.not.exist()
resolve(node)
})
})
})
}
describe('circuit relay', () => {
let browserNode1
let browserNode2
let peerRelay
before('get peer relay', async () => {
peerRelay = await new Promise(resolve => {
getPeerRelay((err, peer) => {
expect(err).to.not.exist()
resolve(peer)
})
})
})
before('create the browser nodes', async () => {
[browserNode1, browserNode2] = await Promise.all([
setupNodeWithRelay([]),
setupNodeWithRelay([])
])
})
before('connect to the relay node', async () => {
await Promise.all(
[browserNode1, browserNode2].map((node) => {
return new Promise(resolve => {
node.dialProtocol(peerRelay, (err) => {
expect(err).to.not.exist()
resolve()
})
})
})
)
})
before('give time for HOP support to be determined', async () => {
await new Promise(resolve => {
setTimeout(resolve, 1e3)
})
})
after(async () => {
await Promise.all(
[browserNode1, browserNode2].map((node) => {
return new Promise((resolve) => {
node.stop(resolve)
})
})
)
})
it('should be able to echo over relay', (done) => {
browserNode1.dialProtocol(browserNode2.peerInfo, echo.multicodec, (err, conn) => {
expect(err).to.not.exist()
expect(conn).to.exist()
tryEcho(conn, done)
})
})
})

View File

@ -16,19 +16,19 @@ const wrtcSupport = self.RTCPeerConnection && ('createDataChannel' in self.RTCPe
const tryEcho = require('./utils/try-echo')
const Node = require('./utils/bundle-browser')
const jsonPeerId = require('./fixtures/test-peer.json')
const { getPeerRelay } = require('./utils/constants')
describe('transports', () => {
describe('websockets', () => {
let peerB
let peerBMultiaddr = '/ip4/127.0.0.1/tcp/9200/ws/p2p/' + jsonPeerId.id
let peerBMultiaddr
let nodeA
before((done) => {
PeerId.createFromPrivKey(jsonPeerId.privKey, (err, id) => {
getPeerRelay((err, peerInfo) => {
expect(err).to.not.exist()
peerB = new PeerInfo(id)
peerB = new PeerInfo(peerInfo.id)
peerBMultiaddr = `/ip4/127.0.0.1/tcp/9200/ws/p2p/${peerInfo.id.toB58String()}`
peerB.multiaddrs.add(peerBMultiaddr)
done()
})

40
test/utils/constants.js Normal file
View File

@ -0,0 +1,40 @@
'use strict'
const PeerId = require('peer-id')
const PeerInfo = require('peer-info')
const nextTick = require('async/nextTick')
const peerJSON = require('../fixtures/test-peer')
const multiaddr = require('multiaddr')
let peerRelay = null
/**
* Creates a `PeerInfo` that can be used across testing. Once the
* relay `PeerInfo` has been requested, it will be reused for each
* additional request.
*
* This is currently being used to create a relay on test bootstrapping
* so that it can be used by browser nodes during their test suite. This
* is necessary for running a TCP node during browser tests.
* @private
* @param {function(error, PeerInfo)} callback
* @returns {void}
*/
module.exports.getPeerRelay = (callback) => {
if (peerRelay) return nextTick(callback, null, peerRelay)
PeerId.createFromJSON(peerJSON, (err, peerId) => {
if (err) {
return callback(err)
}
peerRelay = new PeerInfo(peerId)
peerRelay.multiaddrs.add('/ip4/127.0.0.1/tcp/9200/ws')
peerRelay.multiaddrs.add('/ip4/127.0.0.1/tcp/9245')
callback(null, peerRelay)
})
}
module.exports.WS_RENDEZVOUS_MULTIADDR = multiaddr('/ip4/127.0.0.1/tcp/14444/wss')
module.exports.WRTC_RENDEZVOUS_MULTIADDR = multiaddr('/ip4/127.0.0.1/tcp/15555/wss')

View File

@ -8,3 +8,4 @@ function echo (protocol, conn) {
}
module.exports = echo
module.exports.multicodec = '/echo/1.0.0'