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

Improving test coverage #6

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/lib/interactive.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ function Interactive () {
if (msgBuffer.toString().slice(0, -1) === 'na') {
return callback(new Error(protocol + ' not supported'))
}
// todo: function doesn't bark if response has not been recognized effectively locking socket
})
}
}
2 changes: 1 addition & 1 deletion src/lib/silent.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ function Silent () {
callback()
} else {
duplexStream.end()
callback(new Error('Received non supported MultiStream version' + msg))
callback(new Error('Received non supported MultiStream version ' + msg))
}
})
}
Expand Down
82 changes: 82 additions & 0 deletions tests/impl/interactive-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ var expect = Code.expect

var tcp = require('net')
var MultiStream = require('../../src/')
var PROTOCOLID = require('../../src/lib/protocol-id')
var lpm = require('length-prefixed-message')

experiment('Node.js Implementation: ', function () {
var msS
Expand All @@ -30,12 +32,40 @@ experiment('Node.js Implementation: ', function () {
done()
})

test('create a Select MultiStream via function', function (done) {
expect(MultiStream.Select.createSelect()).to.be.an.instanceof(MultiStream.Select)
done()
})

test('throw an error if Select function is misused', function (done) {
try {
MultiStream.Select()
} catch (e) {
expect(e.message).to.equal('Select must be called with new, or used with createSelect')
done()
}
})

test('create a Interactive MultiStream()', function (done) {
msI = new MultiStream.Interactive()
expect(msI).to.be.an.instanceof(MultiStream.Interactive)
done()
})

test('create a Interactive MultiStream() via utility function', function (done) {
expect(MultiStream.Interactive.createInteractive()).to.be.an.instanceof(MultiStream.Interactive)
done()
})

test('throw an error if Interactive function is misused', function (done) {
try {
MultiStream.Interactive()
} catch (e) {
expect(e.message).to.equal('MultiStream must be called with new, or used with createMultiStream')
done()
}
})

test('attach a duplex stream to Select MultiStream (tcp server)', function (done) {
tcp.createServer(function (socket) {
msS.handle(socket)
Expand Down Expand Up @@ -91,4 +121,56 @@ experiment('Node.js Implementation: ', function () {
})
})
})

test('Select closes connection for non supported protocol', function (done) {
var select = new MultiStream.Select()
tcp.createServer(function (socket) {
select.handle(socket)
socket.on('end', function () {
done()
})
}).listen(8011)

var socket = tcp.connect({port: 8011}, function tcpConnectionOpen () {
lpm.write(socket, PROTOCOLID + '\n')
lpm.write(socket, 'na\n')
})
})

test('Interactive responds with `na` for wrong protocol', function (done) {
var interactive = new MultiStream.Interactive()
var server = tcp.createServer(function (socket) {
interactive.handle(socket)
})
server.listen(8012)

var socket = tcp.connect({port: 8012}, function tcpConnectionOpen () {
lpm.write(socket, '/garbage/1.2.3\n')
})
socket.on('data', function (data) {
if (data.toString().indexOf('na\n') >= 0) {
done()
}
})
})

test('Interactive handles `na` handler response', function (done) {
var interactive = new MultiStream.Interactive()
tcp.createServer(function (socket) {
interactive.handle(socket, function () {
interactive.select('skipping')
interactive.select('whatever', function (err) {
expect(err.message).to.equal('whatever not supported')
done()
})
})
}).listen(8013)

var socket = tcp.connect({port: 8013}, function tcpConnectionOpen () {
lpm.write(socket, PROTOCOLID + '\n')
lpm.write(socket, 'nan\n')
lpm.write(socket, 'na\n')
})
})

})
61 changes: 61 additions & 0 deletions tests/impl/one-way-test.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
var Lab = require('lab')
var Code = require('code')
var lab = exports.lab = Lab.script()
var lpm = require('length-prefixed-message')
var PROTOCOLID = require('../../src/lib/protocol-id')

var experiment = lab.experiment
var test = lab.test
Expand Down Expand Up @@ -29,12 +31,40 @@ experiment('Node.js Implementation: ', function () {
done()
})

test('create a Broadcast MultiStream via utility function', function (done) {
expect(MultiStream.Broadcast.createBroadcast()).to.be.an.instanceof(MultiStream.Broadcast)
done()
})

test('throw an error if Broadcast function is misused', function (done) {
try {
MultiStream.Broadcast()
} catch (e) {
expect(e.message).to.equal('Broadcast must be called with new, or used with Broadcast')
done()
}
})

test('create a Silent MultiStream()', function (done) {
msS = new MultiStream.Silent()
expect(msS).to.be.an.instanceof(MultiStream.Silent)
done()
})

test('create a Silent MultiStream via utility function', function (done) {
expect(MultiStream.Silent.createSilent()).to.be.an.instanceof(MultiStream.Silent)
done()
})

test('throw an error if Silent function is misused', function (done) {
try {
MultiStream.Silent()
} catch (e) {
expect(e.message).to.equal('Silent must be called with new, or used with Silent')
done()
}
})

test('attach a stream to Broadcast MultiStream (tcp server)', function (done) {
tcp.createServer(function (socket) {
msB.handle(socket)
Expand Down Expand Up @@ -68,4 +98,35 @@ experiment('Node.js Implementation: ', function () {

})

test('closing socket for unsupported protocol', function (done) {
var acc = new MultiStream.Silent()
tcp.createServer(function (socket) {
acc.handle(socket, function (err) {
expect(err.message).to.equal('Received non supported MultiStream version /garbage/1.0.0')
done()
})
}).listen(8021)

var socket = tcp.connect({port: 8021}, function tcpConnectionOpen () {
lpm.write(socket, '/garbage/1.0.0\n')
})
})

test('closing socket for unsupported handler', function (done) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

where is the check to see if the socket is closed?

var acc = new MultiStream.Silent()
tcp.createServer(function (socket) {
acc.handle(socket, function () {
acc.addHandler('/none/1.2.3', function (err) {
expect(err.message).to.equal('Received non supported Protocol or Version: /none/1.0.0')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should not be up to the protocol handler each time there is an attempt to handshake a protocol that isn't itself. Several protocol handlers might be added to the same connection

done()
})
})
}).listen(8022)

var socket = tcp.connect({port: 8022}, function tcpConnectionOpen () {
lpm.write(socket, PROTOCOLID + '\n')
lpm.write(socket, '/none/1.0.0\n')
})
})

})