Skip to content
This repository was archived by the owner on Oct 19, 2022. It is now read-only.

Commit ce8992e

Browse files
test: Increase test coverage
Ported tests from #6
1 parent dee11cb commit ce8992e

File tree

3 files changed

+170
-40
lines changed

3 files changed

+170
-40
lines changed

src/lib/silent.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function Silent () {
2525
callback()
2626
} else {
2727
duplexStream.end()
28-
callback(new Error('Received non supported MultiStream version' + msg))
28+
callback(new Error(`Received non supported MultiStream version ${msg}`))
2929
}
3030
})
3131
}
@@ -36,8 +36,7 @@ function Silent () {
3636
if (msg === protocol) {
3737
return callback(null, self.duplexStream)
3838
} else {
39-
self.duplexStream.end()
40-
callback(new Error('Received non supported Protocol or Version: ' + msg))
39+
callback(new Error(`Received non supported Protocol or Version: ${msg}`))
4140
}
4241
})
4342
}

test/impl/interactive.spec.js

Lines changed: 117 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
var expect = require('chai').expect
55
var streamPair = require('stream-pair')
66
var MultiStream = require('../../src/')
7+
var lpm = require('length-prefixed-message')
8+
var PROTOCOLID = require('../../src/lib/protocol-id')
79

