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:
Vasco Santos
2019-09-30 12:14:28 +02:00
committed by Jacob Heun
parent 5a9434bc58
commit ce7bf4f1e0
15 changed files with 530 additions and 475 deletions

View File

@ -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 () {}
})
})