mirror of
https://github.com/fluencelabs/js-libp2p-websockets
synced 2025-06-19 07:11:43 +00:00
refactor: async with multiaddr conn (#92)
BREAKING CHANGE: Switch to using async/await and async iterators. The transport and connection interfaces have changed. See the README for new usage.
This commit is contained in:
@ -3,22 +3,61 @@
|
||||
|
||||
const tests = require('interface-transport')
|
||||
const multiaddr = require('multiaddr')
|
||||
const http = require('http')
|
||||
const WS = require('../src')
|
||||
|
||||
describe('compliance', () => {
|
||||
describe('interface-transport compliance', () => {
|
||||
tests({
|
||||
setup (callback) {
|
||||
const ws = new WS()
|
||||
async setup ({ upgrader }) { // eslint-disable-line require-await
|
||||
const ws = new WS({ upgrader })
|
||||
const addrs = [
|
||||
multiaddr('/ip4/127.0.0.1/tcp/9091/ws'),
|
||||
multiaddr('/ip4/127.0.0.1/tcp/9092/wss'),
|
||||
multiaddr('/ip4/127.0.0.1/tcp/9092/ws'),
|
||||
multiaddr('/dns4/ipfs.io/tcp/9092/ws'),
|
||||
multiaddr('/dns4/ipfs.io/tcp/9092/wss')
|
||||
]
|
||||
callback(null, ws, addrs)
|
||||
|
||||
let delayMs = 0
|
||||
const delayedCreateListener = (options, handler) => {
|
||||
if (typeof options === 'function') {
|
||||
handler = options
|
||||
options = {}
|
||||
}
|
||||
|
||||
options = options || {}
|
||||
|
||||
// A server that will delay the upgrade event by delayMs
|
||||
options.server = new Proxy(http.createServer(), {
|
||||
get (server, prop) {
|
||||
if (prop === 'on') {
|
||||
return (event, handler) => {
|
||||
server.on(event, (...args) => {
|
||||
if (event !== 'upgrade' || !delayMs) {
|
||||
return handler(...args)
|
||||
}
|
||||
setTimeout(() => handler(...args), delayMs)
|
||||
})
|
||||
}
|
||||
}
|
||||
return server[prop]
|
||||
}
|
||||
})
|
||||
|
||||
return ws.createListener(options, handler)
|
||||
}
|
||||
|
||||
const wsProxy = new Proxy(ws, {
|
||||
get: (_, prop) => prop === 'createListener' ? delayedCreateListener : ws[prop]
|
||||
})
|
||||
|
||||
// Used by the dial tests to simulate a delayed connect
|
||||
const connector = {
|
||||
delay (ms) { delayMs = ms },
|
||||
restore () { delayMs = 0 }
|
||||
}
|
||||
|
||||
return { transport: wsProxy, addrs, connector }
|
||||
},
|
||||
teardown (callback) {
|
||||
callback()
|
||||
}
|
||||
async teardown () {}
|
||||
})
|
||||
})
|
||||
|
Reference in New Issue
Block a user