diff --git a/container-analysis/snippets/test/containerAnalysis.test.js b/container-analysis/snippets/test/containerAnalysis.test.js index 38a6952a69..d1235ded27 100644 --- a/container-analysis/snippets/test/containerAnalysis.test.js +++ b/container-analysis/snippets/test/containerAnalysis.test.js @@ -17,6 +17,7 @@ const {assert} = require('chai'); const {describe, it, before, after, afterEach, beforeEach} = require('mocha'); const cp = require('child_process'); +const {delay} = require('./util'); const uuid = require('uuid'); const {ContainerAnalysisClient} = require('@google-cloud/containeranalysis'); @@ -343,7 +344,10 @@ describe('pubsub', () => { await pubsub.subscription(subscriptionId).delete(); }); - it('should get count of occurrences from pubsub topic', async () => { + it('should get count of occurrences from pubsub topic', async function() { + this.retries(3); + await delay(this.test); + const occurrenceCount = 3; const pubSubOccurrenceReq = { parent: formattedParent, diff --git a/container-analysis/snippets/test/util.js b/container-analysis/snippets/test/util.js new file mode 100644 index 0000000000..97b804a43c --- /dev/null +++ b/container-analysis/snippets/test/util.js @@ -0,0 +1,28 @@ +// Copyright 2020 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 +// +// https://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. + +// ML tests frequently run into concurrency and quota issues, for which +// retrying with a backoff is a good strategy: +module.exports = { + async delay(test) { + const retries = test.currentRetry(); + if (retries === 0) return; // no retry on the first failure. + // see: https://cloud.google.com/storage/docs/exponential-backoff: + const ms = Math.pow(2, retries) * 1000 + Math.random() * 2000; + return new Promise(done => { + console.info(`retrying "${test.title}" in ${ms}ms`); + setTimeout(done, ms); + }); + }, +};