test(subprocess): harden host-exit cleanup fixtures

This commit is contained in:
pku-xht
2026-08-11 22:56:45 +08:00
parent 87778a43aa
commit 84b15efd85
9 changed files with 21 additions and 16 deletions

View File

@@ -104,6 +104,7 @@ async function runScenario(kind: ManagedKind, trigger: ExitTrigger) {
let state: TreeState | undefined
let identities: ProcessIdentity[] = []
let settled = false
let treeGone = false
try {
state = await readTree(join(root, 'tree.json'))
await vi.waitFor(() => readFile(join(root, 'ready'), 'utf8'), {
@@ -115,6 +116,7 @@ async function runScenario(kind: ManagedKind, trigger: ExitTrigger) {
const outcome = await child
settled = true
await waitForGone(state)
treeGone = true
const disposeCounts = trigger === 'dispose'
? JSON.parse(await readFile(join(root, 'dispose.json'), 'utf8')) as {
listenersBefore: number
@@ -128,8 +130,10 @@ async function runScenario(kind: ManagedKind, trigger: ExitTrigger) {
child.kill('SIGKILL')
await child.catch(() => {})
}
cleanupTree(state, identities)
if (state !== undefined) await waitForGone(state).catch(() => {})
if (!treeGone) {
cleanupTree(state, identities)
if (state !== undefined) await waitForGone(state).catch(() => {})
}
await rm(root, { recursive: true, force: true })
}
}

View File

@@ -584,7 +584,7 @@ describe('stdio dispositions', () => {
describe('windows tree semantics (injected platform)', () => {
it('host-exit termination routes through taskkill immediately', async () => {
const killed: number[] = []
const running = spawnSubprocess(spec('sleep 60', { graceMs: 60_000 }), {
const running = spawnSubprocess(spec('exec sleep 60', { graceMs: 60_000 }), {
spillDir,
platform: 'win32',
taskkill: (pid) => {
@@ -603,7 +603,7 @@ describe('windows tree semantics (injected platform)', () => {
it('terminate routes through taskkill by root pid', async () => {
const killed: number[] = []
const running = spawnSubprocess(spec('sleep 60', { graceMs: 100 }), {
const running = spawnSubprocess(spec('exec sleep 60', { graceMs: 100 }), {
spillDir,
platform: 'win32',
taskkill: (pid) => {