mirror of
https://github.com/fluencelabs/js-libp2p-websockets
synced 2025-05-01 02:42:32 +00:00
fix: listener params and adapter tests
License: MIT Signed-off-by: Alan Shaw <alan.shaw@protocol.ai>
This commit is contained in:
parent
616fac9d21
commit
1b9c591da6
@ -53,9 +53,13 @@
|
||||
"chai": "^4.1.2",
|
||||
"dirty-chai": "^2.0.1",
|
||||
"interface-transport": "~0.3.6",
|
||||
"it-goodbye": "^1.0.0",
|
||||
"it-pipe": "^1.0.0",
|
||||
"multiaddr": "^6.0.3",
|
||||
"pull-goodbye": "0.0.2",
|
||||
"pull-stream": "^3.6.9"
|
||||
"pull-serializer": "~0.3.2",
|
||||
"pull-stream": "^3.6.9",
|
||||
"streaming-iterables": "^4.0.2"
|
||||
},
|
||||
"contributors": [
|
||||
"Chris Campbell <christopher.d.campbell@gmail.com>",
|
||||
|
@ -5,6 +5,13 @@ const os = require('os')
|
||||
const createServer = require('it-ws/server')
|
||||
|
||||
module.exports = (options, handler) => {
|
||||
if (typeof options === 'function') {
|
||||
handler = options
|
||||
options = {}
|
||||
}
|
||||
|
||||
options = options || {}
|
||||
|
||||
const server = createServer(options, socket => {
|
||||
socket.getObservedAddrs = () => []
|
||||
handler(socket)
|
||||
|
@ -1,11 +1,11 @@
|
||||
/* eslint-env mocha */
|
||||
'use strict'
|
||||
|
||||
const tests = require('interface-transport')
|
||||
const tests = require('./compliance')
|
||||
const multiaddr = require('multiaddr')
|
||||
const WS = require('../../src/adapter')
|
||||
|
||||
describe('compliance', () => {
|
||||
describe('adapter compliance', () => {
|
||||
tests({
|
||||
setup (callback) {
|
||||
let ws = new WS()
|
||||
|
73
test/adapter/compliance/dial-test.js
Normal file
73
test/adapter/compliance/dial-test.js
Normal file
@ -0,0 +1,73 @@
|
||||
/* eslint-env mocha */
|
||||
'use strict'
|
||||
|
||||
const chai = require('chai')
|
||||
const dirtyChai = require('dirty-chai')
|
||||
const expect = chai.expect
|
||||
chai.use(dirtyChai)
|
||||
const pull = require('pull-stream')
|
||||
const goodbye = require('pull-goodbye')
|
||||
const serializer = require('pull-serializer')
|
||||
|
||||
module.exports = (common) => {
|
||||
describe('dial', () => {
|
||||
let addrs
|
||||
let transport
|
||||
let listener
|
||||
|
||||
before((done) => {
|
||||
common.setup((err, _transport, _addrs) => {
|
||||
if (err) return done(err)
|
||||
transport = _transport
|
||||
addrs = _addrs
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
after((done) => {
|
||||
common.teardown(done)
|
||||
})
|
||||
|
||||
beforeEach((done) => {
|
||||
listener = transport.createListener((conn) => {
|
||||
pull(conn, conn)
|
||||
})
|
||||
listener.listen(addrs[0], done)
|
||||
})
|
||||
|
||||
afterEach((done) => {
|
||||
listener.close(done)
|
||||
})
|
||||
|
||||
it('simple', (done) => {
|
||||
const s = serializer(goodbye({
|
||||
source: pull.values(['hey']),
|
||||
sink: pull.collect((err, values) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(
|
||||
values
|
||||
).to.be.eql(
|
||||
['hey']
|
||||
)
|
||||
done()
|
||||
})
|
||||
}))
|
||||
|
||||
pull(
|
||||
s,
|
||||
transport.dial(addrs[0]),
|
||||
s
|
||||
)
|
||||
})
|
||||
|
||||
it('to non existent listener', (done) => {
|
||||
pull(
|
||||
transport.dial(addrs[1]),
|
||||
pull.onEnd((err) => {
|
||||
expect(err).to.exist()
|
||||
done()
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
}
|
12
test/adapter/compliance/index.js
Normal file
12
test/adapter/compliance/index.js
Normal file
@ -0,0 +1,12 @@
|
||||
/* eslint-env mocha */
|
||||
'use strict'
|
||||
|
||||
const dial = require('./dial-test')
|
||||
const listen = require('./listen-test')
|
||||
|
||||
module.exports = (common) => {
|
||||
describe('interface-transport', () => {
|
||||
dial(common)
|
||||
listen(common)
|
||||
})
|
||||
}
|
124
test/adapter/compliance/listen-test.js
Normal file
124
test/adapter/compliance/listen-test.js
Normal file
@ -0,0 +1,124 @@
|
||||
/* eslint max-nested-callbacks: ["error", 8] */
|
||||
/* eslint-env mocha */
|
||||
'use strict'
|
||||
|
||||
const chai = require('chai')
|
||||
const dirtyChai = require('dirty-chai')
|
||||
const expect = chai.expect
|
||||
chai.use(dirtyChai)
|
||||
|
||||
const pull = require('pull-stream')
|
||||
|
||||
module.exports = (common) => {
|
||||
describe('listen', () => {
|
||||
let addrs
|
||||
let transport
|
||||
|
||||
before((done) => {
|
||||
common.setup((err, _transport, _addrs) => {
|
||||
if (err) return done(err)
|
||||
transport = _transport
|
||||
addrs = _addrs
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
after((done) => {
|
||||
common.teardown(done)
|
||||
})
|
||||
|
||||
it('simple', (done) => {
|
||||
const listener = transport.createListener((conn) => {})
|
||||
listener.listen(addrs[0], () => {
|
||||
listener.close(done)
|
||||
})
|
||||
})
|
||||
|
||||
it('close listener with connections, through timeout', (done) => {
|
||||
const finish = plan(3, done)
|
||||
const listener = transport.createListener((conn) => {
|
||||
pull(conn, conn)
|
||||
})
|
||||
|
||||
listener.listen(addrs[0], () => {
|
||||
const socket1 = transport.dial(addrs[0], () => {
|
||||
listener.close(finish)
|
||||
})
|
||||
|
||||
pull(
|
||||
transport.dial(addrs[0]),
|
||||
pull.onEnd(() => {
|
||||
finish()
|
||||
})
|
||||
)
|
||||
|
||||
pull(
|
||||
pull.values([Buffer.from('Some data that is never handled')]),
|
||||
socket1,
|
||||
pull.onEnd(() => {
|
||||
finish()
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe('events', () => {
|
||||
// eslint-disable-next-line
|
||||
// TODO: figure out why it fails in the full test suite
|
||||
it.skip('connection', (done) => {
|
||||
const finish = plan(2, done)
|
||||
|
||||
const listener = transport.createListener()
|
||||
|
||||
listener.on('connection', (conn) => {
|
||||
expect(conn).to.exist()
|
||||
finish()
|
||||
})
|
||||
|
||||
listener.listen(addrs[0], () => {
|
||||
transport.dial(addrs[0], () => {
|
||||
listener.close(finish)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
it('listening', (done) => {
|
||||
const listener = transport.createListener()
|
||||
listener.on('listening', () => {
|
||||
listener.close(done)
|
||||
})
|
||||
listener.listen(addrs[0])
|
||||
})
|
||||
|
||||
// eslint-disable-next-line
|
||||
// TODO: how to get the listener to emit an error?
|
||||
it.skip('error', (done) => {
|
||||
const listener = transport.createListener()
|
||||
listener.on('error', (err) => {
|
||||
expect(err).to.exist()
|
||||
listener.close(done)
|
||||
})
|
||||
})
|
||||
|
||||
it('close', (done) => {
|
||||
const finish = plan(2, done)
|
||||
const listener = transport.createListener()
|
||||
listener.on('close', finish)
|
||||
|
||||
listener.listen(addrs[0], () => {
|
||||
listener.close(finish)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function plan (n, done) {
|
||||
let i = 0
|
||||
return (err) => {
|
||||
if (err) return done(err)
|
||||
i++
|
||||
|
||||
if (i === n) done()
|
||||
}
|
||||
}
|
2
test/adapter/index.js
Normal file
2
test/adapter/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
require('./compliance.node')
|
||||
require('./node')
|
@ -14,14 +14,14 @@ const WS = require('../../src/adapter')
|
||||
|
||||
require('./compliance.node')
|
||||
|
||||
describe('instantiate the transport', () => {
|
||||
describe('adapter instantiate the transport', () => {
|
||||
it('create', () => {
|
||||
const ws = new WS()
|
||||
expect(ws).to.exist()
|
||||
})
|
||||
})
|
||||
|
||||
describe('listen', () => {
|
||||
describe('adapter listen', () => {
|
||||
describe('ip4', () => {
|
||||
let ws
|
||||
const ma = multiaddr('/ip4/127.0.0.1/tcp/9090/ws')
|
||||
@ -201,7 +201,7 @@ describe('listen', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe('dial', () => {
|
||||
describe('adapter dial', () => {
|
||||
describe('ip4', () => {
|
||||
let ws
|
||||
let listener
|
||||
@ -305,7 +305,7 @@ describe('dial', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe('filter addrs', () => {
|
||||
describe('adapter filter addrs', () => {
|
||||
let ws
|
||||
|
||||
before(() => {
|
||||
@ -440,7 +440,7 @@ describe('filter addrs', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe('valid Connection', () => {
|
||||
describe('adapter valid Connection', () => {
|
||||
const ma = multiaddr('/ip4/127.0.0.1/tcp/9092/ws')
|
||||
|
||||
it('get observed addrs', (done) => {
|
||||
@ -554,10 +554,3 @@ describe('valid Connection', () => {
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
describe.skip('turbolence', () => {
|
||||
it('dialer - emits error on the other end is terminated abruptly', (done) => {
|
||||
})
|
||||
it('listener - emits error on the other end is terminated abruptly', (done) => {
|
||||
})
|
||||
})
|
||||
|
225
test/node.js
225
test/node.js
@ -7,12 +7,13 @@ const dirtyChai = require('dirty-chai')
|
||||
const expect = chai.expect
|
||||
chai.use(dirtyChai)
|
||||
const multiaddr = require('multiaddr')
|
||||
const pull = require('pull-stream')
|
||||
const goodbye = require('pull-goodbye')
|
||||
const goodbye = require('it-goodbye')
|
||||
const { collect, consume } = require('streaming-iterables')
|
||||
const pipe = require('it-pipe')
|
||||
|
||||
const WS = require('../src')
|
||||
|
||||
require('./compliance.node')
|
||||
// require('./compliance.node')
|
||||
|
||||
describe('instantiate the transport', () => {
|
||||
it('create', () => {
|
||||
@ -180,49 +181,31 @@ describe('dial', () => {
|
||||
let listener
|
||||
const ma = multiaddr('/ip4/127.0.0.1/tcp/9091/ws')
|
||||
|
||||
beforeEach((done) => {
|
||||
beforeEach(() => {
|
||||
ws = new WS()
|
||||
listener = ws.createListener((conn) => {
|
||||
pull(conn, conn)
|
||||
})
|
||||
listener.listen(ma, done)
|
||||
listener = ws.createListener(conn => pipe(conn, conn))
|
||||
return listener.listen(ma)
|
||||
})
|
||||
|
||||
afterEach((done) => {
|
||||
listener.close(done)
|
||||
afterEach(() => listener.close())
|
||||
|
||||
it('dial', async () => {
|
||||
const conn = await ws.dial(ma)
|
||||
const s = goodbye({ source: ['hey'], sink: collect })
|
||||
|
||||
const result = await pipe(s, conn, s)
|
||||
|
||||
expect(result).to.be.eql(['hey'])
|
||||
})
|
||||
|
||||
it('dial', (done) => {
|
||||
const conn = ws.dial(ma)
|
||||
|
||||
const s = goodbye({
|
||||
source: pull.values(['hey']),
|
||||
sink: pull.collect((err, result) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
expect(result).to.be.eql(['hey'])
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
pull(s, conn, s)
|
||||
})
|
||||
|
||||
it('dial with IPFS Id', (done) => {
|
||||
it('dial with IPFS Id', async () => {
|
||||
const ma = multiaddr('/ip4/127.0.0.1/tcp/9091/ws/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw')
|
||||
const conn = ws.dial(ma)
|
||||
const conn = await ws.dial(ma)
|
||||
const s = goodbye({ source: ['hey'], sink: collect })
|
||||
|
||||
const s = goodbye({
|
||||
source: pull.values(['hey']),
|
||||
sink: pull.collect((err, result) => {
|
||||
expect(err).to.not.exist()
|
||||
const result = await pipe(s, conn, s)
|
||||
|
||||
expect(result).to.be.eql(['hey'])
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
pull(s, conn, s)
|
||||
expect(result).to.be.eql(['hey'])
|
||||
})
|
||||
})
|
||||
|
||||
@ -231,49 +214,34 @@ describe('dial', () => {
|
||||
let listener
|
||||
const ma = multiaddr('/ip6/::1/tcp/9091')
|
||||
|
||||
beforeEach((done) => {
|
||||
beforeEach(() => {
|
||||
ws = new WS()
|
||||
listener = ws.createListener((conn) => {
|
||||
pull(conn, conn)
|
||||
})
|
||||
listener.listen(ma, done)
|
||||
listener = ws.createListener(conn => pipe(conn, conn))
|
||||
return listener.listen(ma)
|
||||
})
|
||||
|
||||
afterEach((done) => {
|
||||
listener.close(done)
|
||||
afterEach(() => listener.close())
|
||||
|
||||
it('dial', async () => {
|
||||
const conn = await ws.dial(ma)
|
||||
const s = goodbye({ source: ['hey'], sink: collect })
|
||||
|
||||
const result = await pipe(s, conn, s)
|
||||
|
||||
expect(result).to.be.eql(['hey'])
|
||||
})
|
||||
|
||||
it('dial', (done) => {
|
||||
const conn = ws.dial(ma)
|
||||
|
||||
const s = goodbye({
|
||||
source: pull.values(['hey']),
|
||||
sink: pull.collect((err, result) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
expect(result).to.be.eql(['hey'])
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
pull(s, conn, s)
|
||||
})
|
||||
|
||||
it('dial with IPFS Id', (done) => {
|
||||
it('dial with IPFS Id', async () => {
|
||||
const ma = multiaddr('/ip6/::1/tcp/9091/ws/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw')
|
||||
const conn = ws.dial(ma)
|
||||
const conn = await ws.dial(ma)
|
||||
|
||||
const s = goodbye({
|
||||
source: pull.values(['hey']),
|
||||
sink: pull.collect((err, result) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
expect(result).to.be.eql(['hey'])
|
||||
done()
|
||||
})
|
||||
source: ['hey'],
|
||||
sink: collect
|
||||
})
|
||||
|
||||
pull(s, conn, s)
|
||||
const result = await pipe(s, conn, s)
|
||||
expect(result).to.be.eql(['hey'])
|
||||
})
|
||||
})
|
||||
})
|
||||
@ -416,121 +384,28 @@ describe('filter addrs', () => {
|
||||
describe('valid Connection', () => {
|
||||
const ma = multiaddr('/ip4/127.0.0.1/tcp/9092/ws')
|
||||
|
||||
it('get observed addrs', (done) => {
|
||||
it('get observed addrs', async () => {
|
||||
let dialerObsAddrs
|
||||
let listenerObsAddrs
|
||||
|
||||
const ws = new WS()
|
||||
|
||||
const listener = ws.createListener((conn) => {
|
||||
const listener = ws.createListener(async conn => {
|
||||
expect(conn).to.exist()
|
||||
|
||||
conn.getObservedAddrs((err, addrs) => {
|
||||
expect(err).to.not.exist()
|
||||
dialerObsAddrs = addrs
|
||||
})
|
||||
|
||||
pull(conn, conn)
|
||||
dialerObsAddrs = await conn.getObservedAddrs()
|
||||
pipe(conn, conn)
|
||||
})
|
||||
|
||||
listener.listen(ma, () => {
|
||||
const conn = ws.dial(ma)
|
||||
await listener.listen(ma)
|
||||
const conn = await ws.dial(ma)
|
||||
|
||||
pull(
|
||||
pull.empty(),
|
||||
conn,
|
||||
pull.onEnd(onEnd)
|
||||
)
|
||||
await pipe([], conn, consume)
|
||||
|
||||
function onEnd () {
|
||||
conn.getObservedAddrs((err, addrs) => {
|
||||
expect(err).to.not.exist()
|
||||
listenerObsAddrs = addrs
|
||||
listenerObsAddrs = await conn.getObservedAddrs()
|
||||
|
||||
listener.close(onClose)
|
||||
await listener.close()
|
||||
|
||||
function onClose () {
|
||||
expect(listenerObsAddrs[0]).to.deep.equal(ma)
|
||||
expect(dialerObsAddrs.length).to.equal(0)
|
||||
done()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('get Peer Info', (done) => {
|
||||
const ws = new WS()
|
||||
|
||||
const listener = ws.createListener((conn) => {
|
||||
expect(conn).to.exist()
|
||||
|
||||
conn.getPeerInfo((err, peerInfo) => {
|
||||
expect(err).to.exist()
|
||||
})
|
||||
|
||||
pull(conn, conn)
|
||||
})
|
||||
|
||||
listener.listen(ma, () => {
|
||||
const conn = ws.dial(ma)
|
||||
|
||||
pull(
|
||||
pull.empty(),
|
||||
conn,
|
||||
pull.onEnd(onEnd)
|
||||
)
|
||||
|
||||
function onEnd () {
|
||||
conn.getPeerInfo((err, peerInfo) => {
|
||||
expect(err).to.exist()
|
||||
listener.close(done)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('set Peer Info', (done) => {
|
||||
const ws = new WS()
|
||||
|
||||
const listener = ws.createListener((conn) => {
|
||||
expect(conn).to.exist()
|
||||
conn.setPeerInfo('a')
|
||||
|
||||
conn.getPeerInfo((err, peerInfo) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(peerInfo).to.equal('a')
|
||||
})
|
||||
|
||||
pull(conn, conn)
|
||||
})
|
||||
|
||||
listener.listen(ma, onListen)
|
||||
|
||||
function onListen () {
|
||||
const conn = ws.dial(ma)
|
||||
conn.setPeerInfo('b')
|
||||
|
||||
pull(
|
||||
pull.empty(),
|
||||
conn,
|
||||
pull.onEnd(onEnd)
|
||||
)
|
||||
|
||||
function onEnd () {
|
||||
conn.getPeerInfo((err, peerInfo) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(peerInfo).to.equal('b')
|
||||
listener.close(done)
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
describe.skip('turbolence', () => {
|
||||
it('dialer - emits error on the other end is terminated abruptly', (done) => {
|
||||
})
|
||||
it('listener - emits error on the other end is terminated abruptly', (done) => {
|
||||
expect(listenerObsAddrs[0]).to.deep.equal(ma)
|
||||
expect(dialerObsAddrs.length).to.equal(0)
|
||||
})
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user