mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-03-17 08:00:51 +00:00
99 lines
2.1 KiB
JavaScript
99 lines
2.1 KiB
JavaScript
|
/* 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)
|
||
|
})
|
||
|
})
|
||
|
})
|