forked from heusalagroup/fi.hg.node
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNodeChildProcessService.test.ts
More file actions
94 lines (83 loc) · 3.13 KB
/
NodeChildProcessService.test.ts
File metadata and controls
94 lines (83 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// Copyright (c) 2023. Heusala Group Oy <info@hg.fi>. All rights reserved.
import { NodeChildProcessService } from "./NodeChildProcessService";
import { LogLevel } from "../core/types/LogLevel";
import { ChildProcessService } from "../core/ChildProcessService";
describe('NodeChildProcessService', () => {
let service : ChildProcessService;
beforeEach( () => {
NodeChildProcessService.setLogLevel(LogLevel.NONE);
service = NodeChildProcessService.create();
});
afterEach( async () => {
try {
if (!service.isDestroyed()) {
await service.shutdownChildProcesses();
if (!service.isDestroyed()) {
service.destroy();
}
}
service = undefined as unknown as NodeChildProcessService;
} catch (err) {
console.error(`AfterEach failed: `, err);
throw err;
}
});
describe('#destroy', () => {
it('can destroy the service', async () => {
expect.assertions(1);
const sleepPromise = service.executeCommand('sleep', ['11']);
service.destroy();
try {
await sleepPromise;
} catch (err) {
expect(`${err}`).toContain('Signal SIGTERM');
}
});
});
describe('#waitAllChildProcessesStopped', () => {
it('can wait until all children are down', async () => {
expect.assertions(2);
const promise = service.executeCommand('sleep', ['12']);
service.sendShutdownToChildProcesses();
await service.waitAllChildProcessesStopped();
try {
await promise;
} catch (err) {
expect(`${err}`).toContain('Signal SIGTERM');
}
expect( await service.countChildProcesses() ).toBe(0);
});
});
describe('#countChildProcesses', () => {
it('can count running children', async () => {
expect.assertions(3);
expect( await service.countChildProcesses() ).toBe(0);
const promise = service.executeCommand('ls');
expect( await service.countChildProcesses() ).toBe(1);
await promise;
expect( await service.countChildProcesses() ).toBe(0);
});
});
describe('#shutdownChildProcesses', () => {
it('can shutdown child processes', async () => {
expect.assertions(1);
const promise = service.executeCommand('sleep', ['13']);
await service.shutdownChildProcesses();
try {
await promise;
} catch (err) {
expect(`${err}`).toContain('Signal SIGTERM');
}
});
});
describe('#executeCommand', () => {
it(`can execute 'ls' command`, async () => {
expect.assertions(4);
const result = await service.executeCommand('ls');
expect(result).toBeDefined();
expect(result.name).toBe('ls');
expect(result.args).toStrictEqual([]);
expect(result.output).toContain('README.md');
});
});
});