From 674dd37b858f6516fd4f18c390096d860f0df335 Mon Sep 17 00:00:00 2001 From: loferris Date: Mon, 23 Oct 2023 15:59:51 -0700 Subject: [PATCH 01/10] implementing mocha retries --- samples/test/auth.test.js | 1 + samples/test/authViewTutorial.test.js | 3 ++- samples/test/datasets.test.js | 3 ++- samples/test/helpers.ts | 16 ++++++++++++++++ samples/test/jobs.test.js | 3 ++- samples/test/models.test.js | 4 +++- samples/test/queries.test.js | 3 ++- samples/test/quickstart.test.js | 3 ++- samples/test/routines.test.js | 6 ++++-- samples/test/tables.test.js | 9 ++++++--- 10 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 samples/test/helpers.ts diff --git a/samples/test/auth.test.js b/samples/test/auth.test.js index 9abf0b8b..a8710e02 100644 --- a/samples/test/auth.test.js +++ b/samples/test/auth.test.js @@ -53,6 +53,7 @@ describe('authUserFlow()', () => { const output = await authUserFlow.main.exchangeCode('abc123'); assert.strictEqual(output, 'tokens'); sinon.assert.calledWith(tokenStub, 'abc123'); + retries(3); }); it('should return project id and credentials', async () => { diff --git a/samples/test/authViewTutorial.test.js b/samples/test/authViewTutorial.test.js index 15c432ab..b2bb9e28 100644 --- a/samples/test/authViewTutorial.test.js +++ b/samples/test/authViewTutorial.test.js @@ -36,7 +36,8 @@ const sharedViewId = generateUuid(); const bigquery = new BigQuery(); -describe('Authorized View Tutorial', () => { +describe('Authorized View Tutorial', function () { + this.retries(3); after(async () => { await bigquery.dataset(datasetId).delete({force: true}).catch(console.warn); await bigquery diff --git a/samples/test/datasets.test.js b/samples/test/datasets.test.js index cc0e1b2c..27f0cd31 100644 --- a/samples/test/datasets.test.js +++ b/samples/test/datasets.test.js @@ -29,7 +29,8 @@ const datasetId = `${GCLOUD_TESTS_PREFIX}_datasets_${uuid.v4()}`.replace( const bigquery = new BigQuery(); -describe('Datasets', () => { +describe('Datasets', function () { + this.retries(3); before(async () => { // Delete any stale datasets from samples tests await deleteDatasets(); diff --git a/samples/test/helpers.ts b/samples/test/helpers.ts new file mode 100644 index 00000000..0406d942 --- /dev/null +++ b/samples/test/helpers.ts @@ -0,0 +1,16 @@ +const retry = (asyncMethod: Function, counter?: number | undefined) => { + let retryCounter: number; + counter ? retryCounter = counter : retryCounter = 0; + + try { + const res = asyncMethod; + return res; + } catch (err) { + if (retryCounter <= 3) { + asyncMethod; + retry(asyncMethod, retryCounter++); + } else { + throw err; + } + } +} \ No newline at end of file diff --git a/samples/test/jobs.test.js b/samples/test/jobs.test.js index 068117d9..b67382a3 100644 --- a/samples/test/jobs.test.js +++ b/samples/test/jobs.test.js @@ -24,7 +24,8 @@ const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const bigquery = new BigQuery(); let jobId; -describe('Jobs', () => { +describe('Jobs', function () { + this.retries(3); before(async () => { const query = `SELECT name FROM \`bigquery-public-data.usa_names.usa_1910_2013\` diff --git a/samples/test/models.test.js b/samples/test/models.test.js index 90904621..c8649187 100644 --- a/samples/test/models.test.js +++ b/samples/test/models.test.js @@ -27,6 +27,7 @@ const GCLOUD_TESTS_PREFIX = 'nodejs_samples_tests_models'; const bigquery = new BigQuery(); describe('Models', function () { + this.retries(3); // Increase timeout to accommodate model creation. this.timeout(300000); const datasetId = `${GCLOUD_TESTS_PREFIX}_${uuid.v4()}`.replace(/-/gi, '_'); @@ -91,7 +92,8 @@ describe('Models', function () { }); }); -describe('Create/Delete Model', () => { +describe('Create/Delete Model', function () { + this.retries(3); const datasetId = `${GCLOUD_TESTS_PREFIX}_delete_${uuid.v4()}`.replace( /-/gi, '_' diff --git a/samples/test/queries.test.js b/samples/test/queries.test.js index beaedeed..98c3a101 100644 --- a/samples/test/queries.test.js +++ b/samples/test/queries.test.js @@ -36,7 +36,8 @@ let projectId; const bigquery = new BigQuery(); -describe('Queries', () => { +describe('Queries', function () { + this.retries(3); before(async () => { const schema = [{name: 'age', type: 'STRING', mode: 'REQUIRED'}]; const options = { diff --git a/samples/test/quickstart.test.js b/samples/test/quickstart.test.js index 4428a822..820f66c3 100644 --- a/samples/test/quickstart.test.js +++ b/samples/test/quickstart.test.js @@ -24,7 +24,8 @@ const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const bigquery = new BigQuery(); -describe('Quickstart', () => { +describe('Quickstart', function () { + this.retries(3); const datasetName = `nodejs_samples_tests_quickstart_${uuid.v4()}`.replace( /-/gi, '_' diff --git a/samples/test/routines.test.js b/samples/test/routines.test.js index 266da7ac..0ae7be2a 100644 --- a/samples/test/routines.test.js +++ b/samples/test/routines.test.js @@ -34,7 +34,8 @@ const newRoutineId = generateUuid(); const bigquery = new BigQuery(); -describe('Routines', () => { +describe('Routines', function () { + this.retries(3); after(async () => { await bigquery.dataset(datasetId).delete({force: true}).catch(console.warn); }); @@ -84,7 +85,8 @@ describe('Routines', () => { assert.include(output, 'Routine description: New description'); }); - describe('Delete Routine', () => { + describe('Delete Routine', function () { + this.retries(3); const datasetId = `gcloud_tests_${uuid.v4()}`.replace(/-/gi, '_'); const routineId = `gcloud_tests_${uuid.v4()}`.replace(/-/gi, '_'); diff --git a/samples/test/tables.test.js b/samples/test/tables.test.js index e7f94c5f..811f6adf 100644 --- a/samples/test/tables.test.js +++ b/samples/test/tables.test.js @@ -61,7 +61,8 @@ const partialDataFilePath = path.join( ); const bigquery = new BigQuery(); -describe('Tables', () => { +describe('Tables', function () { + this.retries(3); before(async () => { const [bucket] = await storage.createBucket(bucketName); await Promise.all([ @@ -618,7 +619,8 @@ describe('Tables', () => { assert.include(output, 'color: green'); }); - describe('Views', () => { + describe('Views', function () { + this.retries(3); it('should create a view', async () => { const output = execSync(`node createView.js ${datasetId} ${viewId}`); assert.include(output, `View ${viewId} created.`); @@ -640,7 +642,8 @@ describe('Tables', () => { }); }); - describe('Delete Table', () => { + describe('Delete Table', function () { + this.retries(3); const datasetId = `gcloud_tests_${uuid.v4()}`.replace(/-/gi, '_'); const tableId = `gcloud_tests_${uuid.v4()}`.replace(/-/gi, '_'); From 19f415e45a1ad436425051e1e8d2d159a212030d Mon Sep 17 00:00:00 2001 From: loferris Date: Mon, 23 Oct 2023 16:21:51 -0700 Subject: [PATCH 02/10] feat: fixing formatting for implementing mocha retries --- samples/package.json | 4 +++- samples/test/auth.test.js | 1 - samples/test/helpers.ts | 40 ++++++++++++++++++++++++++------------- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/samples/package.json b/samples/package.json index 4baebbaf..dc15bc4b 100644 --- a/samples/package.json +++ b/samples/package.json @@ -13,7 +13,8 @@ "node": ">=14.0.0" }, "scripts": { - "test": "mocha --timeout 200000" + "test": "mocha --timeout 200000", + "fix": "gts fix" }, "dependencies": { "@google-cloud/bigquery": "^7.3.0", @@ -25,6 +26,7 @@ "devDependencies": { "@google-cloud/datacatalog": "^4.0.0", "chai": "^4.2.0", + "gts": "^5.0.0", "mocha": "^8.0.0", "proxyquire": "^2.1.3", "sinon": "^16.0.0", diff --git a/samples/test/auth.test.js b/samples/test/auth.test.js index a8710e02..9abf0b8b 100644 --- a/samples/test/auth.test.js +++ b/samples/test/auth.test.js @@ -53,7 +53,6 @@ describe('authUserFlow()', () => { const output = await authUserFlow.main.exchangeCode('abc123'); assert.strictEqual(output, 'tokens'); sinon.assert.calledWith(tokenStub, 'abc123'); - retries(3); }); it('should return project id and credentials', async () => { diff --git a/samples/test/helpers.ts b/samples/test/helpers.ts index 0406d942..58afa762 100644 --- a/samples/test/helpers.ts +++ b/samples/test/helpers.ts @@ -1,16 +1,30 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + const retry = (asyncMethod: Function, counter?: number | undefined) => { - let retryCounter: number; - counter ? retryCounter = counter : retryCounter = 0; + let retryCounter: number; + counter ? (retryCounter = counter) : (retryCounter = 0); - try { - const res = asyncMethod; - return res; - } catch (err) { - if (retryCounter <= 3) { - asyncMethod; - retry(asyncMethod, retryCounter++); - } else { - throw err; - } + try { + const res = asyncMethod; + return res; + } catch (err) { + if (retryCounter <= 3) { + asyncMethod; + retry(asyncMethod, retryCounter++); + } else { + throw err; } -} \ No newline at end of file + } +}; From 630b39364a70112f00b605c69760dc1e3ddc56ab Mon Sep 17 00:00:00 2001 From: loferris Date: Tue, 24 Oct 2023 20:51:57 -0700 Subject: [PATCH 03/10] feat: adding mocha retries to sample tests --- samples/test/helpers.ts | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 samples/test/helpers.ts diff --git a/samples/test/helpers.ts b/samples/test/helpers.ts deleted file mode 100644 index 58afa762..00000000 --- a/samples/test/helpers.ts +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2023 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -const retry = (asyncMethod: Function, counter?: number | undefined) => { - let retryCounter: number; - counter ? (retryCounter = counter) : (retryCounter = 0); - - try { - const res = asyncMethod; - return res; - } catch (err) { - if (retryCounter <= 3) { - asyncMethod; - retry(asyncMethod, retryCounter++); - } else { - throw err; - } - } -}; From b2ed07fbe6f406aa712c32050253cc126a43db1b Mon Sep 17 00:00:00 2001 From: loferris Date: Wed, 25 Oct 2023 13:44:02 -0700 Subject: [PATCH 04/10] changing # of retries --- samples/test/authViewTutorial.test.js | 2 +- samples/test/datasets.test.js | 2 +- samples/test/jobs.test.js | 2 +- samples/test/models.test.js | 4 ++-- samples/test/queries.test.js | 2 +- samples/test/quickstart.test.js | 2 +- samples/test/routines.test.js | 4 ++-- samples/test/tables.test.js | 6 +++--- src/discover_type_gen/src/template.ts | 16 ++++++++++++++++ util/discovery_type_gen/src/cli.ts | 22 ++++++++++++++++++++++ 10 files changed, 50 insertions(+), 12 deletions(-) create mode 100644 src/discover_type_gen/src/template.ts create mode 100644 util/discovery_type_gen/src/cli.ts diff --git a/samples/test/authViewTutorial.test.js b/samples/test/authViewTutorial.test.js index b2bb9e28..b8d743fa 100644 --- a/samples/test/authViewTutorial.test.js +++ b/samples/test/authViewTutorial.test.js @@ -37,7 +37,7 @@ const sharedViewId = generateUuid(); const bigquery = new BigQuery(); describe('Authorized View Tutorial', function () { - this.retries(3); + this.retries(2); after(async () => { await bigquery.dataset(datasetId).delete({force: true}).catch(console.warn); await bigquery diff --git a/samples/test/datasets.test.js b/samples/test/datasets.test.js index 27f0cd31..84638e67 100644 --- a/samples/test/datasets.test.js +++ b/samples/test/datasets.test.js @@ -30,7 +30,7 @@ const datasetId = `${GCLOUD_TESTS_PREFIX}_datasets_${uuid.v4()}`.replace( const bigquery = new BigQuery(); describe('Datasets', function () { - this.retries(3); + this.retries(2); before(async () => { // Delete any stale datasets from samples tests await deleteDatasets(); diff --git a/samples/test/jobs.test.js b/samples/test/jobs.test.js index b67382a3..9debe31e 100644 --- a/samples/test/jobs.test.js +++ b/samples/test/jobs.test.js @@ -25,7 +25,7 @@ const bigquery = new BigQuery(); let jobId; describe('Jobs', function () { - this.retries(3); + this.retries(2); before(async () => { const query = `SELECT name FROM \`bigquery-public-data.usa_names.usa_1910_2013\` diff --git a/samples/test/models.test.js b/samples/test/models.test.js index c8649187..4cc1337f 100644 --- a/samples/test/models.test.js +++ b/samples/test/models.test.js @@ -27,7 +27,7 @@ const GCLOUD_TESTS_PREFIX = 'nodejs_samples_tests_models'; const bigquery = new BigQuery(); describe('Models', function () { - this.retries(3); + this.retries(2); // Increase timeout to accommodate model creation. this.timeout(300000); const datasetId = `${GCLOUD_TESTS_PREFIX}_${uuid.v4()}`.replace(/-/gi, '_'); @@ -93,7 +93,7 @@ describe('Models', function () { }); describe('Create/Delete Model', function () { - this.retries(3); + this.retries(2); const datasetId = `${GCLOUD_TESTS_PREFIX}_delete_${uuid.v4()}`.replace( /-/gi, '_' diff --git a/samples/test/queries.test.js b/samples/test/queries.test.js index 98c3a101..61f9f8c0 100644 --- a/samples/test/queries.test.js +++ b/samples/test/queries.test.js @@ -37,7 +37,7 @@ let projectId; const bigquery = new BigQuery(); describe('Queries', function () { - this.retries(3); + this.retries(2); before(async () => { const schema = [{name: 'age', type: 'STRING', mode: 'REQUIRED'}]; const options = { diff --git a/samples/test/quickstart.test.js b/samples/test/quickstart.test.js index 820f66c3..2b87b789 100644 --- a/samples/test/quickstart.test.js +++ b/samples/test/quickstart.test.js @@ -25,7 +25,7 @@ const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const bigquery = new BigQuery(); describe('Quickstart', function () { - this.retries(3); + this.retries(2); const datasetName = `nodejs_samples_tests_quickstart_${uuid.v4()}`.replace( /-/gi, '_' diff --git a/samples/test/routines.test.js b/samples/test/routines.test.js index 0ae7be2a..d792f4c5 100644 --- a/samples/test/routines.test.js +++ b/samples/test/routines.test.js @@ -35,7 +35,7 @@ const newRoutineId = generateUuid(); const bigquery = new BigQuery(); describe('Routines', function () { - this.retries(3); + this.retries(2); after(async () => { await bigquery.dataset(datasetId).delete({force: true}).catch(console.warn); }); @@ -86,7 +86,7 @@ describe('Routines', function () { }); describe('Delete Routine', function () { - this.retries(3); + this.retries(2); const datasetId = `gcloud_tests_${uuid.v4()}`.replace(/-/gi, '_'); const routineId = `gcloud_tests_${uuid.v4()}`.replace(/-/gi, '_'); diff --git a/samples/test/tables.test.js b/samples/test/tables.test.js index 811f6adf..a01bb739 100644 --- a/samples/test/tables.test.js +++ b/samples/test/tables.test.js @@ -62,7 +62,7 @@ const partialDataFilePath = path.join( const bigquery = new BigQuery(); describe('Tables', function () { - this.retries(3); + this.retries(2); before(async () => { const [bucket] = await storage.createBucket(bucketName); await Promise.all([ @@ -620,7 +620,7 @@ describe('Tables', function () { }); describe('Views', function () { - this.retries(3); + this.retries(2); it('should create a view', async () => { const output = execSync(`node createView.js ${datasetId} ${viewId}`); assert.include(output, `View ${viewId} created.`); @@ -643,7 +643,7 @@ describe('Tables', function () { }); describe('Delete Table', function () { - this.retries(3); + this.retries(2); const datasetId = `gcloud_tests_${uuid.v4()}`.replace(/-/gi, '_'); const tableId = `gcloud_tests_${uuid.v4()}`.replace(/-/gi, '_'); diff --git a/src/discover_type_gen/src/template.ts b/src/discover_type_gen/src/template.ts new file mode 100644 index 00000000..76fe7f17 --- /dev/null +++ b/src/discover_type_gen/src/template.ts @@ -0,0 +1,16 @@ +'use strict'; + +import fs from 'fs'; +import path from 'path'; +import template from 'lodash.template'; + +const cache = new Map(); + +module.exports = src => { + if (!cache.has(src)) { + const fullPath = path.join(__dirname, src); + const tmpl = fs.readFileSync(fullPath, 'utf8'); + cache.set(src, template(tmpl)); + } + return cache.get(src); +}; diff --git a/util/discovery_type_gen/src/cli.ts b/util/discovery_type_gen/src/cli.ts new file mode 100644 index 00000000..37f072e4 --- /dev/null +++ b/util/discovery_type_gen/src/cli.ts @@ -0,0 +1,22 @@ +#!/usr/bin/env node + +const meow = require('meow'); +const createTypes = require('./'); + +const {input, flags} = meow( + ` + Usage + $ dtsd + + Examples + $ dtsd bigquery v2 > bigquery.d.ts +`, + { + flags: {} + } +); + +/* eslint-disable no-console */ +createTypes(...input, flags) + .then(types => console.log(types)) + .catch(err => console.error(err)); From 27276b39c9308af5c6aa87d563c76fe2c3a40652 Mon Sep 17 00:00:00 2001 From: loferris Date: Wed, 25 Oct 2023 13:47:14 -0700 Subject: [PATCH 05/10] redoing # of retries --- src/discover_type_gen/src/template.ts | 16 ---------------- util/discovery_type_gen/src/cli.ts | 22 ---------------------- 2 files changed, 38 deletions(-) delete mode 100644 src/discover_type_gen/src/template.ts delete mode 100644 util/discovery_type_gen/src/cli.ts diff --git a/src/discover_type_gen/src/template.ts b/src/discover_type_gen/src/template.ts deleted file mode 100644 index 76fe7f17..00000000 --- a/src/discover_type_gen/src/template.ts +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -import fs from 'fs'; -import path from 'path'; -import template from 'lodash.template'; - -const cache = new Map(); - -module.exports = src => { - if (!cache.has(src)) { - const fullPath = path.join(__dirname, src); - const tmpl = fs.readFileSync(fullPath, 'utf8'); - cache.set(src, template(tmpl)); - } - return cache.get(src); -}; diff --git a/util/discovery_type_gen/src/cli.ts b/util/discovery_type_gen/src/cli.ts deleted file mode 100644 index 37f072e4..00000000 --- a/util/discovery_type_gen/src/cli.ts +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env node - -const meow = require('meow'); -const createTypes = require('./'); - -const {input, flags} = meow( - ` - Usage - $ dtsd - - Examples - $ dtsd bigquery v2 > bigquery.d.ts -`, - { - flags: {} - } -); - -/* eslint-disable no-console */ -createTypes(...input, flags) - .then(types => console.log(types)) - .catch(err => console.error(err)); From 5d63a6df55b4a467dbe496dfc2657f738216c38d Mon Sep 17 00:00:00 2001 From: loferris Date: Wed, 25 Oct 2023 18:00:37 -0700 Subject: [PATCH 06/10] changing retry logic --- samples/test/authViewTutorial.test.js | 9 ++++++--- samples/test/datasets.test.js | 9 ++++++--- samples/test/jobs.test.js | 8 +++++--- samples/test/models.test.js | 16 +++++++++++----- samples/test/queries.test.js | 9 ++++++--- samples/test/quickstart.test.js | 9 +++++---- samples/test/routines.test.js | 16 +++++++++++----- samples/test/tables.test.js | 22 +++++++++++++++------- 8 files changed, 65 insertions(+), 33 deletions(-) diff --git a/samples/test/authViewTutorial.test.js b/samples/test/authViewTutorial.test.js index b8d743fa..ee0f4827 100644 --- a/samples/test/authViewTutorial.test.js +++ b/samples/test/authViewTutorial.test.js @@ -15,7 +15,7 @@ 'use strict'; const {assert} = require('chai'); -const {describe, it, before, after} = require('mocha'); +const {describe, it, before, beforeEach, after} = require('mocha'); const cp = require('child_process'); const uuid = require('uuid'); @@ -36,8 +36,7 @@ const sharedViewId = generateUuid(); const bigquery = new BigQuery(); -describe('Authorized View Tutorial', function () { - this.retries(2); +describe('Authorized View Tutorial', () => { after(async () => { await bigquery.dataset(datasetId).delete({force: true}).catch(console.warn); await bigquery @@ -56,6 +55,10 @@ describe('Authorized View Tutorial', function () { projectId = tableData.metadata.tableReference.projectId; }); + beforeEach(async function () { + this.currentTest.retries(2); + }); + it('should create an authorized view', async () => { const output = execSync( `node authViewTutorial.js ${projectId} ${sourceDatasetId} ${sourceTableId} ${sharedDatasetId} ${sharedViewId}` diff --git a/samples/test/datasets.test.js b/samples/test/datasets.test.js index 84638e67..6a0b5c82 100644 --- a/samples/test/datasets.test.js +++ b/samples/test/datasets.test.js @@ -16,7 +16,7 @@ const {BigQuery} = require('@google-cloud/bigquery'); const {assert} = require('chai'); -const {describe, it, after, before} = require('mocha'); +const {describe, it, after, before, beforeEach} = require('mocha'); const cp = require('child_process'); const uuid = require('uuid'); @@ -29,13 +29,16 @@ const datasetId = `${GCLOUD_TESTS_PREFIX}_datasets_${uuid.v4()}`.replace( const bigquery = new BigQuery(); -describe('Datasets', function () { - this.retries(2); +describe('Datasets', () => { before(async () => { // Delete any stale datasets from samples tests await deleteDatasets(); }); + beforeEach(async function () { + this.currentTest.retries(2); + }); + after(async () => { await bigquery.dataset(datasetId).delete({force: true}).catch(console.warn); }); diff --git a/samples/test/jobs.test.js b/samples/test/jobs.test.js index 9debe31e..1190bf06 100644 --- a/samples/test/jobs.test.js +++ b/samples/test/jobs.test.js @@ -16,7 +16,7 @@ const {BigQuery} = require('@google-cloud/bigquery'); const {assert} = require('chai'); -const {describe, it, before} = require('mocha'); +const {describe, it, before, beforeEach} = require('mocha'); const cp = require('child_process'); const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); @@ -24,8 +24,7 @@ const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const bigquery = new BigQuery(); let jobId; -describe('Jobs', function () { - this.retries(2); +describe('Jobs', () => { before(async () => { const query = `SELECT name FROM \`bigquery-public-data.usa_names.usa_1910_2013\` @@ -35,6 +34,9 @@ describe('Jobs', function () { const queryOptions = { query: query, }; + beforeEach(async function () { + this.currentTest.retries(2); + }); const [job] = await bigquery.createQueryJob(queryOptions); jobId = job.metadata.jobReference.jobId; diff --git a/samples/test/models.test.js b/samples/test/models.test.js index 4cc1337f..a7b9d3f6 100644 --- a/samples/test/models.test.js +++ b/samples/test/models.test.js @@ -16,7 +16,7 @@ const {BigQuery} = require('@google-cloud/bigquery'); const {assert} = require('chai'); -const {describe, it, before, after} = require('mocha'); +const {describe, it, before, beforeEach, after} = require('mocha'); const cp = require('child_process'); const uuid = require('uuid'); @@ -26,8 +26,7 @@ const GCLOUD_TESTS_PREFIX = 'nodejs_samples_tests_models'; const bigquery = new BigQuery(); -describe('Models', function () { - this.retries(2); +describe('Models', () => { // Increase timeout to accommodate model creation. this.timeout(300000); const datasetId = `${GCLOUD_TESTS_PREFIX}_${uuid.v4()}`.replace(/-/gi, '_'); @@ -65,6 +64,10 @@ describe('Models', function () { await job.getQueryResults(); }); + beforeEach(async function () { + this.currentTest.retries(2); + }); + after(async () => { await bigquery.dataset(datasetId).delete({force: true}).catch(console.warn); }); @@ -92,8 +95,7 @@ describe('Models', function () { }); }); -describe('Create/Delete Model', function () { - this.retries(2); +describe('Create/Delete Model', () => { const datasetId = `${GCLOUD_TESTS_PREFIX}_delete_${uuid.v4()}`.replace( /-/gi, '_' @@ -110,6 +112,10 @@ describe('Create/Delete Model', function () { await bigquery.createDataset(datasetId, datasetOptions); }); + beforeEach(async function () { + this.currentTest.retries(2); + }); + after(async () => { await bigquery.dataset(datasetId).delete({force: true}).catch(console.warn); }); diff --git a/samples/test/queries.test.js b/samples/test/queries.test.js index 61f9f8c0..00c322a5 100644 --- a/samples/test/queries.test.js +++ b/samples/test/queries.test.js @@ -15,7 +15,7 @@ 'use strict'; const {assert} = require('chai'); -const {describe, it, before, after} = require('mocha'); +const {describe, it, before, beforeEach, after} = require('mocha'); const cp = require('child_process'); const uuid = require('uuid'); @@ -36,8 +36,7 @@ let projectId; const bigquery = new BigQuery(); -describe('Queries', function () { - this.retries(2); +describe('Queries', () => { before(async () => { const schema = [{name: 'age', type: 'STRING', mode: 'REQUIRED'}]; const options = { @@ -51,6 +50,10 @@ describe('Queries', function () { projectId = tableData.metadata.tableReference.projectId; }); + beforeEach(async function () { + this.currentTest.retries(2); + }); + after(async () => { await bigquery.dataset(datasetId).delete({force: true}).catch(console.warn); }); diff --git a/samples/test/quickstart.test.js b/samples/test/quickstart.test.js index 2b87b789..d9cd0a22 100644 --- a/samples/test/quickstart.test.js +++ b/samples/test/quickstart.test.js @@ -15,7 +15,7 @@ 'use strict'; const {assert} = require('chai'); -const {describe, it, after} = require('mocha'); +const {describe, it, after, beforeEach} = require('mocha'); const uuid = require('uuid'); const cp = require('child_process'); const {BigQuery} = require('@google-cloud/bigquery'); @@ -24,13 +24,14 @@ const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'}); const bigquery = new BigQuery(); -describe('Quickstart', function () { - this.retries(2); +describe('Quickstart', () => { const datasetName = `nodejs_samples_tests_quickstart_${uuid.v4()}`.replace( /-/gi, '_' ); - + beforeEach(async function () { + this.currentTest.retries(2); + }); after(async () => { await bigquery.dataset(datasetName).delete({force: true}); }); diff --git a/samples/test/routines.test.js b/samples/test/routines.test.js index d792f4c5..bee3f01d 100644 --- a/samples/test/routines.test.js +++ b/samples/test/routines.test.js @@ -15,7 +15,7 @@ 'use strict'; const {assert} = require('chai'); -const {describe, it, before, after} = require('mocha'); +const {describe, it, before, beforeEach, after} = require('mocha'); const cp = require('child_process'); const uuid = require('uuid'); @@ -34,8 +34,7 @@ const newRoutineId = generateUuid(); const bigquery = new BigQuery(); -describe('Routines', function () { - this.retries(2); +describe('Routines', () => { after(async () => { await bigquery.dataset(datasetId).delete({force: true}).catch(console.warn); }); @@ -62,6 +61,10 @@ describe('Routines', function () { await routine.create(config); }); + beforeEach(async function () { + this.currentTest.retries(2); + }); + it('should create a routine', async () => { const output = execSync( `node createRoutine.js ${datasetId} ${newRoutineId}` @@ -85,8 +88,7 @@ describe('Routines', function () { assert.include(output, 'Routine description: New description'); }); - describe('Delete Routine', function () { - this.retries(2); + describe('Delete Routine', () => { const datasetId = `gcloud_tests_${uuid.v4()}`.replace(/-/gi, '_'); const routineId = `gcloud_tests_${uuid.v4()}`.replace(/-/gi, '_'); @@ -113,6 +115,10 @@ describe('Routines', function () { await routine.create(config); }); + beforeEach(async function () { + this.currentTest.retries(2); + }); + after(async () => { await bigquery .dataset(datasetId) diff --git a/samples/test/tables.test.js b/samples/test/tables.test.js index a01bb739..82eb00cd 100644 --- a/samples/test/tables.test.js +++ b/samples/test/tables.test.js @@ -61,8 +61,7 @@ const partialDataFilePath = path.join( ); const bigquery = new BigQuery(); -describe('Tables', function () { - this.retries(2); +describe('Tables', () => { before(async () => { const [bucket] = await storage.createBucket(bucketName); await Promise.all([ @@ -97,7 +96,10 @@ describe('Tables', function () { }); // to avoid getting rate limited - beforeEach(done => setTimeout(done, 500)); + beforeEach(async function (done) { + setTimeout(done, 500); + this.currentTest.retries(2); + }); after(async () => { await bigquery @@ -619,8 +621,11 @@ describe('Tables', function () { assert.include(output, 'color: green'); }); - describe('Views', function () { - this.retries(2); + describe('Views', () => { + beforeEach(async function () { + this.currentTest.retries(2); + }); + it('should create a view', async () => { const output = execSync(`node createView.js ${datasetId} ${viewId}`); assert.include(output, `View ${viewId} created.`); @@ -642,8 +647,7 @@ describe('Tables', function () { }); }); - describe('Delete Table', function () { - this.retries(2); + describe('Delete Table', () => { const datasetId = `gcloud_tests_${uuid.v4()}`.replace(/-/gi, '_'); const tableId = `gcloud_tests_${uuid.v4()}`.replace(/-/gi, '_'); @@ -660,6 +664,10 @@ describe('Tables', function () { await bigquery.dataset(datasetId).createTable(tableId, tableOptions); }); + beforeEach(async function () { + this.currentTest.retries(2); + }); + after(async () => { await bigquery .dataset(datasetId) From 178bdf57e6398e42d992cf45c6c084cf0dffc850 Mon Sep 17 00:00:00 2001 From: loferris Date: Wed, 25 Oct 2023 18:23:25 -0700 Subject: [PATCH 07/10] changing function syntax for timeouts --- samples/test/models.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/test/models.test.js b/samples/test/models.test.js index a7b9d3f6..48764cdb 100644 --- a/samples/test/models.test.js +++ b/samples/test/models.test.js @@ -26,7 +26,7 @@ const GCLOUD_TESTS_PREFIX = 'nodejs_samples_tests_models'; const bigquery = new BigQuery(); -describe('Models', () => { +describe('Models', function () { // Increase timeout to accommodate model creation. this.timeout(300000); const datasetId = `${GCLOUD_TESTS_PREFIX}_${uuid.v4()}`.replace(/-/gi, '_'); From ee7bbbaeba6eb24ebca05b160f0128d340af73d7 Mon Sep 17 00:00:00 2001 From: loferris Date: Wed, 25 Oct 2023 18:50:04 -0700 Subject: [PATCH 08/10] changing async syntax for timeouts --- samples/test/tables.test.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/samples/test/tables.test.js b/samples/test/tables.test.js index 82eb00cd..62289e9d 100644 --- a/samples/test/tables.test.js +++ b/samples/test/tables.test.js @@ -97,7 +97,9 @@ describe('Tables', () => { // to avoid getting rate limited beforeEach(async function (done) { - setTimeout(done, 500); + setTimeout(() => { + done(); + }, 500); this.currentTest.retries(2); }); From ae67523dda75795aafa907f8c99a458416912598 Mon Sep 17 00:00:00 2001 From: loferris Date: Wed, 1 Nov 2023 19:55:46 -0700 Subject: [PATCH 09/10] changing timeout on tests --- samples/test/tables.test.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/samples/test/tables.test.js b/samples/test/tables.test.js index 62289e9d..a05cb63e 100644 --- a/samples/test/tables.test.js +++ b/samples/test/tables.test.js @@ -96,10 +96,8 @@ describe('Tables', () => { }); // to avoid getting rate limited - beforeEach(async function (done) { - setTimeout(() => { - done(); - }, 500); + beforeEach(async function () { + setTimeout(500); this.currentTest.retries(2); }); From 00c754b725cd34f094df879295abce531eded61d Mon Sep 17 00:00:00 2001 From: loferris Date: Wed, 1 Nov 2023 20:10:05 -0700 Subject: [PATCH 10/10] remove timeouts --- samples/test/tables.test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/samples/test/tables.test.js b/samples/test/tables.test.js index a05cb63e..a2ebae8b 100644 --- a/samples/test/tables.test.js +++ b/samples/test/tables.test.js @@ -97,7 +97,6 @@ describe('Tables', () => { // to avoid getting rate limited beforeEach(async function () { - setTimeout(500); this.currentTest.retries(2); });