From e1e41ff77d371c514004074d9df970e1caad0e3a Mon Sep 17 00:00:00 2001 From: Cristian Greco Date: Mon, 12 Oct 2026 20:17:30 +0100 Subject: [PATCH 1/5] Test Neo4j, ScyllaDB and SQL Server against their supported versions --- packages/modules/mssqlserver/Dockerfile | 2 +- .../src/mssqlserver-container.test.ts | 66 ++++++++++++------- packages/modules/neo4j/Dockerfile | 2 +- .../modules/neo4j/src/neo4j-container.test.ts | 11 ++-- packages/modules/scylladb/Dockerfile | 2 +- .../scylladb/src/scylladb-container.test.ts | 30 +++++++-- 6 files changed, 76 insertions(+), 37 deletions(-) diff --git a/packages/modules/mssqlserver/Dockerfile b/packages/modules/mssqlserver/Dockerfile index 19d735d48..f17cc31f5 100644 --- a/packages/modules/mssqlserver/Dockerfile +++ b/packages/modules/mssqlserver/Dockerfile @@ -1 +1 @@ -FROM mcr.microsoft.com/mssql/server:2022-CU13-ubuntu-22.04 +FROM mcr.microsoft.com/mssql/server:2025-CU9-ubuntu-24.04 diff --git a/packages/modules/mssqlserver/src/mssqlserver-container.test.ts b/packages/modules/mssqlserver/src/mssqlserver-container.test.ts index 5c888c244..132f5c619 100644 --- a/packages/modules/mssqlserver/src/mssqlserver-container.test.ts +++ b/packages/modules/mssqlserver/src/mssqlserver-container.test.ts @@ -3,11 +3,12 @@ import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { MSSQLServerContainer } from "./mssqlserver-container"; const IMAGE = getImage(__dirname); +const OLDEST_IMAGE = "mcr.microsoft.com/mssql/server:2017-CU31-GDR9-ubuntu-18.04"; -describe("MSSQLServerContainer", { timeout: 180_000 }, () => { +describe.each([IMAGE, OLDEST_IMAGE])("MSSQLServerContainer (%s)", { timeout: 180_000 }, (image) => { it("should connect and return a query result", async () => { // mssqlConnect { - await using container = await new MSSQLServerContainer(IMAGE).acceptLicense().start(); + await using container = await new MSSQLServerContainer(image).acceptLicense().start(); const sqlConfig: config = { user: container.getUsername(), @@ -18,7 +19,7 @@ describe("MSSQLServerContainer", { timeout: 180_000 }, () => { pool: { max: 1, min: 0, idleTimeoutMillis: 30000 }, options: { trustServerCertificate: true }, }; - const connection = await sql.connect(sqlConfig); + const connection = await new sql.ConnectionPool(sqlConfig).connect(); const { recordset } = await connection.query`SELECT 1;`; expect(recordset).toStrictEqual([{ "": 1 }]); @@ -29,10 +30,10 @@ describe("MSSQLServerContainer", { timeout: 180_000 }, () => { it("should connect and return a query result with database URI", async () => { // mssqlUriConnect { - await using container = await new MSSQLServerContainer(IMAGE).acceptLicense().start(); + await using container = await new MSSQLServerContainer(image).acceptLicense().start(); const connectionString = container.getConnectionUri(); - const connection = await sql.connect(connectionString); + const connection = await new sql.ConnectionPool(connectionString).connect(); const { recordset } = await connection.query`SELECT 1;`; expect(recordset).toStrictEqual([{ "": 1 }]); @@ -43,11 +44,11 @@ describe("MSSQLServerContainer", { timeout: 180_000 }, () => { it("should connect and return a query result with valid custom password", async () => { // mssqlValidPassword { - await using container = await new MSSQLServerContainer(IMAGE).acceptLicense().withPassword("I!@M#$eCur3").start(); + await using container = await new MSSQLServerContainer(image).acceptLicense().withPassword("I!@M#$eCur3").start(); // } const connectionString = container.getConnectionUri(); - const connection = await sql.connect(connectionString); + const connection = await new sql.ConnectionPool(connectionString).connect(); const { recordset } = await connection.query`SELECT 1;`; expect(recordset).toStrictEqual([{ "": 1 }]); @@ -56,7 +57,7 @@ describe("MSSQLServerContainer", { timeout: 180_000 }, () => { }); it("should throw error with invalid password", async () => { - const container = new MSSQLServerContainer(IMAGE).acceptLicense().withPassword("password"); + const container = new MSSQLServerContainer(image).acceptLicense().withPassword("password"); await expect(container.start()).rejects.toThrow( Error('Log stream ended and message "/.*Recovery is complete.*/" was not received') ); @@ -64,29 +65,23 @@ describe("MSSQLServerContainer", { timeout: 180_000 }, () => { it("should start db with express edition", async () => { // mssqlExpressEdition { - await using container = await new MSSQLServerContainer(IMAGE) + await using container = await new MSSQLServerContainer(image) .acceptLicense() .withEnvironment({ MSSQL_PID: "Express" }) - .withWaitForMessage(/.*Attribute synchronization manager initialized*/) + .withWaitForMessage(/.*SQL Server is now ready for client connections.*/) .start(); // } - const { output, exitCode } = await container.exec([ - "/opt/mssql-tools/bin/sqlcmd", - "-S", - container.getHost(), - "-U", - container.getUsername(), - "-P", - container.getPassword(), - "-Q", - "SELECT @@VERSION;", - ]); - - expect(exitCode).toBe(0); - expect(output).toContain("Express Edition"); + const connection = await new sql.ConnectionPool(container.getConnectionUri()).connect(); + + const { recordset } = await connection.query`SELECT SERVERPROPERTY('Edition') AS edition;`; + expect(recordset[0].edition).toContain("Express Edition"); + + await connection.close(); }); +}); +describe("MSSQLServerContainer", { timeout: 180_000 }, () => { it("should use custom wait message", async () => { await using _ = await new MSSQLServerContainer("alpine") .withCommand(["/bin/sh", "-c", 'echo "custom ready"; sleep 5']) @@ -94,4 +89,27 @@ describe("MSSQLServerContainer", { timeout: 180_000 }, () => { .withStartupTimeout(1_000) .start(); }); + + it.each([ + "mcr.microsoft.com/mssql/server:2019-CU32-GDR8-ubuntu-20.04", + "mcr.microsoft.com/mssql/server:2022-CU27-ubuntu-22.04", + ])("should connect and return a query result with %s", async (image) => { + await using container = await new MSSQLServerContainer(image).acceptLicense().start(); + + const sqlConfig: config = { + user: container.getUsername(), + password: container.getPassword(), + database: container.getDatabase(), + server: container.getHost(), + port: container.getPort(), + pool: { max: 1, min: 0, idleTimeoutMillis: 30000 }, + options: { trustServerCertificate: true }, + }; + const connection = await new sql.ConnectionPool(sqlConfig).connect(); + + const { recordset } = await connection.query`SELECT 1;`; + expect(recordset).toStrictEqual([{ "": 1 }]); + + await connection.close(); + }); }); diff --git a/packages/modules/neo4j/Dockerfile b/packages/modules/neo4j/Dockerfile index c689e2d15..017d8a2c7 100644 --- a/packages/modules/neo4j/Dockerfile +++ b/packages/modules/neo4j/Dockerfile @@ -1 +1 @@ -FROM neo4j:5.26.31 +FROM neo4j:2026.09.0 diff --git a/packages/modules/neo4j/src/neo4j-container.test.ts b/packages/modules/neo4j/src/neo4j-container.test.ts index f18cd506b..93e6faa2f 100755 --- a/packages/modules/neo4j/src/neo4j-container.test.ts +++ b/packages/modules/neo4j/src/neo4j-container.test.ts @@ -3,11 +3,12 @@ import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { Neo4jContainer, Neo4jPlugin } from "./neo4j-container"; const IMAGE = getImage(__dirname); +const OLDEST_IMAGE = "neo4j:5.26.31"; -describe("Neo4jContainer", { timeout: 180_000 }, () => { +describe.each([IMAGE, OLDEST_IMAGE])("Neo4jContainer (%s)", { timeout: 180_000 }, (image) => { it("should create a person node", async () => { // createNode { - await using container = await new Neo4jContainer(IMAGE).start(); + await using container = await new Neo4jContainer(image).start(); const driver = neo4j.driver( container.getBoltUri(), @@ -28,7 +29,7 @@ describe("Neo4jContainer", { timeout: 180_000 }, () => { it("should connect with custom password", async () => { // setPassword { - await using container = await new Neo4jContainer(IMAGE).withPassword("xyz1234@!").start(); + await using container = await new Neo4jContainer(image).withPassword("xyz1234@!").start(); const driver = neo4j.driver( container.getBoltUri(), @@ -49,7 +50,7 @@ describe("Neo4jContainer", { timeout: 180_000 }, () => { it("should have APOC plugin installed", async () => { // apoc { - await using container = await new Neo4jContainer(IMAGE).withApoc().withStartupTimeout(120_000).start(); + await using container = await new Neo4jContainer(image).withApoc().withStartupTimeout(120_000).start(); const driver = neo4j.driver( container.getBoltUri(), @@ -68,7 +69,7 @@ describe("Neo4jContainer", { timeout: 180_000 }, () => { it("should work with plugin list", async () => { // pluginsList { - await using container = await new Neo4jContainer(IMAGE) + await using container = await new Neo4jContainer(image) .withPlugins([Neo4jPlugin.APOC_EXTENDED, Neo4jPlugin.GRAPH_DATA_SCIENCE]) .withStartupTimeout(120_000) .start(); diff --git a/packages/modules/scylladb/Dockerfile b/packages/modules/scylladb/Dockerfile index 50e248959..f10801d99 100644 --- a/packages/modules/scylladb/Dockerfile +++ b/packages/modules/scylladb/Dockerfile @@ -1 +1 @@ -FROM scylladb/scylla:6.2.3 +FROM scylladb/scylla:2026.3.3 diff --git a/packages/modules/scylladb/src/scylladb-container.test.ts b/packages/modules/scylladb/src/scylladb-container.test.ts index 6e33942a2..4ff2451f9 100644 --- a/packages/modules/scylladb/src/scylladb-container.test.ts +++ b/packages/modules/scylladb/src/scylladb-container.test.ts @@ -3,11 +3,12 @@ import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { ScyllaContainer } from "./scylladb-container"; const IMAGE = getImage(__dirname); +const OLDEST_IMAGE = "scylladb/scylla:2025.1.16"; -describe("ScyllaDB", { timeout: 240_000 }, () => { +describe.each([IMAGE, OLDEST_IMAGE])("ScyllaDB (%s)", { timeout: 240_000 }, (image) => { it("should connect and execute a query", async () => { // connectWithDefaultCredentials { - await using container = await new ScyllaContainer(IMAGE).start(); + await using container = await new ScyllaContainer(image).start(); const client = new Client({ contactPoints: [container.getContactPoint()], @@ -26,7 +27,7 @@ describe("ScyllaDB", { timeout: 240_000 }, () => { // createAndFetchData { it("should create keyspace, a table, insert data, and retrieve it", async () => { - await using container = await new ScyllaContainer(IMAGE).start(); + await using container = await new ScyllaContainer(image).start(); const client = new Client({ contactPoints: [container.getContactPoint()], @@ -38,7 +39,7 @@ describe("ScyllaDB", { timeout: 240_000 }, () => { // Create the keyspace await client.execute(` CREATE KEYSPACE IF NOT EXISTS test_keyspace - WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} + WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor': '1'} `); await client.execute("USE test_keyspace"); @@ -65,7 +66,7 @@ describe("ScyllaDB", { timeout: 240_000 }, () => { // } it("should work with restarted container", async () => { - await using container = await new ScyllaContainer(IMAGE).start(); + await using container = await new ScyllaContainer(image).start(); await container.restart(); const client = new Client({ @@ -82,3 +83,22 @@ describe("ScyllaDB", { timeout: 240_000 }, () => { await client.shutdown(); }); }); + +describe("ScyllaDB", { timeout: 240_000 }, () => { + it.each(["scylladb/scylla:2026.1.14"])("should connect and execute a query with %s", async (image) => { + await using container = await new ScyllaContainer(image).start(); + + const client = new Client({ + contactPoints: [container.getContactPoint()], + localDataCenter: container.getDatacenter(), + keyspace: "system", + }); + + await client.connect(); + + const result = await client.execute("SELECT cql_version FROM system.local"); + expect(result.rows[0].cql_version).toBe("3.3.1"); + + await client.shutdown(); + }); +}); From 529cdf4f7d28c02e1ea5eea890e34f09aa75b533 Mon Sep 17 00:00:00 2001 From: Cristian Greco Date: Tue, 13 Oct 2026 10:42:12 +0100 Subject: [PATCH 2/5] Loop the suites over a list of every supported image --- .../src/mssqlserver-container.test.ts | 35 +++++-------------- .../modules/neo4j/src/neo4j-container.test.ts | 5 ++- .../scylladb/src/scylladb-container.test.ts | 24 ++----------- 3 files changed, 12 insertions(+), 52 deletions(-) diff --git a/packages/modules/mssqlserver/src/mssqlserver-container.test.ts b/packages/modules/mssqlserver/src/mssqlserver-container.test.ts index 132f5c619..8d5851578 100644 --- a/packages/modules/mssqlserver/src/mssqlserver-container.test.ts +++ b/packages/modules/mssqlserver/src/mssqlserver-container.test.ts @@ -2,10 +2,14 @@ import sql, { type config } from "mssql"; import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { MSSQLServerContainer } from "./mssqlserver-container"; -const IMAGE = getImage(__dirname); -const OLDEST_IMAGE = "mcr.microsoft.com/mssql/server:2017-CU31-GDR9-ubuntu-18.04"; - -describe.each([IMAGE, OLDEST_IMAGE])("MSSQLServerContainer (%s)", { timeout: 180_000 }, (image) => { +const IMAGES = [ + "mcr.microsoft.com/mssql/server:2017-CU31-GDR9-ubuntu-18.04", + "mcr.microsoft.com/mssql/server:2019-CU32-GDR8-ubuntu-20.04", + "mcr.microsoft.com/mssql/server:2022-CU27-ubuntu-22.04", + getImage(__dirname), +]; + +describe.each(IMAGES)("MSSQLServerContainer (%s)", { timeout: 180_000 }, (image) => { it("should connect and return a query result", async () => { // mssqlConnect { await using container = await new MSSQLServerContainer(image).acceptLicense().start(); @@ -89,27 +93,4 @@ describe("MSSQLServerContainer", { timeout: 180_000 }, () => { .withStartupTimeout(1_000) .start(); }); - - it.each([ - "mcr.microsoft.com/mssql/server:2019-CU32-GDR8-ubuntu-20.04", - "mcr.microsoft.com/mssql/server:2022-CU27-ubuntu-22.04", - ])("should connect and return a query result with %s", async (image) => { - await using container = await new MSSQLServerContainer(image).acceptLicense().start(); - - const sqlConfig: config = { - user: container.getUsername(), - password: container.getPassword(), - database: container.getDatabase(), - server: container.getHost(), - port: container.getPort(), - pool: { max: 1, min: 0, idleTimeoutMillis: 30000 }, - options: { trustServerCertificate: true }, - }; - const connection = await new sql.ConnectionPool(sqlConfig).connect(); - - const { recordset } = await connection.query`SELECT 1;`; - expect(recordset).toStrictEqual([{ "": 1 }]); - - await connection.close(); - }); }); diff --git a/packages/modules/neo4j/src/neo4j-container.test.ts b/packages/modules/neo4j/src/neo4j-container.test.ts index 93e6faa2f..65b9b89eb 100755 --- a/packages/modules/neo4j/src/neo4j-container.test.ts +++ b/packages/modules/neo4j/src/neo4j-container.test.ts @@ -2,10 +2,9 @@ import neo4j from "neo4j-driver"; import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { Neo4jContainer, Neo4jPlugin } from "./neo4j-container"; -const IMAGE = getImage(__dirname); -const OLDEST_IMAGE = "neo4j:5.26.31"; +const IMAGES = ["neo4j:5.26.31", getImage(__dirname)]; -describe.each([IMAGE, OLDEST_IMAGE])("Neo4jContainer (%s)", { timeout: 180_000 }, (image) => { +describe.each(IMAGES)("Neo4jContainer (%s)", { timeout: 180_000 }, (image) => { it("should create a person node", async () => { // createNode { await using container = await new Neo4jContainer(image).start(); diff --git a/packages/modules/scylladb/src/scylladb-container.test.ts b/packages/modules/scylladb/src/scylladb-container.test.ts index 4ff2451f9..1d47786a9 100644 --- a/packages/modules/scylladb/src/scylladb-container.test.ts +++ b/packages/modules/scylladb/src/scylladb-container.test.ts @@ -2,10 +2,9 @@ import { Client } from "cassandra-driver"; // Scylla uses Cassandra's driver in import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { ScyllaContainer } from "./scylladb-container"; -const IMAGE = getImage(__dirname); -const OLDEST_IMAGE = "scylladb/scylla:2025.1.16"; +const IMAGES = ["scylladb/scylla:2025.1.16", "scylladb/scylla:2026.1.14", getImage(__dirname)]; -describe.each([IMAGE, OLDEST_IMAGE])("ScyllaDB (%s)", { timeout: 240_000 }, (image) => { +describe.each(IMAGES)("ScyllaDB (%s)", { timeout: 240_000 }, (image) => { it("should connect and execute a query", async () => { // connectWithDefaultCredentials { await using container = await new ScyllaContainer(image).start(); @@ -83,22 +82,3 @@ describe.each([IMAGE, OLDEST_IMAGE])("ScyllaDB (%s)", { timeout: 240_000 }, (ima await client.shutdown(); }); }); - -describe("ScyllaDB", { timeout: 240_000 }, () => { - it.each(["scylladb/scylla:2026.1.14"])("should connect and execute a query with %s", async (image) => { - await using container = await new ScyllaContainer(image).start(); - - const client = new Client({ - contactPoints: [container.getContactPoint()], - localDataCenter: container.getDatacenter(), - keyspace: "system", - }); - - await client.connect(); - - const result = await client.execute("SELECT cql_version FROM system.local"); - expect(result.rows[0].cql_version).toBe("3.3.1"); - - await client.shutdown(); - }); -}); From 4524ed4102132aa4ed4e2da1b420771f9ba3d7b5 Mon Sep 17 00:00:00 2001 From: Cristian Greco Date: Tue, 13 Oct 2026 11:12:16 +0100 Subject: [PATCH 3/5] List one image per supported major version --- packages/modules/scylladb/src/scylladb-container.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/scylladb/src/scylladb-container.test.ts b/packages/modules/scylladb/src/scylladb-container.test.ts index 1d47786a9..b0da8e4d0 100644 --- a/packages/modules/scylladb/src/scylladb-container.test.ts +++ b/packages/modules/scylladb/src/scylladb-container.test.ts @@ -2,7 +2,7 @@ import { Client } from "cassandra-driver"; // Scylla uses Cassandra's driver in import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { ScyllaContainer } from "./scylladb-container"; -const IMAGES = ["scylladb/scylla:2025.1.16", "scylladb/scylla:2026.1.14", getImage(__dirname)]; +const IMAGES = ["scylladb/scylla:2025.1.16", getImage(__dirname)]; describe.each(IMAGES)("ScyllaDB (%s)", { timeout: 240_000 }, (image) => { it("should connect and execute a query", async () => { From a4366115bb2d4aeae30d9a2c8b418d52deb3fbc6 Mon Sep 17 00:00:00 2001 From: Cristian Greco Date: Tue, 13 Oct 2026 12:44:50 +0100 Subject: [PATCH 4/5] Run the images one after another and each image's tests concurrently --- .../mssqlserver/src/mssqlserver-container.test.ts | 12 ++++++------ packages/modules/neo4j/src/neo4j-container.test.ts | 10 +++++----- .../modules/scylladb/src/scylladb-container.test.ts | 8 ++++---- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/modules/mssqlserver/src/mssqlserver-container.test.ts b/packages/modules/mssqlserver/src/mssqlserver-container.test.ts index 8d5851578..99729ad9d 100644 --- a/packages/modules/mssqlserver/src/mssqlserver-container.test.ts +++ b/packages/modules/mssqlserver/src/mssqlserver-container.test.ts @@ -9,8 +9,8 @@ const IMAGES = [ getImage(__dirname), ]; -describe.each(IMAGES)("MSSQLServerContainer (%s)", { timeout: 180_000 }, (image) => { - it("should connect and return a query result", async () => { +describe.each(IMAGES)("MSSQLServerContainer (%s)", { concurrent: false, timeout: 180_000 }, (image) => { + it.concurrent("should connect and return a query result", async () => { // mssqlConnect { await using container = await new MSSQLServerContainer(image).acceptLicense().start(); @@ -32,7 +32,7 @@ describe.each(IMAGES)("MSSQLServerContainer (%s)", { timeout: 180_000 }, (image) // } }); - it("should connect and return a query result with database URI", async () => { + it.concurrent("should connect and return a query result with database URI", async () => { // mssqlUriConnect { await using container = await new MSSQLServerContainer(image).acceptLicense().start(); @@ -46,7 +46,7 @@ describe.each(IMAGES)("MSSQLServerContainer (%s)", { timeout: 180_000 }, (image) // } }); - it("should connect and return a query result with valid custom password", async () => { + it.concurrent("should connect and return a query result with valid custom password", async () => { // mssqlValidPassword { await using container = await new MSSQLServerContainer(image).acceptLicense().withPassword("I!@M#$eCur3").start(); // } @@ -60,14 +60,14 @@ describe.each(IMAGES)("MSSQLServerContainer (%s)", { timeout: 180_000 }, (image) await connection.close(); }); - it("should throw error with invalid password", async () => { + it.concurrent("should throw error with invalid password", async () => { const container = new MSSQLServerContainer(image).acceptLicense().withPassword("password"); await expect(container.start()).rejects.toThrow( Error('Log stream ended and message "/.*Recovery is complete.*/" was not received') ); }); - it("should start db with express edition", async () => { + it.concurrent("should start db with express edition", async () => { // mssqlExpressEdition { await using container = await new MSSQLServerContainer(image) .acceptLicense() diff --git a/packages/modules/neo4j/src/neo4j-container.test.ts b/packages/modules/neo4j/src/neo4j-container.test.ts index 65b9b89eb..45671d478 100755 --- a/packages/modules/neo4j/src/neo4j-container.test.ts +++ b/packages/modules/neo4j/src/neo4j-container.test.ts @@ -4,8 +4,8 @@ import { Neo4jContainer, Neo4jPlugin } from "./neo4j-container"; const IMAGES = ["neo4j:5.26.31", getImage(__dirname)]; -describe.each(IMAGES)("Neo4jContainer (%s)", { timeout: 180_000 }, (image) => { - it("should create a person node", async () => { +describe.each(IMAGES)("Neo4jContainer (%s)", { concurrent: false, timeout: 180_000 }, (image) => { + it.concurrent("should create a person node", async () => { // createNode { await using container = await new Neo4jContainer(image).start(); @@ -26,7 +26,7 @@ describe.each(IMAGES)("Neo4jContainer (%s)", { timeout: 180_000 }, (image) => { // } }); - it("should connect with custom password", async () => { + it.concurrent("should connect with custom password", async () => { // setPassword { await using container = await new Neo4jContainer(image).withPassword("xyz1234@!").start(); @@ -47,7 +47,7 @@ describe.each(IMAGES)("Neo4jContainer (%s)", { timeout: 180_000 }, (image) => { await driver.close(); }); - it("should have APOC plugin installed", async () => { + it.concurrent("should have APOC plugin installed", async () => { // apoc { await using container = await new Neo4jContainer(image).withApoc().withStartupTimeout(120_000).start(); @@ -66,7 +66,7 @@ describe.each(IMAGES)("Neo4jContainer (%s)", { timeout: 180_000 }, (image) => { await driver.close(); }); - it("should work with plugin list", async () => { + it.concurrent("should work with plugin list", async () => { // pluginsList { await using container = await new Neo4jContainer(image) .withPlugins([Neo4jPlugin.APOC_EXTENDED, Neo4jPlugin.GRAPH_DATA_SCIENCE]) diff --git a/packages/modules/scylladb/src/scylladb-container.test.ts b/packages/modules/scylladb/src/scylladb-container.test.ts index b0da8e4d0..803201607 100644 --- a/packages/modules/scylladb/src/scylladb-container.test.ts +++ b/packages/modules/scylladb/src/scylladb-container.test.ts @@ -4,8 +4,8 @@ import { ScyllaContainer } from "./scylladb-container"; const IMAGES = ["scylladb/scylla:2025.1.16", getImage(__dirname)]; -describe.each(IMAGES)("ScyllaDB (%s)", { timeout: 240_000 }, (image) => { - it("should connect and execute a query", async () => { +describe.each(IMAGES)("ScyllaDB (%s)", { concurrent: false, timeout: 240_000 }, (image) => { + it.concurrent("should connect and execute a query", async () => { // connectWithDefaultCredentials { await using container = await new ScyllaContainer(image).start(); @@ -25,7 +25,7 @@ describe.each(IMAGES)("ScyllaDB (%s)", { timeout: 240_000 }, (image) => { }); // createAndFetchData { - it("should create keyspace, a table, insert data, and retrieve it", async () => { + it.concurrent("should create keyspace, a table, insert data, and retrieve it", async () => { await using container = await new ScyllaContainer(image).start(); const client = new Client({ @@ -64,7 +64,7 @@ describe.each(IMAGES)("ScyllaDB (%s)", { timeout: 240_000 }, (image) => { }); // } - it("should work with restarted container", async () => { + it.concurrent("should work with restarted container", async () => { await using container = await new ScyllaContainer(image).start(); await container.restart(); From 18bb9d67dab66940fb6b3527646a25904fc415bc Mon Sep 17 00:00:00 2001 From: Cristian Greco Date: Tue, 13 Oct 2026 17:04:58 +0100 Subject: [PATCH 5/5] Test SQL Server only on the versions in mainstream support --- .../modules/mssqlserver/src/mssqlserver-container.test.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/modules/mssqlserver/src/mssqlserver-container.test.ts b/packages/modules/mssqlserver/src/mssqlserver-container.test.ts index 99729ad9d..337322851 100644 --- a/packages/modules/mssqlserver/src/mssqlserver-container.test.ts +++ b/packages/modules/mssqlserver/src/mssqlserver-container.test.ts @@ -2,12 +2,7 @@ import sql, { type config } from "mssql"; import { getImage } from "../../../testcontainers/src/utils/test-helper"; import { MSSQLServerContainer } from "./mssqlserver-container"; -const IMAGES = [ - "mcr.microsoft.com/mssql/server:2017-CU31-GDR9-ubuntu-18.04", - "mcr.microsoft.com/mssql/server:2019-CU32-GDR8-ubuntu-20.04", - "mcr.microsoft.com/mssql/server:2022-CU27-ubuntu-22.04", - getImage(__dirname), -]; +const IMAGES = ["mcr.microsoft.com/mssql/server:2022-CU27-ubuntu-22.04", getImage(__dirname)]; describe.each(IMAGES)("MSSQLServerContainer (%s)", { concurrent: false, timeout: 180_000 }, (image) => { it.concurrent("should connect and return a query result", async () => {