From 4908cc538736720834490663fe37a4a7496b4695 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Mon, 6 Feb 2023 19:43:08 +0000 Subject: [PATCH] Spin up postgres only on the postgres test --- hosting/docker-compose.test.yaml | 8 -------- .../tests/utilities/testContainerUtils.ts | 15 ++++++--------- packages/server/jest-testcontainers-config.js | 2 -- .../server/src/integration-test/postgres.spec.ts | 15 ++++++++++++--- 4 files changed, 18 insertions(+), 22 deletions(-) diff --git a/hosting/docker-compose.test.yaml b/hosting/docker-compose.test.yaml index 58936d233a..dfd78621c5 100644 --- a/hosting/docker-compose.test.yaml +++ b/hosting/docker-compose.test.yaml @@ -45,11 +45,3 @@ services: - 6379 healthcheck: test: ["CMD", "redis-cli", "ping"] - - postgres: - image: postgres - restart: on-failure - ports: - - 5432 - environment: - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} diff --git a/packages/backend-core/tests/utilities/testContainerUtils.ts b/packages/backend-core/tests/utilities/testContainerUtils.ts index f7f1b34b73..22198bd496 100644 --- a/packages/backend-core/tests/utilities/testContainerUtils.ts +++ b/packages/backend-core/tests/utilities/testContainerUtils.ts @@ -1,4 +1,7 @@ -function getTestContainerSettings(serverName: string, key: string) { +function getTestContainerSettings( + serverName: string, + key: string +): string | null { const entry = Object.entries(global).find( ([k]) => k.includes(`_${serverName.toUpperCase()}`) && @@ -19,7 +22,7 @@ function getContainerInfo(containerName: string, port: number) { return { port: assignedPort, host, - url: `http://${host}:${assignedPort}`, + url: host && assignedPort && `http://${host}:${assignedPort}`, } } @@ -31,21 +34,15 @@ function getMinioConfig() { return getContainerInfo("minio-service", 9000) } -function getPostgresConfig() { - return getContainerInfo("postgres", 5432) -} - export function setupEnv(...envs: any[]) { const configs = [ { key: "COUCH_DB_PORT", value: getCouchConfig().port }, { key: "COUCH_DB_URL", value: getCouchConfig().url }, { key: "MINIO_PORT", value: getMinioConfig().port }, { key: "MINIO_URL", value: getMinioConfig().url }, - { key: "POSTGRES_HOST", value: getPostgresConfig().host }, - { key: "POSTGRES_PORT", value: getPostgresConfig().port }, ] - for (const config of configs.filter(x => x.value !== null)) { + for (const config of configs.filter(x => !!x.value)) { for (const env of envs) { env._set(config.key, config.value) } diff --git a/packages/server/jest-testcontainers-config.js b/packages/server/jest-testcontainers-config.js index 48f9a9b21b..8ac0f0cd9d 100644 --- a/packages/server/jest-testcontainers-config.js +++ b/packages/server/jest-testcontainers-config.js @@ -3,8 +3,6 @@ require("dotenv").config({ path: join(__dirname, "..", "..", "hosting", ".env"), }) -process.env.POSTGRES_PASSWORD = "password" - const jestTestcontainersConfigGenerator = require("../../jestTestcontainersConfigGenerator") module.exports = jestTestcontainersConfigGenerator() diff --git a/packages/server/src/integration-test/postgres.spec.ts b/packages/server/src/integration-test/postgres.spec.ts index 59dc4b1894..75c232987b 100644 --- a/packages/server/src/integration-test/postgres.spec.ts +++ b/packages/server/src/integration-test/postgres.spec.ts @@ -13,8 +13,9 @@ import { Table, } from "@budibase/types" import _ from "lodash" -import { generator, structures } from "@budibase/backend-core/tests" +import { generator } from "@budibase/backend-core/tests" import { utils } from "@budibase/backend-core" +import { GenericContainer } from "testcontainers" const config = setup.getConfig()! @@ -26,10 +27,18 @@ describe("row api - postgres", () => { postgresTable: Table, auxPostgresTable: Table - const host = process.env.POSTGRES_HOST! - const port = process.env.POSTGRES_PORT! + let host: string + let port: number beforeAll(async () => { + const container = await new GenericContainer("postgres") + .withExposedPorts(5432) + .withEnv("POSTGRES_PASSWORD", "password") + .start() + + host = container.getContainerIpAddress() + port = container.getMappedPort(5432) + await config.init() const apiKey = await config.generateApiKey()