From eb33dac9b1cd0afcee95f3990b957f5b75042f62 Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Wed, 27 Mar 2024 16:40:41 +0000 Subject: [PATCH] Make container reuse optional, disabled by default. --- globalSetup.ts | 11 +++++++---- .../src/integrations/tests/utils/mariadb.ts | 15 +++++++++------ .../src/integrations/tests/utils/mongodb.ts | 15 +++++++++------ .../server/src/integrations/tests/utils/mssql.ts | 15 +++++++++------ .../server/src/integrations/tests/utils/mysql.ts | 16 ++++++++++------ .../src/integrations/tests/utils/postgres.ts | 16 ++++++++++------ 6 files changed, 54 insertions(+), 34 deletions(-) diff --git a/globalSetup.ts b/globalSetup.ts index 66d3f5fd8c..00d5e3f2dc 100644 --- a/globalSetup.ts +++ b/globalSetup.ts @@ -1,9 +1,7 @@ import { GenericContainer, Wait } from "testcontainers" export default async function setup() { - await new GenericContainer("budibase/couchdb") - .withName("budibase-test-couchdb") - .withReuse() + let couchdb = new GenericContainer("budibase/couchdb") .withExposedPorts(5984) .withEnvironment({ COUCHDB_PASSWORD: "budibase", @@ -23,5 +21,10 @@ export default async function setup() { "curl http://budibase:budibase@localhost:5984/_up" ).withStartupTimeout(20000) ) - .start() + + if (process.env.REUSE_CONTAINERS) { + couchdb = couchdb.withReuse() + } + + await couchdb.start() } diff --git a/packages/server/src/integrations/tests/utils/mariadb.ts b/packages/server/src/integrations/tests/utils/mariadb.ts index c8890af1fb..2634c9f913 100644 --- a/packages/server/src/integrations/tests/utils/mariadb.ts +++ b/packages/server/src/integrations/tests/utils/mariadb.ts @@ -22,16 +22,19 @@ class MariaDBWaitStrategy extends AbstractWaitStrategy { } export async function getDatasource(): Promise { - const container = await new GenericContainer("mariadb:lts") - .withName("budibase-test-mariadb") - .withReuse() + let container = new GenericContainer("mariadb:lts") .withExposedPorts(3306) .withEnvironment({ MARIADB_ROOT_PASSWORD: "password" }) .withWaitStrategy(new MariaDBWaitStrategy()) - .start() - const host = container.getHost() - const port = container.getMappedPort(3306) + if (process.env.REUSE_CONTAINERS) { + container = container.withReuse() + } + + const startedContainer = await container.start() + + const host = startedContainer.getHost() + const port = startedContainer.getMappedPort(3306) const config = { host, diff --git a/packages/server/src/integrations/tests/utils/mongodb.ts b/packages/server/src/integrations/tests/utils/mongodb.ts index 6ab5b11191..26fbff966e 100644 --- a/packages/server/src/integrations/tests/utils/mongodb.ts +++ b/packages/server/src/integrations/tests/utils/mongodb.ts @@ -2,9 +2,7 @@ import { Datasource, SourceName } from "@budibase/types" import { GenericContainer, Wait } from "testcontainers" export async function getDatasource(): Promise { - const container = await new GenericContainer("mongo:7.0-jammy") - .withName("budibase-test-mongodb") - .withReuse() + let container = new GenericContainer("mongo:7.0-jammy") .withExposedPorts(27017) .withEnvironment({ MONGO_INITDB_ROOT_USERNAME: "mongo", @@ -15,10 +13,15 @@ export async function getDatasource(): Promise { `mongosh --eval "db.version()"` ).withStartupTimeout(10000) ) - .start() - const host = container.getHost() - const port = container.getMappedPort(27017) + if (process.env.REUSE_CONTAINERS) { + container = container.withReuse() + } + + const startedContainer = await container.start() + + const host = startedContainer.getHost() + const port = startedContainer.getMappedPort(27017) return { type: "datasource", diff --git a/packages/server/src/integrations/tests/utils/mssql.ts b/packages/server/src/integrations/tests/utils/mssql.ts index c0875b84db..290bc78246 100644 --- a/packages/server/src/integrations/tests/utils/mssql.ts +++ b/packages/server/src/integrations/tests/utils/mssql.ts @@ -4,11 +4,9 @@ import mssql from "mssql" import { generator } from "@budibase/backend-core/tests" export async function getDatasource(): Promise { - const container = await new GenericContainer( + let container = new GenericContainer( "mcr.microsoft.com/mssql/server:2022-latest" ) - .withName("budibase-test-mssql") - .withReuse() .withExposedPorts(1433) .withEnvironment({ ACCEPT_EULA: "Y", @@ -24,10 +22,15 @@ export async function getDatasource(): Promise { "/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Password_123 -q 'SELECT 1'" ) ) - .start() - const host = container.getHost() - const port = container.getMappedPort(1433) + if (process.env.REUSE_CONTAINERS) { + container = container.withReuse() + } + + const startedContainer = await container.start() + + const host = startedContainer.getHost() + const port = startedContainer.getMappedPort(1433) const datasource: Datasource = { type: "datasource_plus", diff --git a/packages/server/src/integrations/tests/utils/mysql.ts b/packages/server/src/integrations/tests/utils/mysql.ts index 9fa8b0bd86..0f83128f26 100644 --- a/packages/server/src/integrations/tests/utils/mysql.ts +++ b/packages/server/src/integrations/tests/utils/mysql.ts @@ -25,15 +25,19 @@ class MySQLWaitStrategy extends AbstractWaitStrategy { } export async function getDatasource(): Promise { - const container = await new GenericContainer("mysql:8.3") - .withName("budibase-test-mysql") - .withReuse() + let container = new GenericContainer("mysql:8.3") .withExposedPorts(3306) .withEnvironment({ MYSQL_ROOT_PASSWORD: "password" }) .withWaitStrategy(new MySQLWaitStrategy().withStartupTimeout(10000)) - .start() - const host = container.getHost() - const port = container.getMappedPort(3306) + + if (process.env.REUSE_CONTAINERS) { + container = container.withReuse() + } + + const startedContainer = await container.start() + + const host = startedContainer.getHost() + const port = startedContainer.getMappedPort(3306) const datasource: Datasource = { type: "datasource_plus", diff --git a/packages/server/src/integrations/tests/utils/postgres.ts b/packages/server/src/integrations/tests/utils/postgres.ts index b10dfe44cf..237bc19a17 100644 --- a/packages/server/src/integrations/tests/utils/postgres.ts +++ b/packages/server/src/integrations/tests/utils/postgres.ts @@ -4,9 +4,7 @@ import pg from "pg" import { generator } from "@budibase/backend-core/tests" export async function getDatasource(): Promise { - const container = await new GenericContainer("postgres:16.1-bullseye") - .withName("budibase-test-postgres") - .withReuse() + let container = new GenericContainer("postgres:16.1-bullseye") .withExposedPorts(5432) .withEnvironment({ POSTGRES_PASSWORD: "password" }) .withWaitStrategy( @@ -14,9 +12,15 @@ export async function getDatasource(): Promise { "pg_isready -h localhost -p 5432" ).withStartupTimeout(10000) ) - .start() - const host = container.getHost() - const port = container.getMappedPort(5432) + + if (process.env.REUSE_CONTAINERS) { + container = container.withReuse() + } + + const startedContainer = await container.start() + + const host = startedContainer.getHost() + const port = startedContainer.getMappedPort(5432) const datasource: Datasource = { type: "datasource_plus",