node-postgres/test/unit/utils-tests.js

117 lines
3.2 KiB
JavaScript

require(__dirname + '/test-helper');
var Pool = require(__dirname + "/../../lib/utils").Pool;
//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('when creating async new pool members', function() {
var count = 0;
var pool = new Pool(3, function() {
var item = {ref: {name: ++count}, checkedIn: false};
process.nextTick(function() {
pool.checkIn(item.ref)
})
return item;
})
test('one request recieves member', function() {
pool.checkOut(assert.calls(function(err, item) {
assert.equal(item.name, 1)
pool.checkOut(assert.calls(function(err, item) {
assert.equal(item.name, 2)
pool.checkOut(assert.calls(function(err, item) {
assert.equal(item.name, 3)
}))
}))
}))
})
})