117 lines
3.2 KiB
JavaScript
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)
|
|
}))
|
|
}))
|
|
}))
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|