Test runner for distributed systems based on mininet and tape
npm install tapenet
var test = require('tapenet')
var h1 = test.createHost()
var h2 = test.createHost()
var s1 = test.createSwitch()
h1.link(s1)
h2.link(s1)
test('start a server and connect to it', function (t) {
t.run(h1, function () {
// this is run inside a mininet container on h1
var net = require('net')
h2.on('listening', function (ip) {
var socket = net.connect(10000, ip)
var bufs = []
socket.on('data', data => bufs.push(data))
socket.on('end', function () {
t.same(Buffer.concat(bufs).toString(), 'hello from h2')
t.end()
})
})
})
t.run(h2, function () {
// this is run inside a mininet container on h2
var net = require('net')
var server = net.createServer(function (socket) {
t.pass('got connection')
socket.write('hello from h2')
socket.end()
})
server.listen(10000, function () {
h2.emit('listening', global.ip)
})
})
})
Similar to tape, you can either run a test by simply running a test file with node or you can use the cli runner
npm install -g tapenet
tapenet *.net.js
Same as mininet.createHost()
Same as mininet.createSwitch()
The underlying mininet instance.
Start a test. name
is a description of your test and runner
should be a function.
When the test is run, runner
is ran with the argument t
which is a tape test instance.
In addition to all the other tape test methods, t.run
will run a source function inside a mininet host.
The host will have access to the test object through the t
variable, and a set of shared event emitters h1
, h2
, ...
If you emit an event on any of those event emitters it will be emitted across all mininet hosts currently running.
tapenet comes bundles with some useful topologies.
// same as h1.link(s1), h2.link(s1)
var {h1, h2} = test.topologies.basic()
For more see topologies/
MIT