76 lines
2.6 KiB
JavaScript
Executable File

#!/usr/bin/env node
/******************************************************************************
Child process that installs node-cleanup for testing zero, one, or multiple (two) concurrent cleanup handlers. It accepts a single argument of serialized JSON having the following (FlowType) structure:
{
handlers; number; // 0, 1, or 2 concurrent cleanup handlers
messages0: object|null; // messages argument for no-cleanup call, if any
messages1: object|null; // messages argument for 1st nodeCleanup() call
messages2: object|null; // messages argument for 2nd nodeCleanup() call
return1: boolean; // return value of 1st cleanup handler
return2: boolean; // return value of 2nd cleanup handler
uninstall: boolean; // whether to uninstall handlers before test
maxDuration: number; // max duration of process in millisecs
}
The process writes behavioral results to stdout for comparison with expectations. The output includes space-delimited strings from the following list, ordered in the string by their order of occurrence:
cleanup1 - the first cleanup handler ran
cleanup2 - the second cleanup handler ran
The process also writes to stderr for comparison with expectations.
******************************************************************************/
//// MODULES //////////////////////////////////////////////////////////////////
var nodeCleanup = require('../../');
//// CONFIGURATION ////////////////////////////////////////////////////////////
var config = JSON.parse(process.argv[2]);
//// CLEANUP HANDLERS /////////////////////////////////////////////////////////
function cleanup1(exitCode, signal) {
process.stdout.write('cleanup1 ');
if (!config.return1)
nodeCleanup.uninstall(); // don't cleanup again
return config.return1;
}
function cleanup2(exitCode, signal) {
process.stdout.write('cleanup2 ');
if (!config.return2)
nodeCleanup.uninstall(); // don't cleanup again
return config.return2;
}
//// MAIN /////////////////////////////////////////////////////////////////////
if (config.handlers === 0) {
if (config.messages0)
nodeCleanup(config.messages0);
else
nodeCleanup();
}
else {
nodeCleanup(cleanup1, config.messages1);
if (config.handlers > 1)
nodeCleanup(cleanup2, config.messages2);
}
if (config.uninstall)
nodeCleanup.uninstall();
setTimeout(function () {
// disconnect IPC so can exit when stdout, stderr,
// child processes, and other resources complete.
process.disconnect();
if (config.exception)
throw new Error("unexpected exception");
process.exit(0);
}, config.maxDuration);
process.send('ready');