From 9bd23dc735f4e78774760c3c78bfa0d116aeec40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivar=20Conradi=20=C3=98sthus?= Date: Fri, 19 Mar 2021 22:25:21 +0100 Subject: [PATCH] fix: Make e2e test more stable (#767) make sure we destroy all the stores which should also cancel any background work they have for the database. --- src/test/e2e/api/admin/addon.e2e.test.js | 5 +++-- src/test/e2e/api/admin/context.e2e.test.js | 5 +++-- src/test/e2e/api/admin/event.e2e.test.js | 5 +++-- src/test/e2e/api/admin/feature-archive.e2e.test.js | 5 +++-- src/test/e2e/api/admin/feature.auth.e2e.test.js | 5 +++-- src/test/e2e/api/admin/feature.custom-auth.e2e.test.js | 5 +++-- src/test/e2e/api/admin/feature.e2e.test.js | 5 +++-- src/test/e2e/api/admin/metrics.e2e.test.js | 5 +++-- src/test/e2e/api/admin/state.e2e.test.js | 5 +++-- src/test/e2e/api/admin/strategy.e2e.test.js | 5 +++-- src/test/e2e/api/admin/tag-types.e2e.test.js | 5 +++-- src/test/e2e/api/admin/tags.e2e.test.js | 5 +++-- src/test/e2e/api/client/feature.e2e.test.js | 5 +++-- src/test/e2e/api/client/metrics.e2e.test.js | 5 +++-- src/test/e2e/api/client/register.e2e.test.js | 5 +++-- src/test/e2e/health.e2e.test.js | 5 +++-- src/test/e2e/helpers/database-init.js | 8 ++++++++ src/test/e2e/services/access-service.e2e.test.js | 5 +++-- src/test/e2e/services/client-metrics-service.e2e.test.js | 5 +++-- src/test/e2e/services/project-service.e2e.test.js | 7 ++++--- src/test/e2e/stores/event-store.e2e.test.js | 5 +++-- src/test/e2e/stores/project-store.e2e.test.js | 5 +++-- src/test/e2e/stores/setting-store.e2e.test.js | 7 ++++--- src/test/e2e/stores/user-store.e2e.test.js | 5 +++-- 24 files changed, 79 insertions(+), 48 deletions(-) diff --git a/src/test/e2e/api/admin/addon.e2e.test.js b/src/test/e2e/api/admin/addon.e2e.test.js index 4aa10d45bc..f6fee50bda 100644 --- a/src/test/e2e/api/admin/addon.e2e.test.js +++ b/src/test/e2e/api/admin/addon.e2e.test.js @@ -9,14 +9,15 @@ const getLogger = require('../../../fixtures/no-logger'); const MASKED_VALUE = '*****'; let stores; +let db; test.before(async () => { - const db = await dbInit('addon_api_serial', getLogger); + db = await dbInit('addon_api_serial', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('gets all addons', async t => { diff --git a/src/test/e2e/api/admin/context.e2e.test.js b/src/test/e2e/api/admin/context.e2e.test.js index c1b1d6d7b9..c523c3a52b 100644 --- a/src/test/e2e/api/admin/context.e2e.test.js +++ b/src/test/e2e/api/admin/context.e2e.test.js @@ -7,14 +7,15 @@ const { setupApp } = require('../../helpers/test-helper'); const getLogger = require('../../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('context_api_serial', getLogger); + db = await dbInit('context_api_serial', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('gets all context fields', async t => { diff --git a/src/test/e2e/api/admin/event.e2e.test.js b/src/test/e2e/api/admin/event.e2e.test.js index 0bcdea67d7..e9ee989ceb 100644 --- a/src/test/e2e/api/admin/event.e2e.test.js +++ b/src/test/e2e/api/admin/event.e2e.test.js @@ -6,14 +6,15 @@ const dbInit = require('../../helpers/database-init'); const getLogger = require('../../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('event_api_serial', getLogger); + db = await dbInit('event_api_serial', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('returns events', async t => { diff --git a/src/test/e2e/api/admin/feature-archive.e2e.test.js b/src/test/e2e/api/admin/feature-archive.e2e.test.js index 6e619fc734..477c47f954 100644 --- a/src/test/e2e/api/admin/feature-archive.e2e.test.js +++ b/src/test/e2e/api/admin/feature-archive.e2e.test.js @@ -6,14 +6,15 @@ const dbInit = require('../../helpers/database-init'); const getLogger = require('../../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('archive_serial', getLogger); + db = await dbInit('archive_serial', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('returns three archived toggles', async t => { diff --git a/src/test/e2e/api/admin/feature.auth.e2e.test.js b/src/test/e2e/api/admin/feature.auth.e2e.test.js index cc100355f9..75a3a52b9f 100644 --- a/src/test/e2e/api/admin/feature.auth.e2e.test.js +++ b/src/test/e2e/api/admin/feature.auth.e2e.test.js @@ -6,14 +6,15 @@ const dbInit = require('../../helpers/database-init'); const getLogger = require('../../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('feature_api_auth', getLogger); + db = await dbInit('feature_api_auth', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('creates new feature toggle with createdBy', async t => { diff --git a/src/test/e2e/api/admin/feature.custom-auth.e2e.test.js b/src/test/e2e/api/admin/feature.custom-auth.e2e.test.js index e45232de1f..83af1525cf 100644 --- a/src/test/e2e/api/admin/feature.custom-auth.e2e.test.js +++ b/src/test/e2e/api/admin/feature.custom-auth.e2e.test.js @@ -9,14 +9,15 @@ const dbInit = require('../../helpers/database-init'); const getLogger = require('../../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('feature_api_custom_auth', getLogger); + db = await dbInit('feature_api_custom_auth', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('should require authenticated user', async t => { diff --git a/src/test/e2e/api/admin/feature.e2e.test.js b/src/test/e2e/api/admin/feature.e2e.test.js index 1e6a1cbb4f..3a7053a39b 100644 --- a/src/test/e2e/api/admin/feature.e2e.test.js +++ b/src/test/e2e/api/admin/feature.e2e.test.js @@ -7,14 +7,15 @@ const { setupApp } = require('../../helpers/test-helper'); const getLogger = require('../../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('feature_api_serial', getLogger); + db = await dbInit('feature_api_serial', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('returns list of feature toggles', async t => { diff --git a/src/test/e2e/api/admin/metrics.e2e.test.js b/src/test/e2e/api/admin/metrics.e2e.test.js index a28c8b4153..3a6ffc6e55 100644 --- a/src/test/e2e/api/admin/metrics.e2e.test.js +++ b/src/test/e2e/api/admin/metrics.e2e.test.js @@ -6,16 +6,17 @@ const { setupApp } = require('../../helpers/test-helper'); const getLogger = require('../../../fixtures/no-logger'); let stores; +let db; let reset = () => {}; test.before(async () => { - const db = await dbInit('metrics_serial', getLogger); + db = await dbInit('metrics_serial', getLogger); stores = db.stores; reset = db.reset; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.afterEach(async () => { diff --git a/src/test/e2e/api/admin/state.e2e.test.js b/src/test/e2e/api/admin/state.e2e.test.js index 7cd8dd9a4d..121321430e 100644 --- a/src/test/e2e/api/admin/state.e2e.test.js +++ b/src/test/e2e/api/admin/state.e2e.test.js @@ -7,14 +7,15 @@ const { setupApp } = require('../../helpers/test-helper'); const getLogger = require('../../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('state_api_serial', getLogger); + db = await dbInit('state_api_serial', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('exports strategies and features as json by default', async t => { diff --git a/src/test/e2e/api/admin/strategy.e2e.test.js b/src/test/e2e/api/admin/strategy.e2e.test.js index 0e438908f1..a249027b21 100644 --- a/src/test/e2e/api/admin/strategy.e2e.test.js +++ b/src/test/e2e/api/admin/strategy.e2e.test.js @@ -7,14 +7,15 @@ const { setupApp } = require('../../helpers/test-helper'); const getLogger = require('../../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('strategy_api_serial', getLogger); + db = await dbInit('strategy_api_serial', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('gets all strategies', async t => { diff --git a/src/test/e2e/api/admin/tag-types.e2e.test.js b/src/test/e2e/api/admin/tag-types.e2e.test.js index 629ca34c3f..b19d493110 100644 --- a/src/test/e2e/api/admin/tag-types.e2e.test.js +++ b/src/test/e2e/api/admin/tag-types.e2e.test.js @@ -6,14 +6,15 @@ const { setupApp } = require('../../helpers/test-helper'); const getLogger = require('../../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('tag_types_api_serial', getLogger); + db = await dbInit('tag_types_api_serial', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('returns list of tag-types', async t => { diff --git a/src/test/e2e/api/admin/tags.e2e.test.js b/src/test/e2e/api/admin/tags.e2e.test.js index 3fda2f8f85..ec6e75cc27 100644 --- a/src/test/e2e/api/admin/tags.e2e.test.js +++ b/src/test/e2e/api/admin/tags.e2e.test.js @@ -6,14 +6,15 @@ const { setupApp } = require('../../helpers/test-helper'); const getLogger = require('../../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('tag_api_serial', getLogger); + db = await dbInit('tag_api_serial', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('returns list of tags', async t => { diff --git a/src/test/e2e/api/client/feature.e2e.test.js b/src/test/e2e/api/client/feature.e2e.test.js index 4417b66908..c642e1b54d 100644 --- a/src/test/e2e/api/client/feature.e2e.test.js +++ b/src/test/e2e/api/client/feature.e2e.test.js @@ -6,14 +6,15 @@ const dbInit = require('../../helpers/database-init'); const getLogger = require('../../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('feature_api_client', getLogger); + db = await dbInit('feature_api_client', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('returns four feature toggles', async t => { diff --git a/src/test/e2e/api/client/metrics.e2e.test.js b/src/test/e2e/api/client/metrics.e2e.test.js index c15924691a..95707316a3 100644 --- a/src/test/e2e/api/client/metrics.e2e.test.js +++ b/src/test/e2e/api/client/metrics.e2e.test.js @@ -8,14 +8,15 @@ const dbInit = require('../../helpers/database-init'); const getLogger = require('../../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('metrics_api_client', getLogger); + db = await dbInit('metrics_api_client', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('should be possble to send metrics', async t => { diff --git a/src/test/e2e/api/client/register.e2e.test.js b/src/test/e2e/api/client/register.e2e.test.js index dbd4997731..d590e1e589 100644 --- a/src/test/e2e/api/client/register.e2e.test.js +++ b/src/test/e2e/api/client/register.e2e.test.js @@ -15,14 +15,15 @@ const asyncFilter = async (arr, predicate) => { }; let stores; +let db; test.before(async () => { - const db = await dbInit('register_client', getLogger); + db = await dbInit('register_client', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('should register client', async t => { diff --git a/src/test/e2e/health.e2e.test.js b/src/test/e2e/health.e2e.test.js index c9fea7d99e..c71ab1071d 100644 --- a/src/test/e2e/health.e2e.test.js +++ b/src/test/e2e/health.e2e.test.js @@ -6,14 +6,15 @@ const dbInit = require('./helpers/database-init'); const getLogger = require('../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('health_api', getLogger); + db = await dbInit('health_api', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test('returns health good', async t => { diff --git a/src/test/e2e/helpers/database-init.js b/src/test/e2e/helpers/database-init.js index 5950062b3c..7c734b8fe6 100644 --- a/src/test/e2e/helpers/database-init.js +++ b/src/test/e2e/helpers/database-init.js @@ -107,5 +107,13 @@ module.exports = async function init(databaseSchema = 'test', getLogger) { await resetDatabase(stores); await setupDatabase(stores); }, + destroy: async () => { + const { clientInstanceStore, clientMetricsStore } = stores; + return new Promise((resolve, reject) => { + clientInstanceStore.destroy(); + clientMetricsStore.destroy(); + db.destroy(error => (error ? reject(error) : resolve())); + }); + }, }; }; diff --git a/src/test/e2e/services/access-service.e2e.test.js b/src/test/e2e/services/access-service.e2e.test.js index eb69b7dcf9..34c4763351 100644 --- a/src/test/e2e/services/access-service.e2e.test.js +++ b/src/test/e2e/services/access-service.e2e.test.js @@ -11,6 +11,7 @@ const { const permissions = require('../../../lib/permissions'); const User = require('../../../lib/user'); +let db; let stores; let accessService; @@ -38,7 +39,7 @@ const createSuperUser = async () => { }; test.before(async () => { - const db = await dbInit('access_service_serial', getLogger); + db = await dbInit('access_service_serial', getLogger); stores = db.stores; // projectStore = stores.projectStore; accessService = new AccessService(stores, { getLogger }); @@ -50,7 +51,7 @@ test.before(async () => { }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('should have access to admin addons', async t => { diff --git a/src/test/e2e/services/client-metrics-service.e2e.test.js b/src/test/e2e/services/client-metrics-service.e2e.test.js index ac19bdfe96..1cf5ced4de 100644 --- a/src/test/e2e/services/client-metrics-service.e2e.test.js +++ b/src/test/e2e/services/client-metrics-service.e2e.test.js @@ -6,10 +6,11 @@ const ClientMetricsService = require('../../../lib/services/client-metrics'); const { APPLICATION_CREATED } = require('../../../lib/event-type'); let stores; +let db; let clientMetricsService; test.before(async () => { - const db = await dbInit('client_metrics_service_serial', getLogger); + db = await dbInit('client_metrics_service_serial', getLogger); stores = db.stores; clientMetricsService = new ClientMetricsService(stores, { getLogger, @@ -19,7 +20,7 @@ test.before(async () => { }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('Apps registered should be announced', async t => { t.plan(3); diff --git a/src/test/e2e/services/project-service.e2e.test.js b/src/test/e2e/services/project-service.e2e.test.js index 77b55ee9ac..187b69896a 100644 --- a/src/test/e2e/services/project-service.e2e.test.js +++ b/src/test/e2e/services/project-service.e2e.test.js @@ -11,13 +11,14 @@ const { UPDATE_PROJECT } = require('../../../lib/permissions'); const NotFoundError = require('../../../lib/error/notfound-error'); let stores; -// let projectStore; +let db; + let projectService; let accessService; let user; test.before(async () => { - const db = await dbInit('project_service_serial', getLogger); + db = await dbInit('project_service_serial', getLogger); stores = db.stores; user = await stores.userStore.insert( new User({ name: 'Some Name', email: 'test@getunleash.io' }), @@ -28,7 +29,7 @@ test.before(async () => { }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('should have default project', async t => { diff --git a/src/test/e2e/stores/event-store.e2e.test.js b/src/test/e2e/stores/event-store.e2e.test.js index 2765dfc60d..7aeac8abda 100644 --- a/src/test/e2e/stores/event-store.e2e.test.js +++ b/src/test/e2e/stores/event-store.e2e.test.js @@ -10,17 +10,18 @@ const { const dbInit = require('../helpers/database-init'); const getLogger = require('../../fixtures/no-logger'); +let db; let stores; let eventStore; test.before(async () => { - const db = await dbInit('event_store_serial', getLogger); + db = await dbInit('event_store_serial', getLogger); stores = db.stores; eventStore = stores.eventStore; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('Should include id and createdAt when saving', async t => { const clock = sinon.useFakeTimers(); diff --git a/src/test/e2e/stores/project-store.e2e.test.js b/src/test/e2e/stores/project-store.e2e.test.js index e04de9ca18..d40a0234d7 100644 --- a/src/test/e2e/stores/project-store.e2e.test.js +++ b/src/test/e2e/stores/project-store.e2e.test.js @@ -5,16 +5,17 @@ const dbInit = require('../helpers/database-init'); const getLogger = require('../../fixtures/no-logger'); let stores; +let db; let projectStore; test.before(async () => { - const db = await dbInit('project_store_serial', getLogger); + db = await dbInit('project_store_serial', getLogger); stores = db.stores; projectStore = stores.projectStore; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('should have default project', async t => { diff --git a/src/test/e2e/stores/setting-store.e2e.test.js b/src/test/e2e/stores/setting-store.e2e.test.js index 104e330284..f424f598eb 100644 --- a/src/test/e2e/stores/setting-store.e2e.test.js +++ b/src/test/e2e/stores/setting-store.e2e.test.js @@ -5,14 +5,15 @@ const dbInit = require('../helpers/database-init'); const getLogger = require('../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('setting_store_serial', getLogger); + db = await dbInit('setting_store_serial', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('should have api secret stored', async t => { @@ -20,7 +21,7 @@ test.serial('should have api secret stored', async t => { t.assert(secret); }); -test.serial('should insert arbitarty value', async t => { +test.serial('should insert arbitrary value', async t => { const value = { b: 'hello' }; await stores.settingStore.insert('unleash.custom', value); const ret = await stores.settingStore.get('unleash.custom'); diff --git a/src/test/e2e/stores/user-store.e2e.test.js b/src/test/e2e/stores/user-store.e2e.test.js index dff7a748e9..305ec93708 100644 --- a/src/test/e2e/stores/user-store.e2e.test.js +++ b/src/test/e2e/stores/user-store.e2e.test.js @@ -12,14 +12,15 @@ const dbInit = require('../helpers/database-init'); const getLogger = require('../../fixtures/no-logger'); let stores; +let db; test.before(async () => { - const db = await dbInit('user_store_serial', getLogger); + db = await dbInit('user_store_serial', getLogger); stores = db.stores; }); test.after(async () => { - await stores.db.destroy(); + await db.destroy(); }); test.serial('should have no users', async t => {