From 9c7d2c853e70dbdcb9d5ad36d34525eebb174b6f Mon Sep 17 00:00:00 2001 From: Rick Bergfalk Date: Fri, 4 Aug 2017 16:58:32 -0400 Subject: [PATCH] Test cursor with pg-pool --- test/pool.js | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 test/pool.js diff --git a/test/pool.js b/test/pool.js new file mode 100644 index 00000000..c3f755bf --- /dev/null +++ b/test/pool.js @@ -0,0 +1,85 @@ +const assert = require('assert') +const Cursor = require('../') +const pg = require('pg') + +const text = 'SELECT generate_series as num FROM generate_series(0, 50)' + +function poolQueryPromise(pool, readRowCount) { + return new Promise((resolve, reject) => { + pool.connect((err, client, done) => { + if (err) { + done(err) + return reject(err) + } + const cursor = client.query(new Cursor(text)) + cursor.read(readRowCount, (err, res) => { + if (err) { + done(err) + return reject(err) + } + cursor.close(err => { + if (err) { + done(err) + return reject(err) + } + done() + resolve() + }) + }) + }) + }) +} + +describe('pool', function() { + beforeEach(function() { + this.pool = new pg.Pool({max: 1}) + }) + + afterEach(function() { + this.pool.end() + }) + + it('closes cursor early, single pool query', function(done) { + poolQueryPromise(this.pool, 25) + .then(() => done()) + .catch(err => { + assert.ifError(err) + done() + }) + }) + + it('closes cursor early, saturated pool', function(done) { + const promises = [] + for (let i = 0; i < 10; i++) { + promises.push(poolQueryPromise(this.pool, 25)) + } + Promise.all(promises) + .then(() => done()) + .catch(err => { + assert.ifError(err) + done() + }) + }) + + it('closes exhausted cursor, single pool query', function(done) { + poolQueryPromise(this.pool, 100) + .then(() => done()) + .catch(err => { + assert.ifError(err) + done() + }) + }) + + it('closes exhausted cursor, saturated pool', function(done) { + const promises = [] + for (let i = 0; i < 10; i++) { + promises.push(poolQueryPromise(this.pool, 100)) + } + Promise.all(promises) + .then(() => done()) + .catch(err => { + assert.ifError(err) + done() + }) + }) +}) \ No newline at end of file