Skip to content

Commit 2480490

Browse files
committed
Bump testcontainers to v10
Breaking change. May fix segfault issues for consumers. Check the "connect from another container" test in `src/tests/connection-details.test.ts` if you need to construct a `StartedNetwork()`.
1 parent b9059e9 commit 2480490

File tree

7 files changed

+110
-95
lines changed

7 files changed

+110
-95
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"execa": "6.1.0",
3939
"prettier": "2.7.1",
4040
"semantic-release": "19.0.5",
41-
"testcontainers": "^9.9.1",
41+
"testcontainers": "^10.4.0",
4242
"tsup": "6.2.3",
4343
"type-fest": "3.6.1",
4444
"typescript": "4.8.2"
@@ -51,7 +51,7 @@
5151
},
5252
"peerDependencies": {
5353
"ava": ">=4.3.3",
54-
"testcontainers": ">=9.0.0"
54+
"testcontainers": ">=10.0.0"
5555
},
5656
"scripts": {
5757
"test": "ava",

src/index.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,6 @@ export const getTestPostgresDatabaseFactory = <
9292

9393
return {
9494
...connectionDetailsFromWorker,
95-
networkDocker: new StartedNetwork(
96-
connectionDetailsFromWorker.networkDocker.id,
97-
connectionDetailsFromWorker.networkDocker.options
98-
),
9995
pool,
10096
}
10197
}

src/internal-types.ts

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,16 @@
1-
import type { StartedNetwork } from "testcontainers"
1+
import type { ExecResult, StartedNetwork } from "testcontainers"
22
import type { Jsonifiable } from "type-fest"
33
import type {
44
ConnectionDetails,
55
GetTestPostgresDatabaseFactoryOptions,
66
} from "./public-types"
7-
import type { ExecResult } from "testcontainers/dist/src/docker/types"
87

98
export interface InitialWorkerData {
109
postgresVersion: string
1110
containerOptions?: GetTestPostgresDatabaseFactoryOptions<any>["container"]
1211
}
1312

14-
export type ConnectionDetailsFromWorker = Omit<
15-
ConnectionDetails,
16-
"pool" | "networkDocker"
17-
> & {
18-
networkDocker: {
19-
id: ConstructorParameters<typeof StartedNetwork>[0]
20-
options: ConstructorParameters<typeof StartedNetwork>[1]
21-
}
22-
}
13+
export type ConnectionDetailsFromWorker = Omit<ConnectionDetails, "pool">
2314

2415
export interface RequestDatabaseFromWorkerMessage {
2516
type: "GET_TEST_DATABASE"

src/public-types.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import type { Pool } from "pg"
22
import type { Jsonifiable } from "type-fest"
3-
import type { StartedNetwork } from "testcontainers"
4-
import type { BindMode, ExecResult } from "testcontainers/dist/src/docker/types"
53
import { ExecutionContext } from "ava"
4+
import { ExecResult } from "testcontainers"
5+
import { BindMode } from "testcontainers/build/types"
66

77
export interface ConnectionDetails {
88
connectionString: string
99
connectionStringDocker: string
10-
networkDocker: StartedNetwork
10+
dockerNetworkId: string
1111

1212
host: string
1313
port: number

src/tests/connection-details.test.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import test from "ava"
22
import { Pool } from "pg"
33
import { getTestPostgresDatabaseFactory } from "~/index"
4-
import { GenericContainer } from "testcontainers"
4+
import {
5+
GenericContainer,
6+
StartedNetwork,
7+
getContainerRuntimeClient,
8+
} from "testcontainers"
59

610
const getTestServer = getTestPostgresDatabaseFactory({
711
postgresVersion: process.env.POSTGRES_VERSION,
@@ -31,11 +35,19 @@ test("using connection details manually works", async (t) => {
3135
})
3236

3337
test("connect from another container", async (t) => {
34-
const { connectionStringDocker, networkDocker } = await getTestServer(t)
38+
const { connectionStringDocker, dockerNetworkId } = await getTestServer(t)
39+
40+
const testContainersClient = await getContainerRuntimeClient()
41+
const internalNetwork = testContainersClient.network.getById(dockerNetworkId)
42+
const network = new StartedNetwork(
43+
testContainersClient,
44+
dockerNetworkId,
45+
internalNetwork
46+
)
3547

3648
const container = await new GenericContainer("postgres:14")
3749
.withEnvironment({ POSTGRES_HOST_AUTH_METHOD: "trust" })
38-
.withNetwork(networkDocker)
50+
.withNetwork(network)
3951
.withStartupTimeout(120_000)
4052
.start()
4153

src/worker.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import pg from "pg"
2-
import { GenericContainer, Network } from "testcontainers"
2+
import {
3+
GenericContainer,
4+
Network,
5+
StartedNetwork,
6+
getContainerRuntimeClient,
7+
} from "testcontainers"
38
import { Mutex } from "async-mutex"
49
import hash from "object-hash"
510
import {
@@ -251,12 +256,7 @@ export class Worker {
251256
connectionStringDocker: `postgresql://postgres:@${container
252257
.getName()
253258
.replace("/", "")}:5432/${databaseName}`,
254-
networkDocker: {
255-
id: network.getId(),
256-
// StartedNetwork.options is private, however we must access it here
257-
// using type-safe string index notation for serialization.
258-
options: network["options"],
259-
},
259+
dockerNetworkId: network.getId(),
260260
host: container.getHost(),
261261
port: container.getMappedPort(5432),
262262
database: databaseName,

0 commit comments

Comments
 (0)