test: add spec for child-process-gone event for utility process (#40281)

This commit is contained in:
Milan Burda 2023-10-23 11:30:08 -04:00 committed by GitHub
parent beb0cbc6d0
commit a867503af6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 2 deletions

View file

@ -29,7 +29,7 @@ Process: [Main](../glossary.md#main-process)<br />
* `inherit`: equivalent to \['ignore', 'inherit', 'inherit'] * `inherit`: equivalent to \['ignore', 'inherit', 'inherit']
* `serviceName` string (optional) - Name of the process that will appear in `name` property of * `serviceName` string (optional) - Name of the process that will appear in `name` property of
[`child-process-gone` event of `app`](app.md#event-child-process-gone). [`child-process-gone` event of `app`](app.md#event-child-process-gone).
Default is `node.mojom.NodeService`. Default is `Node Utility Process`.
* `allowLoadingUnsignedLibraries` boolean (optional) _macOS_ - With this flag, the utility process will be * `allowLoadingUnsignedLibraries` boolean (optional) _macOS_ - With this flag, the utility process will be
launched via the `Electron Helper (Plugin).app` helper executable on macOS, which can be launched via the `Electron Helper (Plugin).app` helper executable on macOS, which can be
codesigned with `com.apple.security.cs.disable-library-validation` and codesigned with `com.apple.security.cs.disable-library-validation` and

View file

@ -1,7 +1,7 @@
import { expect } from 'chai'; import { expect } from 'chai';
import * as childProcess from 'node:child_process'; import * as childProcess from 'node:child_process';
import * as path from 'node:path'; import * as path from 'node:path';
import { BrowserWindow, MessageChannelMain, utilityProcess } from 'electron/main'; import { BrowserWindow, MessageChannelMain, utilityProcess, app } from 'electron/main';
import { ifit } from './lib/spec-helpers'; import { ifit } from './lib/spec-helpers';
import { closeWindow } from './lib/window-helpers'; import { closeWindow } from './lib/window-helpers';
import { once } from 'node:events'; import { once } from 'node:events';
@ -93,6 +93,26 @@ describe('utilityProcess module', () => {
}); });
}); });
describe('app \'child-process-gone\' event', () => {
it('with default serviceName', async () => {
utilityProcess.fork(path.join(fixturesPath, 'crash.js'));
const [, details] = await once(app, 'child-process-gone') as [any, Electron.Details];
expect(details.type).to.equal('Utility');
expect(details.serviceName).to.equal('node.mojom.NodeService');
expect(details.name).to.equal('Node Utility Process');
expect(details.reason).to.be.oneOf(['crashed', 'abnormal-exit']);
});
it('with custom serviceName', async () => {
utilityProcess.fork(path.join(fixturesPath, 'crash.js'), [], { serviceName: 'Hello World!' });
const [, details] = await once(app, 'child-process-gone') as [any, Electron.Details];
expect(details.type).to.equal('Utility');
expect(details.serviceName).to.equal('node.mojom.NodeService');
expect(details.name).to.equal('Hello World!');
expect(details.reason).to.be.oneOf(['crashed', 'abnormal-exit']);
});
});
describe('kill() API', () => { describe('kill() API', () => {
it('terminates the child process gracefully', async () => { it('terminates the child process gracefully', async () => {
const child = utilityProcess.fork(path.join(fixturesPath, 'endless.js'), [], { const child = utilityProcess.fork(path.join(fixturesPath, 'endless.js'), [], {