Skip to content

Commit bfbb016

Browse files
committed
Cleanup
1 parent 9c423b4 commit bfbb016

File tree

4 files changed

+35
-86
lines changed

4 files changed

+35
-86
lines changed

src/index.ts

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import path from "node:path"
44
import type {
55
ConnectionDetailsFromWorker,
66
InitialWorkerData,
7+
SharedWorkerFunctions,
8+
TestWorkerFunctions,
79
} from "./internal-types"
810
import type {
911
ConnectionDetails,
@@ -16,7 +18,6 @@ import type { Jsonifiable } from "type-fest"
1618
import type { ExecutionContext } from "ava"
1719
import { once } from "node:events"
1820
import { createBirpc } from "birpc"
19-
import { SharedWorkerFunctions, TestWorkerFunctions } from "./lib/rpc"
2021
import { ExecResult } from "testcontainers"
2122
import isPlainObject from "lodash/isPlainObject"
2223

@@ -187,23 +188,19 @@ export const getTestPostgresDatabaseFactory = <
187188
}
188189
)
189190

190-
// todo: properly tear down?
191-
const messageHandlerAbortController = new AbortController()
192-
const messageHandlerPromise = Promise.race([
193-
once(messageHandlerAbortController.signal, "abort"),
194-
(async () => {
195-
const worker = await workerPromise
196-
await worker.available
191+
// Automatically cleaned up by AVA since each test file runs in a separate worker
192+
const _messageHandlerPromise = (async () => {
193+
const worker = await workerPromise
194+
await worker.available
197195

198-
for await (const msg of worker.subscribe()) {
199-
rpcCallback!(msg.data)
200-
201-
if (messageHandlerAbortController.signal.aborted) {
202-
break
203-
}
196+
for await (const msg of worker.subscribe()) {
197+
if (msg.data.type === "teardown") {
198+
console.log("breaking")
199+
break
204200
}
205-
})(),
206-
])
201+
rpcCallback!(msg.data)
202+
}
203+
})()
207204

208205
const getTestPostgresDatabase: GetTestPostgresDatabase<Params> = async (
209206
t: ExecutionContext,

src/internal-types.ts

Lines changed: 16 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import type { ExecResult, StartedNetwork } from "testcontainers"
1+
import type { ExecResult } from "testcontainers"
22
import type { Jsonifiable } from "type-fest"
3+
34
import type {
45
ConnectionDetails,
56
GetTestPostgresDatabaseFactoryOptions,
@@ -13,52 +14,20 @@ export interface InitialWorkerData {
1314

1415
export type ConnectionDetailsFromWorker = Omit<ConnectionDetails, "pool">
1516

16-
export interface RequestDatabaseFromWorkerMessage {
17-
type: "GET_TEST_DATABASE"
18-
key?: string
19-
params?: Jsonifiable
20-
}
21-
22-
export interface RequestBeforeTemplateIsBakedHookToBeRunMessage {
23-
type: "RUN_HOOK_BEFORE_TEMPLATE_IS_BAKED"
24-
connectionDetails: ConnectionDetailsFromWorker
25-
}
26-
27-
export interface FinishedRunningBeforeTemplateIsBakedHookMessage {
28-
type: "FINISHED_RUNNING_HOOK_BEFORE_TEMPLATE_IS_BAKED"
29-
result:
30-
| {
31-
status: "success"
32-
result: any
33-
}
34-
| {
35-
status: "error"
36-
error: Error | string
37-
}
17+
export interface TestWorkerFunctions {
18+
runBeforeTemplateIsBakedHook: (
19+
connectionDetails: ConnectionDetailsFromWorker,
20+
params?: Jsonifiable
21+
) => Promise<unknown>
3822
}
3923

40-
export interface ExecCommandInContainerMessage {
41-
type: "EXEC_COMMAND_IN_CONTAINER"
42-
command: string[]
24+
export interface SharedWorkerFunctions {
25+
getTestDatabase: (options: {
26+
key?: string
27+
params?: Jsonifiable
28+
}) => Promise<{
29+
connectionDetails: ConnectionDetailsFromWorker
30+
beforeTemplateIsBakedResult: unknown
31+
}>
32+
execCommandInContainer: (command: string[]) => Promise<ExecResult>
4333
}
44-
45-
export interface ExecCommandInContainerResultMessage {
46-
type: "EXEC_COMMAND_IN_CONTAINER_RESULT"
47-
result: ExecResult
48-
}
49-
50-
export interface GotDatabaseMessage {
51-
type: "GOT_DATABASE"
52-
connectionDetails: ConnectionDetailsFromWorker
53-
beforeTemplateIsBakedResult: FinishedRunningBeforeTemplateIsBakedHookMessage["result"]
54-
}
55-
56-
export type MessageToWorker =
57-
| RequestDatabaseFromWorkerMessage
58-
| FinishedRunningBeforeTemplateIsBakedHookMessage
59-
| ExecCommandInContainerMessage
60-
export type MessageFromWorker =
61-
| RequestBeforeTemplateIsBakedHookToBeRunMessage
62-
| GotDatabaseMessage
63-
| ExecCommandInContainerResultMessage
64-
export type WorkerMessage = MessageToWorker | MessageFromWorker

src/lib/rpc.ts

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/worker.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ import pg from "pg"
22
import { GenericContainer, Network } from "testcontainers"
33
import { Mutex } from "async-mutex"
44
import hash from "object-hash"
5-
import type { InitialWorkerData } from "./internal-types"
5+
import type {
6+
InitialWorkerData,
7+
SharedWorkerFunctions,
8+
TestWorkerFunctions,
9+
} from "./internal-types"
610
import getRandomDatabaseName from "./lib/get-random-database-name"
711
import type { SharedWorker } from "ava/plugin"
812
import { type BirpcReturn, type ChannelOptions, createBirpc } from "birpc"
913
import { once } from "node:events"
10-
import type { SharedWorkerFunctions, TestWorkerFunctions } from "./lib/rpc"
1114
import type { Jsonifiable } from "type-fest"
1215

1316
type WorkerRpc = BirpcReturn<TestWorkerFunctions, SharedWorkerFunctions>
@@ -54,6 +57,7 @@ export class Worker {
5457
testWorker.teardown(async () => {
5558
messageHandlerAbortController.abort()
5659
await messageHandlerPromise
60+
testWorker.publish({ type: "teardown" })
5761
})
5862

5963
const rpc: WorkerRpc = createBirpc<

0 commit comments

Comments
 (0)