@@ -2,14 +2,15 @@ import { containerTest, redisTest } from "@internal/testcontainers";
22import { createRedisClient } from "@internal/redis" ;
33import { setTimeout as sleep } from "node:timers/promises" ;
44import { Registry } from "prom-client" ;
5- import { describe , expect } from "vitest" ;
5+ import { describe , expect , vi } from "vitest" ;
66import { PendingIndex } from "./pendingIndex.js" ;
77import {
88 PendingRecoveryWorker ,
99 RecoverySweeper ,
1010 type PostgresCommitStatus ,
1111} from "./pendingRecoveryWorker.js" ;
1212import { RedisSnapshotStore , type SnapshotEntryInput } from "./redisSnapshotStore.js" ;
13+ import { runToPartition } from "./snapshotKeys.js" ;
1314import { recoveryMetrics } from "./testFixtures/promMetrics.js" ;
1415
1516// The single-fleet recovery lease, proven on real Redis: exactly one owner holds it, takeover happens
@@ -187,6 +188,11 @@ describe("RecoverySweeper pending gauges and the recovery lease", () => {
187188 } ) ;
188189 expect ( prepared . outcome ) . toBe ( "prepared" ) ;
189190
191+ const { oldestMs } = await index . summary ( runToPartition ( runId ) ) ;
192+ expect ( oldestMs ) . toBeTypeOf ( "number" ) ;
193+ vi . useFakeTimers ( { toFake : [ "Date" ] } ) ;
194+ vi . setSystemTime ( oldestMs ! + 1_000 ) ;
195+
190196 const worker = new PendingRecoveryWorker ( {
191197 store,
192198 pendingIndex : index ,
@@ -259,6 +265,7 @@ describe("RecoverySweeper pending gauges and the recovery lease", () => {
259265 // The unit itself is still pending: only A's view of it was withdrawn.
260266 expect ( await store . hasPreparedUnit ( runId ) ) . toBe ( true ) ;
261267 } finally {
268+ vi . useRealTimers ( ) ;
262269 releaseTx ( ) ;
263270 await held ;
264271 await raw . quit ( ) ;
0 commit comments