@@ -67,6 +67,29 @@ function createDefaultIsolatedRunner(): CronServiceOptions["runIsolatedAgentJob"
6767 } ) as CronServiceOptions [ "runIsolatedAgentJob" ] ;
6868}
6969
70+ function createAbortAwareIsolatedRunner ( summary = "late" ) {
71+ let observedAbortSignal : AbortSignal | undefined ;
72+ const runIsolatedAgentJob = vi . fn ( async ( { abortSignal } ) => {
73+ observedAbortSignal = abortSignal ;
74+ await new Promise < void > ( ( resolve ) => {
75+ if ( ! abortSignal ) {
76+ return ;
77+ }
78+ if ( abortSignal . aborted ) {
79+ resolve ( ) ;
80+ return ;
81+ }
82+ abortSignal . addEventListener ( "abort" , ( ) => resolve ( ) , { once : true } ) ;
83+ } ) ;
84+ return { status : "ok" as const , summary } ;
85+ } ) as CronServiceOptions [ "runIsolatedAgentJob" ] ;
86+
87+ return {
88+ runIsolatedAgentJob,
89+ getObservedAbortSignal : ( ) => observedAbortSignal ,
90+ } ;
91+ }
92+
7093function createIsolatedRegressionJob ( params : {
7194 id : string ;
7295 name : string ;
@@ -684,35 +707,25 @@ describe("Cron issue regressions", () => {
684707 await writeCronJobs ( store . storePath , [ cronJob ] ) ;
685708
686709 let now = scheduledAt ;
687- let observedAbortSignal : AbortSignal | undefined ;
710+ const abortAwareRunner = createAbortAwareIsolatedRunner ( ) ;
688711 const state = createCronServiceState ( {
689712 cronEnabled : true ,
690713 storePath : store . storePath ,
691714 log : noopLogger ,
692715 nowMs : ( ) => now ,
693716 enqueueSystemEvent : vi . fn ( ) ,
694717 requestHeartbeatNow : vi . fn ( ) ,
695- runIsolatedAgentJob : vi . fn ( async ( { abortSignal } ) => {
696- observedAbortSignal = abortSignal ;
697- await new Promise < void > ( ( resolve ) => {
698- if ( ! abortSignal ) {
699- return ;
700- }
701- if ( abortSignal . aborted ) {
702- resolve ( ) ;
703- return ;
704- }
705- abortSignal . addEventListener ( "abort" , ( ) => resolve ( ) , { once : true } ) ;
706- } ) ;
718+ runIsolatedAgentJob : vi . fn ( async ( params ) => {
719+ const result = await abortAwareRunner . runIsolatedAgentJob ( params ) ;
707720 now += 5 ;
708- return { status : "ok" as const , summary : "late" } ;
721+ return result ;
709722 } ) ,
710723 } ) ;
711724
712725 await onTimer ( state ) ;
713726
714- expect ( observedAbortSignal ) . toBeDefined ( ) ;
715- expect ( observedAbortSignal ?. aborted ) . toBe ( true ) ;
727+ expect ( abortAwareRunner . getObservedAbortSignal ( ) ) . toBeDefined ( ) ;
728+ expect ( abortAwareRunner . getObservedAbortSignal ( ) ?. aborted ) . toBe ( true ) ;
716729 const job = state . store ?. jobs . find ( ( entry ) => entry . id === "abort-on-timeout" ) ;
717730 expect ( job ?. state . lastStatus ) . toBe ( "error" ) ;
718731 expect ( job ?. state . lastError ) . toContain ( "timed out" ) ;
@@ -721,24 +734,11 @@ describe("Cron issue regressions", () => {
721734 it ( "applies timeoutSeconds to manual cron.run isolated executions" , async ( ) => {
722735 vi . useRealTimers ( ) ;
723736 const store = await makeStorePath ( ) ;
724- let observedAbortSignal : AbortSignal | undefined ;
737+ const abortAwareRunner = createAbortAwareIsolatedRunner ( ) ;
725738
726739 const cron = await startCronForStore ( {
727740 storePath : store . storePath ,
728- runIsolatedAgentJob : vi . fn ( async ( { abortSignal } ) => {
729- observedAbortSignal = abortSignal ;
730- await new Promise < void > ( ( resolve ) => {
731- if ( ! abortSignal ) {
732- return ;
733- }
734- if ( abortSignal . aborted ) {
735- resolve ( ) ;
736- return ;
737- }
738- abortSignal . addEventListener ( "abort" , ( ) => resolve ( ) , { once : true } ) ;
739- } ) ;
740- return { status : "ok" as const , summary : "late" } ;
741- } ) ,
741+ runIsolatedAgentJob : abortAwareRunner . runIsolatedAgentJob ,
742742 } ) ;
743743
744744 const job = await cron . add ( {
@@ -753,8 +753,8 @@ describe("Cron issue regressions", () => {
753753
754754 const result = await cron . run ( job . id , "force" ) ;
755755 expect ( result ) . toEqual ( { ok : true , ran : true } ) ;
756- expect ( observedAbortSignal ) . toBeDefined ( ) ;
757- expect ( observedAbortSignal ?. aborted ) . toBe ( true ) ;
756+ expect ( abortAwareRunner . getObservedAbortSignal ( ) ) . toBeDefined ( ) ;
757+ expect ( abortAwareRunner . getObservedAbortSignal ( ) ?. aborted ) . toBe ( true ) ;
758758
759759 const updated = ( await cron . list ( { includeDisabled : true } ) ) . find (
760760 ( entry ) => entry . id === job . id ,
0 commit comments