import { describe, expect, it } from 'vitest'; import { runPiReleasePressureCleanup } from '../../electron/coding-runtime/pi/release-proof-cleanup'; describe('PI release pressure cleanup', () => { it('continues after an injected failure, reaches zero, and can be retried', async () => { const counts = { parentWorkers: 4, childWorkers: 4, liveProcessIds: 8, providerRequests: 8, processBudget: 8, childPermits: 4, dispatches: 4, writeLeases: 4, }; let failParentSettle = true; const steps = [ { name: 'provider.release', run: () => { counts.providerRequests = 0; } }, { name: 'dispatches.settle', run: () => { counts.childWorkers = 0; counts.childPermits = 0; counts.dispatches = 0; }, }, { name: 'parents.settle', run: () => { if (failParentSettle) { failParentSettle = false; throw new Error('injected parent settle failure'); } }, }, { name: 'pool.shutdown', run: () => { counts.parentWorkers = 0; counts.liveProcessIds = 0; counts.processBudget = 0; }, }, { name: 'leases.release', run: () => { counts.writeLeases = 0; } }, ]; await expect(runPiReleasePressureCleanup(steps)) .rejects.toThrow('PI release pressure cleanup failed: parents.settle'); expect(Object.values(counts)).toEqual([0, 0, 0, 0, 0, 0, 0, 0]); await expect(runPiReleasePressureCleanup(steps)).resolves.toBeUndefined(); expect(Object.values(counts)).toEqual([0, 0, 0, 0, 0, 0, 0, 0]); }); it('bounds a hanging step and still runs later cleanup', async () => { let released = false; await expect(runPiReleasePressureCleanup([ { name: 'hang', run: async () => await new Promise(() => undefined) }, { name: 'release', run: () => { released = true; } }, ], { stepTimeoutMs: 10 })).rejects.toThrow( 'PI release pressure cleanup failed: hang', ); expect(released).toBe(true); }); });