2016-08-11 14:50:44 +02:00
|
|
|
/* eslint-env mocha */
|
|
|
|
'use strict'
|
|
|
|
|
2019-12-20 18:52:48 +00:00
|
|
|
const tests = require('libp2p-interfaces/src/transport/tests')
|
2016-08-11 14:50:44 +02:00
|
|
|
const multiaddr = require('multiaddr')
|
2019-09-30 12:14:28 +02:00
|
|
|
const http = require('http')
|
2017-03-23 15:09:06 +00:00
|
|
|
const WS = require('../src')
|
2016-08-11 14:50:44 +02:00
|
|
|
|
2019-09-30 12:14:28 +02:00
|
|
|
describe('interface-transport compliance', () => {
|
2016-08-11 14:50:44 +02:00
|
|
|
tests({
|
2019-09-30 12:14:28 +02:00
|
|
|
async setup ({ upgrader }) { // eslint-disable-line require-await
|
|
|
|
const ws = new WS({ upgrader })
|
2016-08-11 14:50:44 +02:00
|
|
|
const addrs = [
|
|
|
|
multiaddr('/ip4/127.0.0.1/tcp/9091/ws'),
|
2019-09-30 12:14:28 +02:00
|
|
|
multiaddr('/ip4/127.0.0.1/tcp/9092/ws'),
|
2017-03-23 16:19:36 -07:00
|
|
|
multiaddr('/dns4/ipfs.io/tcp/9092/ws'),
|
|
|
|
multiaddr('/dns4/ipfs.io/tcp/9092/wss')
|
2016-08-11 14:50:44 +02:00
|
|
|
]
|
2019-09-30 12:14:28 +02:00
|
|
|
|
|
|
|
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 }
|
2016-08-11 14:50:44 +02:00
|
|
|
},
|
2019-09-30 12:14:28 +02:00
|
|
|
async teardown () {}
|
2016-08-11 14:50:44 +02:00
|
|
|
})
|
|
|
|
})
|