|
|
/* * portfinder-test.js: Tests for the `portfinder` module. * * (C) 2011, Charlie Robbins * */
var assert = require('assert'), exec = require('child_process').exec, net = require('net'), path = require('path'), async = require('async'), vows = require('vows'), portfinder = require('../lib/portfinder');
var servers = [], socketDir = path.join(__dirname, 'fixtures'), badDir = path.join(__dirname, 'bad-dir');
function createServers (callback) { var base = 0; async.whilst( function () { return base < 5 }, function (next) { var server = net.createServer(function () { }), name = base === 0 ? 'test.sock' : 'test' + base + '.sock'; server.listen(path.join(socketDir, name), next); base++; servers.push(server); }, callback); }
vows.describe('portfinder').addBatch({ "When using portfinder module": { "with 5 existing servers": { topic: function () { createServers(this.callback); }, "the getPort() method": { topic: function () { portfinder.getSocket({ path: path.join(socketDir, 'test.sock') }, this.callback); }, "should respond with the first free socket (test5.sock)": function (err, socket) { assert.isTrue(!err); assert.equal(socket, path.join(socketDir, 'test5.sock')); } } } } }).addBatch({ "When using portfinder module": { "with no existing servers": { "the getSocket() method": { "with a directory that doesnt exist": { topic: function () { var that = this; exec('rm -rf ' + badDir, function () { portfinder.getSocket({ path: path.join(badDir, 'test.sock') }, that.callback); }); }, "should respond with the first free socket (test.sock)": function (err, socket) { assert.isTrue(!err); assert.equal(socket, path.join(badDir, 'test.sock')); } }, "with a directory that exists": { topic: function () { portfinder.getSocket({ path: path.join(socketDir, 'exists.sock') }, this.callback); }, "should respond with the first free socket (exists.sock)": function (err, socket) { assert.isTrue(!err); assert.equal(socket, path.join(socketDir, 'exists.sock')); } } } } } }).addBatch({ "When the tests are over": { "necessary cleanup should take place": function () { exec('rm -rf ' + badDir + ' ' + path.join(socketDir, '*'), function () { }); } } }).export(module);
|