| /* |
| * 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); |