Skip to content
This repository was archived by the owner on Mar 11, 2020. It is now read-only.

Commit d50224d

Browse files
dignifiedquiredaviddias
authored andcommitted
feat(tests): add dial and listen tests
1 parent 1bd20d9 commit d50224d

10 files changed

+302
-56
lines changed

.gitignore

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1+
**/node_modules/
2+
**/*.log
3+
test/repo-tests*
4+
15
# Logs
26
logs
37
*.log
48

9+
coverage
10+
511
# Runtime data
612
pids
713
*.pid
@@ -19,9 +25,11 @@ coverage
1925
# node-waf configuration
2026
.lock-wscript
2127

22-
# Compiled binary addons (http://nodejs.org/api/addons.html)
23-
build/Release
28+
build
2429

2530
# Dependency directory
2631
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
2732
node_modules
33+
34+
lib
35+
dist

.npmignore

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
**/node_modules/
2+
**/*.log
3+
test/repo-tests*
4+
5+
# Logs
6+
logs
7+
*.log
8+
9+
coverage
10+
11+
# Runtime data
12+
pids
13+
*.pid
14+
*.seed
15+
16+
# Directory for instrumented libs generated by jscoverage/JSCover
17+
lib-cov
18+
19+
# Coverage directory used by tools like istanbul
20+
coverage
21+
22+
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
23+
.grunt
24+
25+
# node-waf configuration
26+
.lock-wscript
27+
28+
build
29+
30+
# Dependency directory
31+
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
32+
node_modules
33+
34+
test

.travis.yml

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
sudo: false
2+
language: node_js
3+
node_js:
4+
- "stable"
5+
6+
before_install:
7+
- npm install -g npm
8+
9+
script:
10+
- npm run lint

README.md

+23-15
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,29 @@ Include this badge in your readme if you make a module that is compatible with t
3232

3333
## Node.js
3434

35-
```
36-
var tape = require('tape')
37-
var tests = require('interface-transport/tests')
38-
var YourTransportHandler = require('../src')
39-
40-
var common = {
41-
setup: function (t, cb) {
42-
cb(null, YourTransportHandler)
43-
},
44-
teardown: function (t, cb) {
45-
cb()
46-
}
47-
}
48-
49-
tests(tape, common)
35+
```js
36+
/* eslint-env mocha */
37+
'use strict'
38+
39+
const tests = require('interface-transport')
40+
const multiaddr = require('multiaddr')
41+
const YourTransport = require('../src')
42+
43+
describe('compliance', () => {
44+
tests({
45+
setup (cb) {
46+
let t = new YourTransport()
47+
const addrs = [
48+
multiaddr('valid-multiaddr-for-your-transport'),
49+
multiaddr('valid-multiaddr2-for-your-transport')
50+
]
51+
cb(null, t, addrs)
52+
},
53+
teardown (cb) {
54+
cb()
55+
}
56+
})
57+
})
5058
```
5159

5260
## Go

package.json

+21-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,21 @@
66
"type": "git",
77
"url": "https://github.com/diasdavid/interface-transport.git"
88
},
9+
"main": "src/index.js",
10+
"jsnext:main": "src/index.js",
11+
"scripts": {
12+
"lint": "aegir-lint",
13+
"build": "aegir-build",
14+
"release": "aegir-release",
15+
"release-minor": "aegir-release --type minor",
16+
"release-major": "aegir-release --type major",
17+
"coverage": "exit(0)",
18+
"coverage-publish": "exit(0)"
19+
},
20+
"pre-commit": [
21+
"lint",
22+
"test"
23+
],
924
"keywords": [
1025
"IPFS"
1126
],
@@ -15,9 +30,13 @@
1530
"url": "https://github.com/diasdavid/interface-transport/issues"
1631
},
1732
"homepage": "https://github.com/diasdavid/interface-transport",
18-
"devDependencies": {},
33+
"devDependencies": {
34+
"aegir": "^6.0.1"
35+
},
1936
"dependencies": {
37+
"chai": "^3.5.0",
2038
"multiaddr": "^2.0.2",
21-
"timed-tape": "^0.1.1"
39+
"pull-goodbye": "0.0.1",
40+
"pull-stream": "^3.4.4"
2241
}
2342
}

src/dial-test.js

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/* eslint-env mocha */
2+
'use strict'
3+
4+
const expect = require('chai').expect
5+
const pull = require('pull-stream')
6+
const goodbye = require('pull-goodbye')
7+
8+
module.exports = (common) => {
9+
describe('dial', () => {
10+
let addrs
11+
let transport
12+
let listener
13+
14+
before((done) => {
15+
common.setup((err, _transport, _addrs) => {
16+
if (err) return done(err)
17+
transport = _transport
18+
addrs = _addrs
19+
done()
20+
})
21+
})
22+
23+
after((done) => {
24+
common.teardown(done)
25+
})
26+
27+
beforeEach((done) => {
28+
listener = transport.createListener((conn) => {
29+
pull(
30+
conn,
31+
pull.map((x) => {
32+
if (x.toString() !== 'GOODBYE') {
33+
return new Buffer(x.toString() + '!')
34+
}
35+
return x
36+
}),
37+
conn
38+
)
39+
})
40+
listener.listen(addrs[0], done)
41+
})
42+
43+
afterEach((done) => {
44+
listener.close(done)
45+
})
46+
47+
it('simple', (done) => {
48+
const s = goodbye({
49+
source: pull.values([new Buffer('hey')]),
50+
sink: pull.collect((err, values) => {
51+
expect(err).to.not.exist
52+
expect(
53+
values
54+
).to.be.eql(
55+
[new Buffer('hey!')]
56+
)
57+
done()
58+
})
59+
})
60+
61+
pull(s, transport.dial(addrs[0]), s)
62+
})
63+
64+
it('to non existent listener', (done) => {
65+
pull(
66+
transport.dial(addrs[1]),
67+
pull.onEnd((err) => {
68+
expect(err).to.exist
69+
done()
70+
})
71+
)
72+
})
73+
})
74+
}

src/index.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/* eslint-env mocha */
2+
'use strict'
3+
4+
const dial = require('./dial-test')
5+
const listen = require('./listen-test')
6+
7+
module.exports = (common) => {
8+
describe('interface-transport', () => {
9+
dial(common)
10+
listen(common)
11+
})
12+
}

src/listen-test.js

+118
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
/* eslint max-nested-callbacks: ["error", 8] */
2+
/* eslint-env mocha */
3+
'use strict'
4+
5+
const expect = require('chai').expect
6+
const pull = require('pull-stream')
7+
8+
module.exports = (common) => {
9+
describe('listen', () => {
10+
let addrs
11+
let transport
12+
13+
before((done) => {
14+
common.setup((err, _transport, _addrs) => {
15+
if (err) return done(err)
16+
transport = _transport
17+
addrs = _addrs
18+
done()
19+
})
20+
})
21+
22+
after((done) => {
23+
common.teardown(done)
24+
})
25+
26+
it('simple', (done) => {
27+
const listener = transport.createListener((conn) => {})
28+
listener.listen(addrs[0], () => {
29+
listener.close(done)
30+
})
31+
})
32+
33+
it('close listener with connections, through timeout', (done) => {
34+
const finish = plan(3, done)
35+
const listener = transport.createListener((conn) => {
36+
pull(conn, conn)
37+
})
38+
39+
listener.listen(addrs[0], () => {
40+
const socket1 = transport.dial(addrs[0], () => {
41+
listener.close(finish)
42+
})
43+
44+
pull(
45+
transport.dial(addrs[0]),
46+
pull.onEnd(() => {
47+
finish()
48+
})
49+
)
50+
51+
pull(
52+
pull.values([Buffer('Some data that is never handled')]),
53+
socket1,
54+
pull.onEnd(() => {
55+
finish()
56+
})
57+
)
58+
})
59+
})
60+
61+
describe('events', () => {
62+
// TODO: figure out why it fails in the full test suite
63+
it.skip('connection', (done) => {
64+
const finish = plan(2, done)
65+
66+
const listener = transport.createListener()
67+
68+
listener.on('connection', (conn) => {
69+
expect(conn).to.exist
70+
finish()
71+
})
72+
73+
listener.listen(addrs[0], () => {
74+
transport.dial(addrs[0], () => {
75+
listener.close(finish)
76+
})
77+
})
78+
})
79+
80+
it('listening', (done) => {
81+
const listener = transport.createListener()
82+
listener.on('listening', () => {
83+
listener.close(done)
84+
})
85+
listener.listen(addrs[0])
86+
})
87+
88+
// TODO: how to get the listener to emit an error?
89+
it.skip('error', (done) => {
90+
const listener = transport.createListener()
91+
listener.on('error', (err) => {
92+
expect(err).to.exist
93+
listener.close(done)
94+
})
95+
})
96+
97+
it('close', (done) => {
98+
const finish = plan(2, done)
99+
const listener = transport.createListener()
100+
listener.on('close', finish)
101+
102+
listener.listen(addrs[0], () => {
103+
listener.close(finish)
104+
})
105+
})
106+
})
107+
})
108+
}
109+
110+
function plan (n, done) {
111+
let i = 0
112+
return (err) => {
113+
if (err) return done(err)
114+
i++
115+
116+
if (i === n) done()
117+
}
118+
}

tests/base-test.js

-31
This file was deleted.

0 commit comments

Comments
 (0)