mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-06-13 01:01:23 +00:00
fix: promisified methods (#398)
* chore: update ws rendezvous dep test(fix): fix tests with latest ws rendezvous server * fix: promisification of libp2p methods test: add tests to verify promisify support until async/await endeavor is complete * chore: fix linting
This commit is contained in:
@ -43,12 +43,7 @@ describe('circuit relay', () => {
|
||||
let peerRelay
|
||||
|
||||
before('get peer relay', async () => {
|
||||
peerRelay = await new Promise(resolve => {
|
||||
getPeerRelay((err, peer) => {
|
||||
expect(err).to.not.exist()
|
||||
resolve(peer)
|
||||
})
|
||||
})
|
||||
peerRelay = await getPeerRelay()
|
||||
})
|
||||
|
||||
before('create the browser nodes', async () => {
|
||||
|
@ -6,6 +6,7 @@ require('./stream-muxing.node')
|
||||
require('./peer-discovery.node')
|
||||
require('./peer-routing.node')
|
||||
require('./ping.node')
|
||||
require('./promisify.node')
|
||||
require('./pubsub.node')
|
||||
require('./content-routing.node')
|
||||
require('./circuit-relay.node')
|
||||
|
87
test/promisify.node.js
Normal file
87
test/promisify.node.js
Normal file
@ -0,0 +1,87 @@
|
||||
/* eslint-env mocha */
|
||||
'use strict'
|
||||
|
||||
/**
|
||||
* This test suite is intended to validate compatability of
|
||||
* the promisified api, until libp2p has been fully migrated to
|
||||
* async/await. Once the migration is complete and all tests
|
||||
* are using async/await, this file can be removed.
|
||||
*/
|
||||
|
||||
const chai = require('chai')
|
||||
chai.use(require('dirty-chai'))
|
||||
const expect = chai.expect
|
||||
const promisify = require('promisify-es6')
|
||||
const createNode = promisify(require('./utils/create-node'))
|
||||
const { createPeerInfo } = require('./utils/create-node')
|
||||
const Node = require('./utils/bundle-nodejs')
|
||||
const pull = require('pull-stream')
|
||||
const Ping = require('libp2p-ping')
|
||||
|
||||
/**
|
||||
* As libp2p is currently promisified, when extending libp2p,
|
||||
* method arguments must be passed to `super` to ensure the
|
||||
* promisify callbacks are properly resolved
|
||||
*/
|
||||
class AsyncLibp2p extends Node {
|
||||
async start (...args) {
|
||||
await super.start(...args)
|
||||
}
|
||||
|
||||
async stop (...args) {
|
||||
await super.start(...args)
|
||||
}
|
||||
}
|
||||
|
||||
async function createAsyncNode () {
|
||||
const peerInfo = await promisify(createPeerInfo)()
|
||||
peerInfo.multiaddrs.add('/ip4/0.0.0.0/tcp/0')
|
||||
return new AsyncLibp2p({ peerInfo })
|
||||
}
|
||||
|
||||
describe('promisified libp2p', () => {
|
||||
let libp2p
|
||||
let otherNode
|
||||
const ECHO_PROTO = '/echo/1.0.0'
|
||||
|
||||
before('Create and Start', async () => {
|
||||
[libp2p, otherNode] = await Promise.all([
|
||||
createNode('/ip4/0.0.0.0/tcp/0'),
|
||||
createAsyncNode()
|
||||
])
|
||||
|
||||
return [libp2p, otherNode].map(node => {
|
||||
node.handle(ECHO_PROTO, (_, conn) => pull(conn, conn))
|
||||
return node.start()
|
||||
})
|
||||
})
|
||||
|
||||
after('Stop', () => {
|
||||
return [libp2p, otherNode].map(node => node.stop())
|
||||
})
|
||||
|
||||
afterEach('Hang up', () => {
|
||||
return libp2p.hangUp(otherNode.peerInfo)
|
||||
})
|
||||
|
||||
it('dial', async () => {
|
||||
const stream = await libp2p.dial(otherNode.peerInfo)
|
||||
expect(stream).to.not.exist()
|
||||
expect(libp2p._switch.connection.getAll()).to.have.length(1)
|
||||
})
|
||||
|
||||
it('dialFSM', async () => {
|
||||
const connectionFSM = await libp2p.dialFSM(otherNode.peerInfo, ECHO_PROTO)
|
||||
expect(connectionFSM).to.exist()
|
||||
})
|
||||
|
||||
it('dialProtocol', async () => {
|
||||
const stream = await libp2p.dialProtocol(otherNode.peerInfo, ECHO_PROTO)
|
||||
expect(stream).to.exist()
|
||||
})
|
||||
|
||||
it('ping', async () => {
|
||||
const ping = await libp2p.ping(otherNode.peerInfo)
|
||||
expect(ping).to.be.an.instanceOf(Ping)
|
||||
})
|
||||
})
|
@ -25,14 +25,11 @@ describe('transports', () => {
|
||||
let peerBMultiaddr
|
||||
let nodeA
|
||||
|
||||
before((done) => {
|
||||
getPeerRelay((err, peerInfo) => {
|
||||
expect(err).to.not.exist()
|
||||
peerB = new PeerInfo(peerInfo.id)
|
||||
peerBMultiaddr = `/ip4/127.0.0.1/tcp/9200/ws/p2p/${peerInfo.id.toB58String()}`
|
||||
peerB.multiaddrs.add(peerBMultiaddr)
|
||||
done()
|
||||
})
|
||||
before(async () => {
|
||||
const peerInfo = await getPeerRelay()
|
||||
peerB = new PeerInfo(peerInfo.id)
|
||||
peerBMultiaddr = `/ip4/127.0.0.1/tcp/9200/ws/p2p/${peerInfo.id.toB58String()}`
|
||||
peerB.multiaddrs.add(peerBMultiaddr)
|
||||
})
|
||||
|
||||
after((done) => nodeA.stop(done))
|
||||
|
@ -17,7 +17,9 @@ const createNode = require('./utils/create-node.js')
|
||||
const tryEcho = require('./utils/try-echo')
|
||||
const echo = require('./utils/echo')
|
||||
|
||||
const { WRTC_RENDEZVOUS_MULTIADDR } = require('./utils/constants')
|
||||
const {
|
||||
WRTC_RENDEZVOUS_MULTIADDR
|
||||
} = require('./utils/constants')
|
||||
|
||||
describe('transports', () => {
|
||||
describe('TCP only', () => {
|
||||
@ -576,25 +578,24 @@ describe('transports', () => {
|
||||
let nodeTCP
|
||||
let nodeWS
|
||||
let nodeWebSocketStar
|
||||
|
||||
let ss
|
||||
const PORT = 24642
|
||||
|
||||
before(async () => {
|
||||
ss = await rendezvous.start({
|
||||
port: PORT
|
||||
})
|
||||
})
|
||||
|
||||
before((done) => {
|
||||
parallel([
|
||||
(cb) => {
|
||||
rendezvous.start({ port: 24642 }, (err, server) => {
|
||||
expect(err).to.not.exist()
|
||||
ss = server
|
||||
cb()
|
||||
})
|
||||
},
|
||||
(cb) => {
|
||||
const wstar = new WSStar()
|
||||
|
||||
createNode([
|
||||
'/ip4/0.0.0.0/tcp/0',
|
||||
'/ip4/127.0.0.1/tcp/25011/ws',
|
||||
'/ip4/127.0.0.1/tcp/24642/ws/p2p-websocket-star'
|
||||
`/ip4/127.0.0.1/tcp/${PORT}/ws/p2p-websocket-star`
|
||||
], {
|
||||
modules: {
|
||||
transport: [
|
||||
@ -603,13 +604,6 @@ describe('transports', () => {
|
||||
wstar
|
||||
],
|
||||
peerDiscovery: [wstar.discovery]
|
||||
},
|
||||
config: {
|
||||
peerDiscovery: {
|
||||
[wstar.discovery.tag]: {
|
||||
enabled: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}, (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
@ -640,18 +634,11 @@ describe('transports', () => {
|
||||
const wstar = new WSStar({})
|
||||
|
||||
createNode([
|
||||
'/ip4/127.0.0.1/tcp/24642/ws/p2p-websocket-star'
|
||||
`/ip4/127.0.0.1/tcp/${PORT}/ws/p2p-websocket-star`
|
||||
], {
|
||||
modules: {
|
||||
transport: [wstar],
|
||||
peerDiscovery: [wstar.discovery]
|
||||
},
|
||||
config: {
|
||||
peerDiscovery: {
|
||||
[wstar.discovery.tag]: {
|
||||
enabled: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}, (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
@ -670,7 +657,9 @@ describe('transports', () => {
|
||||
(cb) => nodeTCP.stop(cb),
|
||||
(cb) => nodeWS.stop(cb),
|
||||
(cb) => nodeWebSocketStar.stop(cb),
|
||||
(cb) => ss.stop(cb)
|
||||
async () => {
|
||||
await ss.stop()
|
||||
}
|
||||
], done)
|
||||
})
|
||||
|
||||
|
@ -5,6 +5,7 @@ const PeerInfo = require('peer-info')
|
||||
const nextTick = require('async/nextTick')
|
||||
const peerJSON = require('../fixtures/test-peer')
|
||||
const multiaddr = require('multiaddr')
|
||||
const promisify = require('promisify-es6')
|
||||
|
||||
let peerRelay = null
|
||||
|
||||
@ -20,7 +21,7 @@ let peerRelay = null
|
||||
* @param {function(error, PeerInfo)} callback
|
||||
* @returns {void}
|
||||
*/
|
||||
module.exports.getPeerRelay = (callback) => {
|
||||
module.exports.getPeerRelay = promisify((callback) => {
|
||||
if (peerRelay) return nextTick(callback, null, peerRelay)
|
||||
|
||||
PeerId.createFromJSON(peerJSON, (err, peerId) => {
|
||||
@ -34,7 +35,7 @@ module.exports.getPeerRelay = (callback) => {
|
||||
|
||||
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')
|
||||
module.exports.WS_RENDEZVOUS_MULTIADDR = multiaddr('/ip4/127.0.0.1/tcp/14444/ws')
|
||||
module.exports.WRTC_RENDEZVOUS_MULTIADDR = multiaddr('/ip4/127.0.0.1/tcp/15555/ws')
|
||||
|
Reference in New Issue
Block a user