From a84db5ffd74387dbaea38f0bad2e67b6d536d135 Mon Sep 17 00:00:00 2001 From: Brian C Date: Mon, 28 Oct 2019 12:46:49 -0500 Subject: [PATCH] Add async iterator tests (#62) --- package.json | 7 +++++ test/async-iterator.es6 | 57 +++++++++++++++++++++++++++++++++++++++++ test/async-iterator.js | 4 +++ yarn.lock | 5 ++++ 4 files changed, 73 insertions(+) create mode 100644 test/async-iterator.es6 create mode 100644 test/async-iterator.js diff --git a/package.json b/package.json index 0be7b953..9675d064 100644 --- a/package.json +++ b/package.json @@ -32,10 +32,17 @@ "eslint-plugin-standard": "^3.0.1", "mocha": "^6.2.2", "pg": "^7.5.0", + "prettier": "^1.18.2", "stream-spec": "~0.3.5", "stream-tester": "0.0.5", "through": "~2.3.4" }, + "prettier": { + "semi": false, + "printWidth": 120, + "trailingComma": "es5", + "singleQuote": true + }, "dependencies": { "pg-cursor": "2.0.0" } diff --git a/test/async-iterator.es6 b/test/async-iterator.es6 new file mode 100644 index 00000000..e84089b6 --- /dev/null +++ b/test/async-iterator.es6 @@ -0,0 +1,57 @@ +const QueryStream = require('../') +const pg = require('pg') +const assert = require('assert') + +const queryText = 'SELECT * FROM generate_series(0, 200) num' +describe('Async iterator', () => { + it('works', async () => { + const stream = new QueryStream(queryText, []) + const client = new pg.Client() + await client.connect() + const query = client.query(stream) + const rows = [] + for await (const row of query) { + rows.push(row) + } + assert.equal(rows.length, 201) + await client.end() + }) + + it('can async iterate and then do a query afterwards', async () => { + const stream = new QueryStream(queryText, []) + const client = new pg.Client() + await client.connect() + const query = client.query(stream) + const iteratorRows = [] + for await (const row of query) { + iteratorRows.push(row) + } + assert.equal(iteratorRows.length, 201) + const { rows } = await client.query('SELECT NOW()') + assert.equal(rows.length, 1) + await client.end() + }) + + it('can async iterate multiple times with a pool', async () => { + const pool = new pg.Pool({ max: 1 }) + + const allRows = [] + const run = async () => { + // get the client + const client = await pool.connect() + // stream some rows + const stream = new QueryStream(queryText, []) + const iteratorRows = [] + client.query(stream) + for await (const row of stream) { + iteratorRows.push(row) + allRows.push(row) + } + assert.equal(iteratorRows.length, 201) + client.release() + } + await Promise.all([run(), run(), run()]) + assert.equal(allRows.length, 603) + await pool.end() + }) +}) diff --git a/test/async-iterator.js b/test/async-iterator.js new file mode 100644 index 00000000..19718fe3 --- /dev/null +++ b/test/async-iterator.js @@ -0,0 +1,4 @@ +// only newer versions of node support async iterator +if (!process.version.startsWith('v8')) { + require('./async-iterator.es6') +} diff --git a/yarn.lock b/yarn.lock index 0c7662d2..bc9baae9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1217,6 +1217,11 @@ prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" +prettier@^1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" + integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== + process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"