Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Reduce dependency on Bluebird #49

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 55 additions & 45 deletions tests.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
'use strict';

const Promise = require('bluebird');
const { promisify } = require('util');
const expect = require('expect.js');
const Pool = require('./').Pool;
const TimeoutError = require('./').TimeoutError;
const expect = require('expect.js');
const Bluebird = require('bluebird');

const setTimeoutAsync = promisify(setTimeout);
const delay = delayTime => {
return async (...args) => {
await setTimeoutAsync(delayTime);
return Promise.resolve(...args);
};
};

describe('Tarn', () => {
let pool = null;
Expand Down Expand Up @@ -422,7 +431,7 @@ describe('Tarn', () => {

pool = new Pool({
create() {
return Promise.resolve({ a: createCalled++ }).delay(50);
return Promise.resolve({ a: createCalled++ }).then(delay(50));
},
destroy() {
++destroyCalled;
Expand Down Expand Up @@ -664,7 +673,7 @@ describe('Tarn', () => {
expect(pool.numPendingAcquires()).to.equal(0);
expect(pool.numPendingCreates()).to.equal(1);

return Promise.delay(100).then(() => {
return delay(100)().then(() => {
expect(createCalled).to.equal(1);
expect(destroyCalled).to.equal(0);

Expand Down Expand Up @@ -749,7 +758,7 @@ describe('Tarn', () => {
callback(null, { a: createCalled++, n: 0 });
},
validate(resource) {
return Promise.delay(10).then(() => true);
return delay(10)().then(() => true);
},
destroy(resource) {},
min: 0,
Expand All @@ -774,7 +783,9 @@ describe('Tarn', () => {
},
validate(resource) {
validated = resource;
return Promise.delay(10000).then(() => true);
return delay(10000)().then(() => {
return true;
});
},
destroy(resource) {
destroyed = resource;
Expand All @@ -790,9 +801,7 @@ describe('Tarn', () => {
// a moment before checking the expected results.
return pool
.acquire()
.promise.catch(err => {
return Promise.delay(1);
})
.promise.catch(delay(1))
.then(() => {
expect(destroyCalled).to.be(1);
expect(createCalled).to.be(1);
Expand All @@ -812,7 +821,7 @@ describe('Tarn', () => {
},
validate(resource) {
validated = resource;
return Promise.delay(10000).then(() => true);
return delay(10000)().then(() => true);
},
destroy(resource) {
destroyed = resource;
Expand All @@ -825,7 +834,7 @@ describe('Tarn', () => {

let pending = pool.acquire();

return Promise.delay(20)
return delay(20)()
.then(() => {
pending.abort();
return pending.promise;
Expand All @@ -839,7 +848,7 @@ describe('Tarn', () => {
});
});

it('should destroy resource if validate throws synchronus exception', () => {
it('should destroy resource if validate throws synchronous exception', () => {
let createCalled = 0;
let destroyCalled = 0;
let numberOfFailingValidates = 5;
Expand Down Expand Up @@ -923,9 +932,9 @@ describe('Tarn', () => {
validateCalled++;
if (validationFails < validationMaxFailures && validateCalled % 3 == 0) {
validationFails++;
return Promise.delay(10).then(() => false);
return delay(10)().then(() => false);
}
return Promise.delay(10).then(() => true);
return delay(10)().then(() => true);
},
destroy(resource) {
++destroyCalled;
Expand Down Expand Up @@ -960,7 +969,7 @@ describe('Tarn', () => {
callback(null, { a: createCalled++, n: 0 });
},
validate(resource) {
return Promise.delay(80).then(() => true);
return delay(80)().then(() => true);
},
destroy(resource) {
++destroyCalled;
Expand All @@ -987,7 +996,7 @@ describe('Tarn', () => {
);

// wait for one validation set to complete before destroying pool
return Promise.delay(100)
return delay(100)()
.then(() => pool.destroy())
.then(() => {
// pool should have been filled with resources and then they sould have been destroyed
Expand Down Expand Up @@ -1172,7 +1181,7 @@ describe('Tarn', () => {
pool = new Pool({
create: () => {
++createCalled;
return Promise.delay(50).return({});
return delay(50)().then(() => {});
},
destroy() {
++destroyCalled;
Expand Down Expand Up @@ -1230,11 +1239,11 @@ describe('Tarn', () => {
pool = new Pool({
create: () => {
++createCalled;
return Promise.delay(50).return({});
return delay(50)().then(() => {});
},
destroy() {
++destroyCalled;
return Promise.delay(200);
return delay(200)();
},
min: 0,
max: 10
Expand Down Expand Up @@ -1385,7 +1394,7 @@ describe('Tarn', () => {
},
destroy(res) {
destroyDelay -= 50;
return Promise.delay(destroyDelay).then(() => {
return delay(destroyDelay)().then(() => {
res.destroyed = true;
});
},
Expand All @@ -1408,7 +1417,7 @@ describe('Tarn', () => {
pool.release(resources[3]);

// reaping should have started destroying these resources already
return Promise.delay(30).then(() => resources);
return delay(30)().then(() => resources);
})
.then(resources => {
// pool destroy should wait that all destroys are completed
Expand Down Expand Up @@ -1587,7 +1596,7 @@ describe('Tarn', () => {

let now = Date.now();

Promise.resolve(pool.acquire().promise)
Bluebird.resolve(pool.acquire().promise)
.reflect()
.then(res1 => {
return Promise.resolve(pool.acquire().promise)
Expand Down Expand Up @@ -1657,14 +1666,14 @@ describe('Tarn', () => {
expect(pool.numUsed()).to.equal(1);
expect(pool.numFree()).to.equal(2);

return Promise.delay(50);
return delay(50)();
})
.then(() => {
expect(destroyCalled).to.equal(0);
expect(pool.numUsed()).to.equal(1);
expect(pool.numFree()).to.equal(2);

return Promise.delay(65);
return delay(65)();
})
.then(() => {
expect(destroyed).to.eql([{ a: 0 }, { a: 1 }]);
Expand Down Expand Up @@ -1708,11 +1717,11 @@ describe('Tarn', () => {
.promise.then(res => {
expect(pool.interval).to.not.equal(null);
pool.release(res);
return Promise.delay(50);
return delay(50)();
})
.then(() => {
expect(pool.interval).to.not.equal(null);
return Promise.delay(65);
return delay(65)();
})
.then(() => {
expect(pool.interval).to.equal(null);
Expand Down Expand Up @@ -1773,14 +1782,14 @@ describe('Tarn', () => {
expect(pool.numUsed()).to.equal(1);
expect(pool.numFree()).to.equal(3);

return Promise.delay(50);
return delay(50)();
})
.then(() => {
expect(destroyCalled).to.equal(0);
expect(pool.numUsed()).to.equal(1);
expect(pool.numFree()).to.equal(3);

return Promise.delay(60);
return delay(60)();
})
.then(() => {
expect(sortBy(destroyed, 'a')).to.eql([{ a: 0 }, { a: 1 }]);
Expand Down Expand Up @@ -1838,14 +1847,14 @@ describe('Tarn', () => {
if (finished) return;
pool.release(res);

return Promise.delay(rand())
return delay(rand())()
.then(() => {
if (finished) return;
return pool.acquire().promise;
})
.then(res => {
if (finished) return;
return Promise.delay(rand()).then(() => {
return delay(rand())().then(() => {
return releaseAndAcquireThread(res);
});
});
Expand All @@ -1855,7 +1864,7 @@ describe('Tarn', () => {
return Math.round(1 + Math.random() * 4);
}

return Promise.delay(200);
return delay(200)();
})
.then(() => {
finished = true;
Expand All @@ -1882,18 +1891,18 @@ describe('Tarn', () => {
// third create should fail
create() {
if (createCalled > 1) {
return Promise.delay(10).then(() => Promise.reject(new Error('fail')));
return delay(10)().then(() => Promise.reject(new Error('fail')));
}
return Promise.delay(10).then(() => Promise.resolve({ a: ++createCalled }));
return delay(10)().then(() => Promise.resolve({ a: ++createCalled }));
},

// second destory should fail
destroy(resource) {
if (destroyCalled > 0) {
return Promise.delay(10).then(() => Promise.reject(new Error('fail')));
return delay(10)().then(() => Promise.reject(new Error('fail')));
}
++destroyCalled;
return Promise.delay(10).then(() => Promise.resolve());
return delay(10)().then(() => Promise.resolve());
},
min: 0,
max: 3,
Expand Down Expand Up @@ -2125,10 +2134,10 @@ describe('Tarn', () => {
listenerCallCount = 0;
pool = new Pool({
create() {
return Promise.delay(10).then(() => Promise.resolve({ a: 0 }));
return delay(10)().then(() => Promise.resolve({ a: 0 }));
},
destroy(resource) {
return Promise.delay(10).then(() => Promise.resolve());
return delay(10)().then(() => Promise.resolve());
},
min: 0,
max: 3,
Expand Down Expand Up @@ -2220,14 +2229,14 @@ describe('Tarn', () => {

pool = new Pool({
create() {
const delay = Promise.delay(randInt(maxCreateDelay));
const delayPromise = delay(randInt(maxCreateDelay))();

if (Math.random() < createFailProp) {
return delay.then(() => Promise.reject(new Error('create error')));
return delayPromise.then(() => Promise.reject(new Error('create error')));
} else {
const resource = { id: ++id };
createdResources.push(resource);
return delay.then(() => resource);
return delayPromise.then(() => resource);
}
},

Expand All @@ -2240,8 +2249,8 @@ describe('Tarn', () => {
},

validate(resource) {
const delay = Promise.delay(randInt(maxValidateDelay));
return delay.then(() => Math.random() > validateFailProp);
const delayPromise = delay(randInt(maxValidateDelay))();
return delayPromise.then(() => Math.random() > validateFailProp);
},

min: minResources,
Expand All @@ -2254,14 +2263,14 @@ describe('Tarn', () => {

for (let i = 0; i < numActions; ++i) {
actions.push(() => {
return Promise.delay(randInt(maxAcquireDelay))
return delay(randInt(maxAcquireDelay))()
.then(() => pool.acquire().promise)
.then(resource => {
expect(usedResources.includes(resource)).to.equal(false);
expect(pool.numUsed() + pool.numFree()).to.be.lessThan(maxResources + 1);

usedResources.push(resource);
return Promise.delay(randInt(maxReleaseDelay)).return(resource);
return delay(randInt(maxReleaseDelay))().then(() => resource);
})
.then(resource => {
usedResources.splice(usedResources.indexOf(resource), 1);
Expand All @@ -2270,7 +2279,8 @@ describe('Tarn', () => {
});
}

return Promise.map(actions, action => action())
const promises = actions.map(action => action());
return Promise.all(promises)
.then(() => {
expect(pool.numUsed()).to.equal(0);
expect(pool.numFree()).to.be.lessThan(maxResources + 1);
Expand Down