Skip to content

Commit 6e260e7

Browse files
authored
Process service test fails to exit correctly on Windows (#8514)
* Process service test fails to exit correctly on Windows * Fix linter error
1 parent 1b6fbfb commit 6e260e7

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

src/test/common/process/proc.unit.test.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,48 +6,48 @@
66
// tslint:disable:no-any max-func-body-length no-invalid-this max-classes-per-file
77

88
import { expect } from 'chai';
9-
import { spawn } from 'child_process';
9+
import { ChildProcess, spawn } from 'child_process';
1010
import { ProcessService } from '../../../client/common/process/proc';
11-
import { createDeferred } from '../../../client/common/utils/async';
11+
import { createDeferred, Deferred } from '../../../client/common/utils/async';
1212
import { PYTHON_PATH } from '../../common';
1313

14+
interface IProcData {
15+
proc: ChildProcess;
16+
exited: Deferred<Boolean>;
17+
}
18+
1419
suite('Process - Process Service', function () {
1520
// tslint:disable-next-line:no-invalid-this
1621
this.timeout(5000);
17-
let procIdsToKill: number[] = [];
22+
const procsToKill: IProcData[] = [];
1823
teardown(() => {
19-
// tslint:disable-next-line:no-require-imports
20-
const killProcessTree = require('tree-kill');
21-
procIdsToKill.forEach(pid => {
22-
try {
23-
killProcessTree(pid);
24-
} catch {
25-
// Ignore.
24+
procsToKill.forEach(p => {
25+
if (!p.exited.resolved) {
26+
p.proc.kill();
2627
}
2728
});
28-
procIdsToKill = [];
2929
});
3030

31-
function spawnProc() {
31+
function spawnProc(): IProcData {
3232
const proc = spawn(PYTHON_PATH, ['-c', 'while(True): import time;time.sleep(0.5);print(1)']);
3333
const exited = createDeferred<Boolean>();
3434
proc.on('exit', () => exited.resolve(true));
35-
procIdsToKill.push(proc.pid);
35+
procsToKill.push({ proc, exited });
3636

37-
return { pid: proc.pid, exited: exited.promise };
37+
return procsToKill[procsToKill.length - 1];
3838
}
3939

4040
test('Process is killed', async () => {
4141
const proc = spawnProc();
4242

43-
ProcessService.kill(proc.pid);
43+
ProcessService.kill(proc.proc.pid);
4444

45-
expect(await proc.exited).to.equal(true, 'process did not die');
45+
expect(await proc.exited.promise).to.equal(true, 'process did not die');
4646
});
4747
test('Process is alive', async () => {
4848
const proc = spawnProc();
4949

50-
expect(ProcessService.isAlive(proc.pid)).to.equal(true, 'process is not alive');
50+
expect(ProcessService.isAlive(proc.proc.pid)).to.equal(true, 'process is not alive');
5151
});
5252

5353
});

0 commit comments

Comments
 (0)