Skip to content

Commit da4ed3f

Browse files
Refactor
1 parent a7f3525 commit da4ed3f

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

packages/testcontainers/src/wait-strategies/log-wait-strategy.ts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,46 +9,52 @@ import { AbstractWaitStrategy } from "./wait-strategy";
99
export type Log = string;
1010

1111
export class LogWaitStrategy extends AbstractWaitStrategy {
12-
private abortController!: AbortController;
13-
1412
constructor(
1513
private readonly message: Log | RegExp,
1614
private readonly times: number
1715
) {
1816
super();
1917
}
2018

21-
public async waitUntilReady(container: Dockerode.Container, boundPorts: BoundPorts, startTime?: Date): Promise<void> {
22-
this.abortController = new AbortController();
23-
await Promise.race([this.handleTimeout(container.id), this.handleLogs(container, startTime)]);
19+
async waitUntilReady(container: Dockerode.Container, boundPorts: BoundPorts, startTime?: Date): Promise<void> {
20+
const abortController = new AbortController();
21+
22+
await Promise.race([
23+
this.handleTimeout(container.id, abortController),
24+
this.handleLogs(container, startTime ? startTime.getTime() / 1000 : 0, abortController),
25+
]);
2426
}
2527

26-
async handleTimeout(containerId: string): Promise<void> {
28+
private async handleTimeout(containerId: string, abortController: AbortController): Promise<void> {
2729
try {
28-
await setTimeout(this.startupTimeout, undefined, { signal: this.abortController.signal });
30+
await setTimeout(this.startupTimeout, undefined, { signal: abortController.signal });
2931
} catch (err) {
3032
if (!(err instanceof Error && err.name === "AbortError")) {
3133
throw err;
3234
}
3335
}
3436
this.throwError(containerId, `Log message "${this.message}" not received after ${this.startupTimeout}ms`);
35-
this.abortController.abort();
37+
abortController.abort();
3638
}
3739

38-
async handleLogs(container: Dockerode.Container, startTime?: Date): Promise<void> {
40+
private async handleLogs(
41+
container: Dockerode.Container,
42+
startTime: number,
43+
abortController: AbortController
44+
): Promise<void> {
3945
log.debug(`Waiting for log message "${this.message}"...`, { containerId: container.id });
4046
const client = await getContainerRuntimeClient();
41-
const stream = await client.container.logs(container, { since: startTime ? startTime.getTime() / 1000 : 0 });
47+
const stream = await client.container.logs(container, { since: startTime });
4248

4349
let matches = 0;
4450
for await (const line of byline(stream)) {
45-
if (this.abortController.signal.aborted) {
51+
if (abortController.signal.aborted) {
4652
break;
4753
}
4854
if (this.matches(line)) {
4955
if (++matches === this.times) {
5056
log.debug(`Log wait strategy complete`, { containerId: container.id });
51-
this.abortController.abort();
57+
abortController.abort();
5258
return;
5359
}
5460
}

0 commit comments

Comments
 (0)