node-postgres/test/unit/utils-tests.js
2011-07-10 13:34:25 -05:00

243 lines
7.4 KiB
JavaScript

require(__dirname + '/test-helper');
var utils = require(__dirname + "/../../lib/utils");
var Pool = utils.Pool;
var defaults = require(__dirname + "/../../lib").defaults;
//this tests the monkey patching
//to ensure comptability with older
//versions of node
test("EventEmitter.once", function() {
//an event emitter
var stream = new MemoryStream();
var callCount = 0;
stream.once('single', function() {
callCount++;
});
stream.emit('single');
stream.emit('single');
assert.equal(callCount, 1);
});
test('an empty pool', function() {
test('with no creation method', function() {
var pool = new Pool(10);
var brian = {name:'brian'};
test('can set and get an item', function() {
pool.checkIn(brian);
var sync = pool.checkOut(assert.calls(function(err, item) {
assert.equal(brian, item)
assert.same(brian, item)
}))
assert.ok(sync, "should have fired sync")
})
test('checkout blocks until item checked back in', function() {
var called = false;
var sync = pool.checkOut(assert.calls(function(err, item) {
called = true;
assert.equal(brian, item)
assert.same(brian, item)
}))
assert.ok(sync === false, "Should not have fired sync")
assert.ok(called === false, "Should not have fired callback yet")
pool.checkIn(brian)
})
})
test('with a creation method', function() {
var customName = "first";
var callCount = 0;
var pool = new Pool(3, function() {
return {name: customName + (++callCount)};
});
test('creates if pool is not at max size', function() {
var sync = pool.checkOut(assert.calls(function(err, item) {
assert.equal(item.name, "first1");
}))
assert.ok(sync, "Should have generated item & called callback in sync")
})
test('creates again if item is checked out', function() {
var sync = pool.checkOut(assert.calls(function(err, item) {
assert.equal(item.name, "first2")
}))
assert.ok(sync, "Should have called in sync again")
})
var external = {name: 'boom'};
test('can add another item', function() {
pool.checkIn(external)
var sync = pool.checkOut(assert.calls(function(err, item) {
assert.equal(item.name, 'boom')
}))
assert.ok(sync, "Should have fired 3rd in sync")
})
test('after pool is full, create is not called again', function() {
var called = false;
var sync = pool.checkOut(assert.calls(function(err, item) {
called = true;
assert.equal(item.name, 'boom')
}))
assert.ok(sync === false, "should not be sync")
assert.ok(called === false, "should not have called callback")
pool.checkIn(external);
})
})
})
test('a pool with size of zero', function() {
var index = 0;
var pool = new Pool(0, function() {
return index++;
})
test('checkin does nothing', function() {
index = 0;
pool.checkIn(301813);
assert.equal(pool.checkOut(assert.calls(function(err, item) {
assert.equal(item, 0);
})));
})
test('always creates a new item', function() {
index = 0;
pool.checkOut(assert.calls(function(err, item) {
assert.equal(item, 0);
}))
pool.checkOut(assert.calls(function(err, item) {
assert.equal(item, 1);
}))
pool.checkOut(assert.calls(function(err, item) {
assert.equal(item, 2);
}))
})
})
test('normalizing connection info', function() {
test('with objects', function() {
test('empty object uses defaults', function() {
var input = {};
var output = utils.normalizeConnectionInfo(input);
assert.equal(output.user, defaults.user);
assert.equal(output.database, defaults.database);
assert.equal(output.port, defaults.port);
assert.equal(output.host, defaults.host);
assert.equal(output.password, defaults.password);
});
test('full object ignores defaults', function() {
var input = {
user: 'test1',
database: 'test2',
port: 'test3',
host: 'test4',
password: 'test5'
};
assert.equal(utils.normalizeConnectionInfo(input), input);
});
test('connection string', function() {
test('non-unix socket', function() {
test('uses defaults', function() {
var input = "";
var output = utils.normalizeConnectionInfo(input);
assert.equal(output.user, defaults.user);
assert.equal(output.database, defaults.database);
assert.equal(output.port, defaults.port);
assert.equal(output.host, defaults.host);
assert.equal(output.password, defaults.password);
});
test('ignores defaults if string contains them all', function() {
var input = "tcp://user1:pass2@host3:3333/databaseName";
var output = utils.normalizeConnectionInfo(input);
assert.equal(output.user, 'user1');
assert.equal(output.database, 'databaseName');
assert.equal(output.port, 3333);
assert.equal(output.host, 'host3');
assert.equal(output.password, 'pass2');
})
});
test('unix socket', function() {
test('uses defaults', function() {
var input = "/var/run/postgresql";
var output = utils.normalizeConnectionInfo(input);
assert.equal(output.user, process.env.USER);
assert.equal(output.host, '/var/run/postgresql');
assert.equal(output.database, process.env.USER);
assert.equal(output.port, 5432);
});
test('uses overridden defaults', function() {
defaults.host = "/var/run/postgresql";
defaults.user = "boom";
defaults.password = "yeah";
defaults.port = 1234;
var output = utils.normalizeConnectionInfo("asdf");
assert.equal(output.user, "boom");
assert.equal(output.password, "yeah");
assert.equal(output.port, 1234);
assert.equal(output.host, "/var/run/postgresql");
})
})
})
})
})
test('libpq connection string building', function() {
var checkForPart = function(array, part) {
assert.ok(array.indexOf(part) > -1, array.join(" ") + " did not contain " + part);
}
test('builds simple string', function() {
var config = {
user: 'brian',
password: 'xyz',
port: 888,
host: 'localhost',
database: 'bam'
}
utils.buildLibpqConnectionString(config, assert.calls(function(err, constring) {
assert.isNull(err)
var parts = constring.split(" ");
checkForPart(parts, "user='brian'")
checkForPart(parts, "password='xyz'")
checkForPart(parts, "port='888'")
checkForPart(parts, "hostaddr=127.0.0.1")
checkForPart(parts, "dbname='bam'")
}))
})
test('builds dns string', function() {
var config = {
user: 'brian',
password: 'asdf',
port: 5432,
host: 'localhost'
}
utils.buildLibpqConnectionString(config, assert.calls(function(err, constring) {
assert.isNull(err);
var parts = constring.split(" ");
checkForPart(parts, "user='brian'")
checkForPart(parts, "hostaddr=127.0.0.1")
}))
})
test('error when dns fails', function() {
var config = {
user: 'brian',
password: 'asf',
port: 5432,
host: 'asdlfkjasldfkksfd#!$!!!!..com'
}
utils.buildLibpqConnectionString(config, assert.calls(function(err, constring) {
assert.ok(err);
assert.isNull(constring)
}))
})
})