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
9 changed files with 280 additions and 190 deletions

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