fix: listener params and adapter tests

License: MIT
Signed-off-by: Alan Shaw <alan.shaw@protocol.ai>
This commit is contained in:
Alan Shaw 2019-04-02 15:18:30 +01:00
parent 616fac9d21
commit 1b9c591da6
No known key found for this signature in database
GPG Key ID: AFC4442246B75B6F
9 changed files with 280 additions and 190 deletions

View File

@ -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>",

View File

@ -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)

View File

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

View 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()
})
)
})
})
}

View 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)
})
}

View 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
View File

@ -0,0 +1,2 @@
require('./compliance.node')
require('./node')

View File

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

View File

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