test: check that we remove temp directories on process exit (#13494)

This commit is contained in:
Dmitry Gozman 2022-04-12 12:28:33 -07:00 committed by GitHub
parent 95d4041b8b
commit 2a97ad2487
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 3 deletions

View file

@ -1,7 +1,8 @@
const fs = require('fs');
const cluster = require('cluster');
async function start() {
const { browserTypeName, launchOptions, stallOnClose, disconnectOnSIGHUP } = JSON.parse(process.argv[2]);
const { browserTypeName, launchOptions, stallOnClose, disconnectOnSIGHUP, exitOnFile } = JSON.parse(process.argv[2]);
if (stallOnClose) {
launchOptions.__testHookGracefullyClose = () => {
console.log(`(stalled=>true)`);
@ -17,6 +18,17 @@ async function start() {
if (disconnectOnSIGHUP)
process.on('SIGHUP', () => browserServer._disconnectForTest());
if (exitOnFile) {
(async function waitForFileAndExit() {
while (true) {
if (fs.existsSync(exitOnFile))
break;
await new Promise(f => setTimeout(f, 100));
}
process.exit(42);
})();
}
browserServer.on('close', (exitCode, signal) => {
console.log(`(exitCode=>${exitCode})`);
console.log(`(signal=>${signal})`);

View file

@ -21,6 +21,7 @@ import type { CommonFixtures, TestChildProcess } from './commonFixtures';
export type RemoteServerOptions = {
stallOnClose?: boolean;
disconnectOnSIGHUP?: boolean;
exitOnFile?: string;
inCluster?: boolean;
url?: string;
};

View file

@ -33,9 +33,11 @@ test('should close the browser when the node process closes', async ({ startRemo
});
test.describe('signals', () => {
test.skip(({ platform, headless }) => platform === 'win32' || !headless);
test.skip(({ platform }) => platform === 'win32');
test('should report browser close signal', async ({ startRemoteServer, server, headless }) => {
test.skip(!headless, 'Wrong exit code in headed');
test('should report browser close signal', async ({ startRemoteServer, server }) => {
const remoteServer = await startRemoteServer({ url: server.EMPTY_PAGE });
const pid = await remoteServer.out('pid');
process.kill(-pid, 'SIGTERM');
@ -94,6 +96,18 @@ test.describe('signals', () => {
expect(after).toBe(false);
});
test('should remove temp dir on process.exit', async ({ startRemoteServer, server }, testInfo) => {
const file = testInfo.outputPath('exit.file');
const remoteServer = await startRemoteServer({ url: server.EMPTY_PAGE, exitOnFile: file });
const tempDir = await remoteServer.out('tempDir');
const before = fs.existsSync(tempDir);
fs.writeFileSync(file, 'data', 'utf-8');
expect(await remoteServer.childExitCode()).toBe(42);
const after = fs.existsSync(tempDir);
expect(before).toBe(true);
expect(after).toBe(false);
});
test('should kill the browser on SIGINT + SIGTERM', async ({ startRemoteServer, server }) => {
const remoteServer = await startRemoteServer({ stallOnClose: true, url: server.EMPTY_PAGE });
process.kill(remoteServer.child().pid, 'SIGINT');