mirror of
https://github.com/fluencelabs/js-libp2p-interfaces
synced 2025-03-31 07:01:17 +00:00
feat(tests): add dial and listen tests
This commit is contained in:
parent
1bd20d94d9
commit
d50224dc5d
12
.gitignore
vendored
12
.gitignore
vendored
@ -1,7 +1,13 @@
|
|||||||
|
**/node_modules/
|
||||||
|
**/*.log
|
||||||
|
test/repo-tests*
|
||||||
|
|
||||||
# Logs
|
# Logs
|
||||||
logs
|
logs
|
||||||
*.log
|
*.log
|
||||||
|
|
||||||
|
coverage
|
||||||
|
|
||||||
# Runtime data
|
# Runtime data
|
||||||
pids
|
pids
|
||||||
*.pid
|
*.pid
|
||||||
@ -19,9 +25,11 @@ coverage
|
|||||||
# node-waf configuration
|
# node-waf configuration
|
||||||
.lock-wscript
|
.lock-wscript
|
||||||
|
|
||||||
# Compiled binary addons (http://nodejs.org/api/addons.html)
|
build
|
||||||
build/Release
|
|
||||||
|
|
||||||
# Dependency directory
|
# Dependency directory
|
||||||
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
|
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
|
||||||
node_modules
|
node_modules
|
||||||
|
|
||||||
|
lib
|
||||||
|
dist
|
||||||
|
34
.npmignore
Normal file
34
.npmignore
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
**/node_modules/
|
||||||
|
**/*.log
|
||||||
|
test/repo-tests*
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
|
||||||
|
coverage
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
|
||||||
|
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
build
|
||||||
|
|
||||||
|
# Dependency directory
|
||||||
|
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
|
||||||
|
node_modules
|
||||||
|
|
||||||
|
test
|
10
.travis.yml
Normal file
10
.travis.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
sudo: false
|
||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- "stable"
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- npm install -g npm
|
||||||
|
|
||||||
|
script:
|
||||||
|
- npm run lint
|
34
README.md
34
README.md
@ -32,21 +32,29 @@ Include this badge in your readme if you make a module that is compatible with t
|
|||||||
|
|
||||||
## Node.js
|
## Node.js
|
||||||
|
|
||||||
```
|
```js
|
||||||
var tape = require('tape')
|
/* eslint-env mocha */
|
||||||
var tests = require('interface-transport/tests')
|
'use strict'
|
||||||
var YourTransportHandler = require('../src')
|
|
||||||
|
|
||||||
var common = {
|
const tests = require('interface-transport')
|
||||||
setup: function (t, cb) {
|
const multiaddr = require('multiaddr')
|
||||||
cb(null, YourTransportHandler)
|
const YourTransport = require('../src')
|
||||||
},
|
|
||||||
teardown: function (t, cb) {
|
|
||||||
cb()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tests(tape, common)
|
describe('compliance', () => {
|
||||||
|
tests({
|
||||||
|
setup (cb) {
|
||||||
|
let t = new YourTransport()
|
||||||
|
const addrs = [
|
||||||
|
multiaddr('valid-multiaddr-for-your-transport'),
|
||||||
|
multiaddr('valid-multiaddr2-for-your-transport')
|
||||||
|
]
|
||||||
|
cb(null, t, addrs)
|
||||||
|
},
|
||||||
|
teardown (cb) {
|
||||||
|
cb()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
## Go
|
## Go
|
||||||
|
23
package.json
23
package.json
@ -6,6 +6,21 @@
|
|||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/diasdavid/interface-transport.git"
|
"url": "https://github.com/diasdavid/interface-transport.git"
|
||||||
},
|
},
|
||||||
|
"main": "src/index.js",
|
||||||
|
"jsnext:main": "src/index.js",
|
||||||
|
"scripts": {
|
||||||
|
"lint": "aegir-lint",
|
||||||
|
"build": "aegir-build",
|
||||||
|
"release": "aegir-release",
|
||||||
|
"release-minor": "aegir-release --type minor",
|
||||||
|
"release-major": "aegir-release --type major",
|
||||||
|
"coverage": "exit(0)",
|
||||||
|
"coverage-publish": "exit(0)"
|
||||||
|
},
|
||||||
|
"pre-commit": [
|
||||||
|
"lint",
|
||||||
|
"test"
|
||||||
|
],
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"IPFS"
|
"IPFS"
|
||||||
],
|
],
|
||||||
@ -15,9 +30,13 @@
|
|||||||
"url": "https://github.com/diasdavid/interface-transport/issues"
|
"url": "https://github.com/diasdavid/interface-transport/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/diasdavid/interface-transport",
|
"homepage": "https://github.com/diasdavid/interface-transport",
|
||||||
"devDependencies": {},
|
"devDependencies": {
|
||||||
|
"aegir": "^6.0.1"
|
||||||
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"chai": "^3.5.0",
|
||||||
"multiaddr": "^2.0.2",
|
"multiaddr": "^2.0.2",
|
||||||
"timed-tape": "^0.1.1"
|
"pull-goodbye": "0.0.1",
|
||||||
|
"pull-stream": "^3.4.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
74
src/dial-test.js
Normal file
74
src/dial-test.js
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/* eslint-env mocha */
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
const expect = require('chai').expect
|
||||||
|
const pull = require('pull-stream')
|
||||||
|
const goodbye = require('pull-goodbye')
|
||||||
|
|
||||||
|
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,
|
||||||
|
pull.map((x) => {
|
||||||
|
if (x.toString() !== 'GOODBYE') {
|
||||||
|
return new Buffer(x.toString() + '!')
|
||||||
|
}
|
||||||
|
return x
|
||||||
|
}),
|
||||||
|
conn
|
||||||
|
)
|
||||||
|
})
|
||||||
|
listener.listen(addrs[0], done)
|
||||||
|
})
|
||||||
|
|
||||||
|
afterEach((done) => {
|
||||||
|
listener.close(done)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('simple', (done) => {
|
||||||
|
const s = goodbye({
|
||||||
|
source: pull.values([new Buffer('hey')]),
|
||||||
|
sink: pull.collect((err, values) => {
|
||||||
|
expect(err).to.not.exist
|
||||||
|
expect(
|
||||||
|
values
|
||||||
|
).to.be.eql(
|
||||||
|
[new Buffer('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
src/index.js
Normal file
12
src/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)
|
||||||
|
})
|
||||||
|
}
|
118
src/listen-test.js
Normal file
118
src/listen-test.js
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
/* eslint max-nested-callbacks: ["error", 8] */
|
||||||
|
/* eslint-env mocha */
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
const expect = require('chai').expect
|
||||||
|
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('Some data that is never handled')]),
|
||||||
|
socket1,
|
||||||
|
pull.onEnd(() => {
|
||||||
|
finish()
|
||||||
|
})
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('events', () => {
|
||||||
|
// 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])
|
||||||
|
})
|
||||||
|
|
||||||
|
// 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()
|
||||||
|
}
|
||||||
|
}
|
@ -1,31 +0,0 @@
|
|||||||
var multiaddr = require('multiaddr')
|
|
||||||
|
|
||||||
module.exports.all = function (test, common) {
|
|
||||||
test('a test', function (t) {
|
|
||||||
common.setup(test, function (err, transport) {
|
|
||||||
t.plan(5)
|
|
||||||
t.ifError(err)
|
|
||||||
|
|
||||||
var maddr = multiaddr('/ip4/127.0.0.1/tcp/9050')
|
|
||||||
|
|
||||||
var listener = transport.createListener(function (stream) {
|
|
||||||
t.pass('received incoming connection')
|
|
||||||
stream.end()
|
|
||||||
listener.close(function () {
|
|
||||||
t.pass('listener closed successfully')
|
|
||||||
t.end()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
listener.listen(maddr.nodeAddress().port, function () {
|
|
||||||
t.pass('started listening')
|
|
||||||
var stream = transport.dial(maddr, {
|
|
||||||
ready: function () {
|
|
||||||
t.pass('dialed successfuly')
|
|
||||||
stream.end()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
var timed = require('timed-tape')
|
|
||||||
|
|
||||||
module.exports = function (test, common) {
|
|
||||||
test = timed(test)
|
|
||||||
require('./base-test.js').all(test, common)
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user