810
describe('Implmentation: interactive', function () {
911
var msS
@@ -18,57 +20,135 @@ describe('Implmentation: interactive', function () {
1820
listener = pair.other
1921
})
2022

21-
it('create a Select MultiStream', function () {
22-
msS = new MultiStream.Select()
23-
expect(msS).to.be.an.instanceof(MultiStream.Select)
24-
})
23+
describe('basics', () => {
24+
it('create a Select MultiStream', function () {
25+
msS = new MultiStream.Select()
26+
expect(msS).to.be.an.instanceof(MultiStream.Select)
27+
})
2528

26-
it('create a Interactive MultiStream()', function () {
27-
msI = new MultiStream.Interactive()
28-
expect(msI).to.be.an.instanceof(MultiStream.Interactive)
29-
})
29+
it('create a Select MultiStream via function', function () {
30+
expect(
31+
MultiStream.Select.createSelect()
32+
).to.be.an.instanceof(
33+
MultiStream.Select
34+
)
35+
})
3036

31-
it('attach a duplex stream to Select MultiStream', function () {
32-
msS.handle(listener)
33-
})
37+
it('throw an error if Select function is misused', function () {
38+
expect(
39+
() => MultiStream.Select()
40+
).to.throw(
41+
'Select must be called with new, or used with createSelect'
42+
)
43+
})
3444

35-
it('register two handlers', function () {
36-
msS.addHandler('/dogs/0.1.0', function (ds) {
37-
dogsDS = ds
45+
it('create a Interactive MultiStream()', function () {
46+
msI = new MultiStream.Interactive()
47+
expect(msI).to.be.an.instanceof(MultiStream.Interactive)
3848
})
3949

40-
msS.addHandler('/cats/1.2.11', function (ds) {})
41-
})
50+
it('attach a duplex stream to Select MultiStream', function () {
51+
msS.handle(listener)
52+
})
53+
54+
it('create a Interactive MultiStream() via utility function', function () {
55+
expect(
56+
MultiStream.Interactive.createInteractive()
57+
).to.be.an.instanceof(
58+
MultiStream.Interactive
59+
)
60+
})
61+
62+
it('throw an error if Interactive function is misused', function () {
63+
expect(
64+
() => MultiStream.Interactive()
65+
).to.throw(
66+
'MultiStream must be called with new, or used with createMultiStream'
67+
)
68+
})
69+
70+
it('register two handlers', function () {
71+
msS.addHandler('/dogs/0.1.0', function (ds) {
72+
dogsDS = ds
73+
})
74+
75+
msS.addHandler('/cats/1.2.11', function (ds) {})
76+
})
4277

43-
it('ls', function (done) {
44-
msI.handle(dialer, () => {
45-
msI.ls((err, ls) => {
46-
expect(err).to.not.exist
47-
ls = JSON.parse(ls)
48-
expect(ls[0]).to.equal('/dogs/0.1.0')
49-
expect(ls[1]).to.equal('/cats/1.2.11')
78+
it('ls', function (done) {
79+
msI.handle(dialer, () => {
80+
msI.ls((err, ls) => {
81+
expect(err).to.not.exist
82+
ls = JSON.parse(ls)
83+
expect(ls[0]).to.equal('/dogs/0.1.0')
84+
expect(ls[1]).to.equal('/cats/1.2.11')
85+
done()
86+
})
87+
})
88+
})
89+
90+
it('select one non existing protocol->handler', function (done) {
91+
msI.select('/mouse/1.1.0', function (err, ds) {
92+
expect(err).to.be.an.instanceof(Error)
5093
done()
5194
})
5295
})
53-
})
5496

55-
it('select one non existing protocol->handler', function (done) {
56-
msI.select('/mouse/1.1.0', function (err, ds) {
57-
expect(err).to.be.an.instanceof(Error)
58-
done()
97+
it('select one of the protocol->handler', function (done) {
98+
msI.select('/dogs/0.1.0', function (err, ds) {
99+
if (err) {
100+
return console.log(err)
101+
}
102+
ds.write('hey')
103+
dogsDS.on('data', function (data) {
104+
expect(data.toString()).to.equal('hey')
105+
done()
106+
})
107+
})
59108
})
60109
})
61110

62-
it('select one of the protocol->handler', function (done) {
63-
msI.select('/dogs/0.1.0', function (err, ds) {
64-
if (err) {
65-
return console.log(err)
66-
}
67-
ds.write('hey')
68-
dogsDS.on('data', function (data) {
69-
expect(data.toString()).to.equal('hey')
70-
done()
111+
describe('varying connections', () => {
112+
beforeEach(() => {
113+
const pair = streamPair.create()
114+
dialer = pair
115+
listener = pair.other
116+
})
117+
118+
it('Select closes connection for non supported protocol', function (done) {
119+
var select = new MultiStream.Select()
120+
select.handle(listener)
121+
listener.on('finish', done)
122+
123+
lpm.write(dialer, PROTOCOLID + '\n')
124+
lpm.write(dialer, 'na\n')
125+
})
126+
127+
it('Interactive responds with `na` for wrong protocol', function (done) {
128+
var interactive = new MultiStream.Interactive()
129+
interactive.handle(listener)
130+
131+
dialer.on('data', (chunk) => {
132+
if (chunk.toString().indexOf('na\n') > -1) {
133+
done()
134+
}
71135
})
136+
lpm.write(dialer, '/garbage/1.2.3\n')
137+
})
138+
139+
it('Interactive handles `na` handler response', function (done) {
140+
var interactive = new MultiStream.Interactive()
141+
interactive.handle(listener, () => {
142+
interactive.select('skipping')
143+
interactive.select('whatever', (err) => {
144+
expect(err.message).to.equal('whatever not supported')
145+
done()
146+
})
147+
})
148+
149+
lpm.write(dialer, PROTOCOLID + '\n')
150+
lpm.write(dialer, 'nan\n')
151+
lpm.write(dialer, 'na\n')
72152
})
73153
})
74154
})

test/impl/one-way.spec.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
var expect = require('chai').expect
55
var streamPair = require('stream-pair')
66
var MultiStream = require('../../src/')
7+
var lpm = require('length-prefixed-message')
78

89
describe('Implementation: one-way', function () {
910
var msB
@@ -27,6 +28,22 @@ describe('Implementation: one-way', function () {
2728
expect(msS).to.be.an.instanceof(MultiStream.Silent)
2829
})
2930

31+
it('create a Broadcast MultiStream via utility function', function () {
32+
expect(
33+
MultiStream.Broadcast.createBroadcast()
34+
).to.be.an.instanceof(
35+
MultiStream.Broadcast
36+
)
37+
})
38+
39+
it('throw an error if Broadcast function is misused', function () {
40+
expect(
41+
() => MultiStream.Broadcast()
42+
).to.throw(
43+
'Broadcast must be called with new, or used with Broadcast'
44+
)
45+
})
46+
3047
it('attach a stream to Broadcast MultiStream (tcp server)', function () {
3148
msB.handle(listener)
3249
})
@@ -35,6 +52,22 @@ describe('Implementation: one-way', function () {
3552
msS.handle(dialer, done)
3653
})
3754

55+
it('create a Silent MultiStream via utility function', function () {
56+
expect(
57+
MultiStream.Silent.createSilent()
58+
).to.be.an.instanceof(
59+
MultiStream.Silent
60+
)
61+
})
62+
63+
it('throw an error if Silent function is misused', function () {
64+
expect(
65+
() => MultiStream.Silent()
66+
).to.throw(
67+
'Silent must be called with new, or used with Silent'
68+
)
69+
})
70+
3871
it('register a handler', function (done) {
3972
msS.addHandler('/bird/3.2.1', function (err, ds) {
4073
expect(err).to.equal(null)
@@ -48,4 +81,22 @@ describe('Implementation: one-way', function () {
4881
ds.write('hey, how is it going?')
4982
})
5083
})
84+
85+
it('closing socket for unsupported protocol', function (done) {
86+
const acc = new MultiStream.Silent()
87+
const pair = streamPair.create()
88+
dialer = pair
89+
listener = pair.other
90+
91+
acc.handle(listener, (err) => {
92+
expect(
93+
err.message
94+
).to.equal(
95+
'Received non supported MultiStream version /garbage/1.0.0'
96+
)
97+
done()
98+
})
99+
100+
lpm.write(dialer, '/garbage/1.0.0\n')
101+
})
51102
})

0 commit comments

Comments
 (0)