Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 14 additions & 14 deletions packages/modules/cockroachdb/src/cockroachdb-container.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ import { Client } from "pg";
import { getImage } from "../../../testcontainers/src/utils/test-helper";
import { CockroachDbContainer } from "./cockroachdb-container";

const IMAGE = getImage(__dirname);
const IMAGES = ["cockroachdb/cockroach:v24.3.36", "cockroachdb/cockroach:v25.4.17", getImage(__dirname)];

describe("CockroachDbContainer", { timeout: 180_000 }, () => {
it("should connect and return a query result", async () => {
describe.each(IMAGES)("CockroachDbContainer (%s)", { concurrent: false, timeout: 180_000 }, (image) => {
it.concurrent("should connect and return a query result", async () => {
// cockroachConnect {
await using container = await new CockroachDbContainer(IMAGE).start();
await using container = await new CockroachDbContainer(image).start();

const client = new Client({
host: container.getHost(),
Expand All @@ -26,9 +26,9 @@ describe("CockroachDbContainer", { timeout: 180_000 }, () => {
// }
});

it("should work with database URI", async () => {
it.concurrent("should work with database URI", async () => {
// uriConnect {
await using container = await new CockroachDbContainer(IMAGE).start();
await using container = await new CockroachDbContainer(image).start();

const client = new Client({
connectionString: container.getConnectionUri(),
Expand All @@ -43,9 +43,9 @@ describe("CockroachDbContainer", { timeout: 180_000 }, () => {
await client.end();
});

it("should set database", async () => {
it.concurrent("should set database", async () => {
// setDatabase {
await using container = await new CockroachDbContainer(IMAGE).withDatabase("custom_database").start();
await using container = await new CockroachDbContainer(image).withDatabase("custom_database").start();
// }

const client = new Client({
Expand All @@ -63,9 +63,9 @@ describe("CockroachDbContainer", { timeout: 180_000 }, () => {
await client.end();
});

it("should set username", async () => {
it.concurrent("should set username", async () => {
// setUsername {
await using container = await new CockroachDbContainer(IMAGE).withUsername("custom_username").start();
await using container = await new CockroachDbContainer(image).withUsername("custom_username").start();
// }

const client = new Client({
Expand All @@ -83,8 +83,8 @@ describe("CockroachDbContainer", { timeout: 180_000 }, () => {
await client.end();
});

it("should work with restarted container", async () => {
await using container = await new CockroachDbContainer(IMAGE).start();
it.concurrent("should work with restarted container", async () => {
await using container = await new CockroachDbContainer(image).start();
await container.restart();

const client = new Client({
Expand All @@ -101,8 +101,8 @@ describe("CockroachDbContainer", { timeout: 180_000 }, () => {
await client.end();
});

it("should allow custom healthcheck", async () => {
const container = new CockroachDbContainer(IMAGE).withHealthCheck({
it.concurrent("should allow custom healthcheck", async () => {
const container = new CockroachDbContainer(image).withHealthCheck({
test: ["CMD-SHELL", "exit 1"],
interval: 100,
retries: 0,
Expand Down
26 changes: 13 additions & 13 deletions packages/modules/mariadb/src/mariadb-container.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ import { createConnection } from "mariadb";
import { getImage } from "../../../testcontainers/src/utils/test-helper";
import { MariaDbContainer } from "./mariadb-container";

const IMAGE = getImage(__dirname);
const IMAGES = ["mariadb:10.11.19", "mariadb:11.8.9", "mariadb:12.3.3", getImage(__dirname)];

describe("MariaDbContainer", { timeout: 240_000 }, () => {
it("should connect and execute query", async () => {
describe.each(IMAGES)("MariaDbContainer (%s)", { concurrent: false, timeout: 240_000 }, (image) => {
it.concurrent("should connect and execute query", async () => {
// mariaDbConnect {
await using container = await new MariaDbContainer(IMAGE).start();
await using container = await new MariaDbContainer(image).start();

const client = await createConnection({
host: container.getHost(),
Expand All @@ -24,14 +24,14 @@ describe("MariaDbContainer", { timeout: 240_000 }, () => {
// }
});

it("should work with database URI", async () => {
it.concurrent("should work with database URI", async () => {
// mariaDbUriConnect {
const username = "testUser";
const password = "testPassword";
const database = "testDB";

// Test non-root user
await using container = await new MariaDbContainer(IMAGE)
await using container = await new MariaDbContainer(image)
.withUsername(username)
.withUserPassword(password)
.withDatabase(database)
Expand All @@ -42,7 +42,7 @@ describe("MariaDbContainer", { timeout: 240_000 }, () => {
);

// Test root user
await using rootContainer = await new MariaDbContainer(IMAGE)
await using rootContainer = await new MariaDbContainer(image)
.withRootPassword(password)
.withDatabase(database)
.start();
Expand All @@ -53,9 +53,9 @@ describe("MariaDbContainer", { timeout: 240_000 }, () => {
// }
});

it("should set database", async () => {
it.concurrent("should set database", async () => {
// mariaDbSetDatabase {
await using container = await new MariaDbContainer(IMAGE).withDatabase("customDatabase").start();
await using container = await new MariaDbContainer(image).withDatabase("customDatabase").start();

const client = await createConnection({
host: container.getHost(),
Expand All @@ -72,9 +72,9 @@ describe("MariaDbContainer", { timeout: 240_000 }, () => {
// }
});

it("should set username", async () => {
it.concurrent("should set username", async () => {
// mariaDbSetUsername {
await using container = await new MariaDbContainer(IMAGE).withUsername("customUsername").start();
await using container = await new MariaDbContainer(image).withUsername("customUsername").start();

const client = await createConnection({
host: container.getHost(),
Expand All @@ -91,8 +91,8 @@ describe("MariaDbContainer", { timeout: 240_000 }, () => {
// }
});

it("should work with restarted container", async () => {
await using container = await new MariaDbContainer(IMAGE).start();
it.concurrent("should work with restarted container", async () => {
await using container = await new MariaDbContainer(image).start();
await container.restart();

const client = await createConnection({
Expand Down
34 changes: 17 additions & 17 deletions packages/modules/mysql/src/mysql-container.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ import { createConnection } from "mysql2/promise";
import { getImage } from "../../../testcontainers/src/utils/test-helper";
import { MySqlContainer } from "./mysql-container";

const IMAGE = getImage(__dirname);
const IMAGES = ["mysql:8.4.11", "mysql:9.7.2", getImage(__dirname)];

describe("MySqlContainer", { timeout: 240_000 }, () => {
it("should connect and execute query", async () => {
describe.each(IMAGES)("MySqlContainer (%s)", { concurrent: false, timeout: 240_000 }, (image) => {
it.concurrent("should connect and execute query", async () => {
// mysqlConnect {
await using container = await new MySqlContainer(IMAGE).start();
await using container = await new MySqlContainer(image).start();

const client = await createConnection({
host: container.getHost(),
Expand All @@ -24,13 +24,13 @@ describe("MySqlContainer", { timeout: 240_000 }, () => {
// }
});

it("should work with database URI", async () => {
it.concurrent("should work with database URI", async () => {
// mysqlUriConnect {
const username = "testUser";
const password = "testPassword";
const database = "testDB";

await using container = await new MySqlContainer(IMAGE)
await using container = await new MySqlContainer(image)
.withUsername(username)
.withUserPassword(password)
.withDatabase(database)
Expand All @@ -40,7 +40,7 @@ describe("MySqlContainer", { timeout: 240_000 }, () => {
`mysql://${username}:${password}@${container.getHost()}:${container.getPort()}/${database}`
);

await using rootContainer = await new MySqlContainer(IMAGE)
await using rootContainer = await new MySqlContainer(image)
.withRootPassword(password)
.withDatabase(database)
.start();
Expand All @@ -51,9 +51,9 @@ describe("MySqlContainer", { timeout: 240_000 }, () => {
// }
});

it("should set database", async () => {
it.concurrent("should set database", async () => {
// mysqlSetDatabase {
await using container = await new MySqlContainer(IMAGE).withDatabase("customDatabase").start();
await using container = await new MySqlContainer(image).withDatabase("customDatabase").start();

const client = await createConnection({
host: container.getHost(),
Expand All @@ -71,8 +71,8 @@ describe("MySqlContainer", { timeout: 240_000 }, () => {
});

// mysqlSetUsername {
it("should set username", async () => {
await using container = await new MySqlContainer(IMAGE).withUsername("customUsername").start();
it.concurrent("should set username", async () => {
await using container = await new MySqlContainer(image).withUsername("customUsername").start();

const client = await createConnection({
host: container.getHost(),
Expand All @@ -89,17 +89,17 @@ describe("MySqlContainer", { timeout: 240_000 }, () => {
});
// }

it("should execute a query and return the result", async () => {
it.concurrent("should execute a query and return the result", async () => {
// mysqlExecuteQuery {
await using container = await new MySqlContainer(IMAGE).start();
await using container = await new MySqlContainer(image).start();

const result = await container.executeQuery("SELECT 1 as res");
expect(result).toEqual(expect.stringContaining("res\n1\n"));
// }
});

it("should execute a query as root user", async () => {
await using container = await new MySqlContainer(IMAGE).withUsername("customUsername").start();
it.concurrent("should execute a query as root user", async () => {
await using container = await new MySqlContainer(image).withUsername("customUsername").start();

// Test non-root user
const queryResult = await container.executeQuery("SELECT CURRENT_USER() as user");
Expand All @@ -110,8 +110,8 @@ describe("MySqlContainer", { timeout: 240_000 }, () => {
expect(rootQueryResult).toEqual(expect.stringContaining("user\nroot"));
});

it("should work with restarted container", async () => {
await using container = await new MySqlContainer(IMAGE).start();
it.concurrent("should work with restarted container", async () => {
await using container = await new MySqlContainer(image).start();
await container.restart();

const client = await createConnection({
Expand Down
3 changes: 3 additions & 0 deletions packages/modules/postgresql/Dockerfile
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
FROM postgres:18.6-alpine
FROM pgvector/pgvector:0.8.7-pg18
FROM postgis/postgis:18-3.6
FROM timescale/timescaledb:2.30.2-pg18
2 changes: 1 addition & 1 deletion packages/modules/postgresql/src/pgvector-container.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Client } from "pg";
import { getImage } from "../../../testcontainers/src/utils/test-helper";
import { PostgreSqlContainer } from "./postgresql-container";

const IMAGE = getImage(__dirname);
const IMAGE = getImage(__dirname, 1);
const SSL_SERVER_CERT = path.resolve(__dirname, "test-certs/server.crt");
const SSL_SERVER_KEY = path.resolve(__dirname, "test-certs/server.key");

Expand Down
13 changes: 9 additions & 4 deletions packages/modules/postgresql/src/postgis-container.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@ import { Client } from "pg";
import { getImage } from "../../../testcontainers/src/utils/test-helper";
import { PostgreSqlContainer } from "./postgresql-container";

const IMAGE = getImage(__dirname);
const IMAGE = getImage(__dirname, 2);
// postgis/postgis publishes no arm64 image.
const PLATFORM = "linux/amd64";
const SSL_SERVER_CERT = path.resolve(__dirname, "test-certs/server.crt");
const SSL_SERVER_KEY = path.resolve(__dirname, "test-certs/server.key");

describe("PostgisContainer", { timeout: 180_000 }, () => {
it("should work", async () => {
await using container = await new PostgreSqlContainer(IMAGE).start();
await using container = await new PostgreSqlContainer(IMAGE).withPlatform(PLATFORM).start();

const client = new Client({
host: container.getHost(),
Expand All @@ -27,7 +29,7 @@ describe("PostgisContainer", { timeout: 180_000 }, () => {
});

it("should restart", async () => {
await using container = await new PostgreSqlContainer(IMAGE).start();
await using container = await new PostgreSqlContainer(IMAGE).withPlatform(PLATFORM).start();
await container.restart();

const client = new Client({
Expand All @@ -46,7 +48,10 @@ describe("PostgisContainer", { timeout: 180_000 }, () => {
});

it("should connect with SSL", async () => {
await using container = await new PostgreSqlContainer(IMAGE).withSSL(SSL_SERVER_CERT, SSL_SERVER_KEY).start();
await using container = await new PostgreSqlContainer(IMAGE)
.withPlatform(PLATFORM)
.withSSL(SSL_SERVER_CERT, SSL_SERVER_KEY)
.start();

const client = new Client({
host: container.getHost(),
Expand Down
Loading
Loading