const tap = require("tap");
|
const createPool = require("../").createPool;
|
const utils = require("./utils");
|
const ResourceFactory = utils.ResourceFactory;
|
|
class ResourceFactoryDelayCreateEachSecond {
|
constructor() {
|
this.callCreate = 0;
|
this.created = 0;
|
this.destroyed = 0;
|
this.bin = [];
|
}
|
|
create() {
|
const that = this;
|
console.log(`** create call ${that.callCreate}`);
|
return new Promise(resolve => {
|
if (that.callCreate % 2 === 0) {
|
setTimeout(function() {
|
console.log(`** created ${that.created}`);
|
resolve({ id: that.created++ });
|
}, 10);
|
} else {
|
console.log(`** created ${that.created}`);
|
resolve({ id: that.created++ });
|
}
|
that.callCreate++;
|
});
|
}
|
|
validate() {
|
return Promise.resolve(true);
|
}
|
|
destroy(resource) {
|
console.log(`** destroying ${resource.id}`);
|
this.destroyed++;
|
this.bin.push(resource);
|
return Promise.resolve();
|
}
|
}
|
|
tap.test("tests drain clear with autostart and min > 0", function(t) {
|
const count = 5;
|
let acquired = 0;
|
|
const resourceFactory = new ResourceFactoryDelayCreateEachSecond();
|
const config = {
|
max: 10,
|
min: 1,
|
evictionRunIntervalMillis: 500,
|
idleTimeoutMillis: 30000,
|
testOnBorrow: true,
|
autostart: true
|
};
|
const pool = createPool(resourceFactory, config);
|
|
return pool
|
.drain()
|
.then(function() {
|
console.log("** pool drained");
|
return pool.clear();
|
})
|
.then(function() {
|
console.log("** pool cleared");
|
t.equal(resourceFactory.created, resourceFactory.destroyed);
|
})
|
.then(function() {
|
t.end();
|
});
|
});
|