js-libp2p-websockets/test/compliance.node.js
Vasco Santos 711c721b03
feat: custom address filter (#116)
* feat: custom address filter

BREAKING CHANGE: Only DNS+WSS addresses are now returned on filter by default in the browser. This can be overritten by the filter option and filters are provided in the module.
2020-11-24 10:14:01 +01:00

65 lines
1.9 KiB
JavaScript

/* eslint-env mocha */
'use strict'
const tests = require('libp2p-interfaces/src/transport/tests')
const multiaddr = require('multiaddr')
const http = require('http')
const WS = require('../src')
const filters = require('../src/filters')
describe('interface-transport compliance', () => {
tests({
async setup ({ upgrader }) { // eslint-disable-line require-await
const ws = new WS({ upgrader, filter: filters.all })
const addrs = [
multiaddr('/ip4/127.0.0.1/tcp/9091/ws'),
multiaddr('/ip4/127.0.0.1/tcp/9092/ws'),
multiaddr('/dns4/ipfs.io/tcp/9092/ws'),
multiaddr('/dns4/ipfs.io/tcp/9092/wss')
]
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 }
},
async teardown () {}
})
})