@@ -9,46 +9,52 @@ import { AbstractWaitStrategy } from "./wait-strategy";
99export type Log = string ;
1010
1111export 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