From fc5deb1a107e3fab9b03bedde1de94fb4af280ce Mon Sep 17 00:00:00 2001 From: Igor Savin Date: Sun, 12 Apr 2020 17:12:18 +0200 Subject: [PATCH] Reduce dependency on Bluebird --- tests.js | 100 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 55 insertions(+), 45 deletions(-) diff --git a/tests.js b/tests.js index 40651cd..5fe46d3 100644 --- a/tests.js +++ b/tests.js @@ -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; @@ -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; @@ -619,7 +628,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); @@ -704,7 +713,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, @@ -729,7 +738,9 @@ describe('Tarn', () => { }, validate(resource) { validated = resource; - return Promise.delay(10000).then(() => true); + return delay(10000)().then(() => { + return true; + }); }, destroy(resource) { destroyed = resource; @@ -745,9 +756,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); @@ -767,7 +776,7 @@ describe('Tarn', () => { }, validate(resource) { validated = resource; - return Promise.delay(10000).then(() => true); + return delay(10000)().then(() => true); }, destroy(resource) { destroyed = resource; @@ -780,7 +789,7 @@ describe('Tarn', () => { let pending = pool.acquire(); - return Promise.delay(20) + return delay(20)() .then(() => { pending.abort(); return pending.promise; @@ -794,7 +803,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; @@ -878,9 +887,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; @@ -915,7 +924,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; @@ -942,7 +951,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 @@ -1127,7 +1136,7 @@ describe('Tarn', () => { pool = new Pool({ create: () => { ++createCalled; - return Promise.delay(50).return({}); + return delay(50)().then(() => {}); }, destroy() { ++destroyCalled; @@ -1185,11 +1194,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 @@ -1340,7 +1349,7 @@ describe('Tarn', () => { }, destroy(res) { destroyDelay -= 50; - return Promise.delay(destroyDelay).then(() => { + return delay(destroyDelay)().then(() => { res.destroyed = true; }); }, @@ -1363,7 +1372,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 @@ -1542,7 +1551,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) @@ -1612,14 +1621,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 }]); @@ -1663,11 +1672,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); @@ -1728,14 +1737,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 }]); @@ -1793,14 +1802,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); }); }); @@ -1810,7 +1819,7 @@ describe('Tarn', () => { return Math.round(1 + Math.random() * 4); } - return Promise.delay(200); + return delay(200)(); }) .then(() => { finished = true; @@ -1837,18 +1846,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, @@ -2080,10 +2089,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, @@ -2175,14 +2184,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); } }, @@ -2195,8 +2204,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, @@ -2209,14 +2218,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); @@ -2225,7 +2234,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);