diff --git a/server/src/__tests__/heartbeat-direct-adapter-native-isolation.test.ts b/server/src/__tests__/heartbeat-direct-adapter-native-isolation.test.ts index 13a0090c5a..1c80057966 100644 --- a/server/src/__tests__/heartbeat-direct-adapter-native-isolation.test.ts +++ b/server/src/__tests__/heartbeat-direct-adapter-native-isolation.test.ts @@ -6,6 +6,7 @@ import { companies, completionContracts, createDb, + heartbeatRuns, nativeRunFinalizations, nativeRunResults, statusDecisions, @@ -16,6 +17,7 @@ import { getEmbeddedPostgresTestSupport, startEmbeddedPostgresTestDatabase, } from "./helpers/embedded-postgres.js"; +import { drainHeartbeatRunsToQuiescence } from "./helpers/drain-heartbeat-runs.js"; import { registerServerAdapter, unregisterServerAdapter, @@ -52,12 +54,14 @@ async function waitForRunToFinish( describeEmbeddedPostgres("direct adapter native-runner isolation", () => { let db!: ReturnType; + let heartbeat!: ReturnType; let tempDb: Awaited> | null = null; const execute = vi.fn(); beforeAll(async () => { tempDb = await startEmbeddedPostgresTestDatabase("heartbeat-direct-adapter-isolation-"); db = createDb(tempDb.connectionString); + heartbeat = heartbeatService(db); for (const [adapterType] of DIRECT_ADAPTERS) { registerServerAdapter({ type: adapterType, @@ -74,6 +78,12 @@ describeEmbeddedPostgres("direct adapter native-runner isolation", () => { }, 20_000); afterEach(async () => { + await drainHeartbeatRunsToQuiescence(db, heartbeat); + const runStatuses = await db.select({ status: heartbeatRuns.status }).from(heartbeatRuns); + const pendingRuns = runStatuses.filter( + (run) => run.status === "queued" || run.status === "running", + ); + expect(pendingRuns).toEqual([]); vi.clearAllMocks(); await db.execute(sql.raw(` TRUNCATE TABLE @@ -97,6 +107,7 @@ describeEmbeddedPostgres("direct adapter native-runner isolation", () => { }); afterAll(async () => { + await heartbeat.drainActiveRunExecutions(); for (const [adapterType] of DIRECT_ADAPTERS) { unregisterServerAdapter(adapterType); } @@ -138,7 +149,6 @@ describeEmbeddedPostgres("direct adapter native-runner isolation", () => { permissions: {}, }); - const heartbeat = heartbeatService(db); const queued = await heartbeat.invoke(agentId, "on_demand", {}, "manual"); expect(queued).not.toBeNull(); const finished = await waitForRunToFinish(heartbeat, queued!.id);