0
0
mirror of https://github.com/nodejs/node.git synced 2024-12-01 16:10:02 +01:00

test: try to stabalize test-child-process-fork-exec-path.js

PR-URL: https://github.com/nodejs/node/pull/27277
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
This commit is contained in:
Refael Ackermann 2019-04-17 10:04:01 -04:00 committed by Daniel Bevenius
parent 002dacb7f7
commit 4f8b497991

View File

@ -21,45 +21,41 @@
'use strict';
const common = require('../common');
const assert = require('assert');
const fs = require('fs');
const { COPYFILE_FICLONE } = fs.constants;
const path = require('path');
// Test that `fork()` respects the `execPath` option.
const tmpdir = require('../common/tmpdir');
const { addLibraryPath } = require('../common/shared-lib-util');
const assert = require('assert');
const path = require('path');
const fs = require('fs');
const { fork } = require('child_process');
const msg = { test: 'this' };
const nodePath = process.execPath;
const copyPath = path.join(tmpdir.path, 'node-copy.exe');
const { addLibraryPath } = require('../common/shared-lib-util');
addLibraryPath(process.env);
// Child
if (process.env.FORK) {
assert(process.send);
assert.strictEqual(process.argv[0], copyPath);
assert.strictEqual(process.execPath, copyPath);
assert.ok(process.send);
process.send(msg);
process.exit();
} else {
tmpdir.refresh();
try {
fs.unlinkSync(copyPath);
} catch (e) {
if (e.code !== 'ENOENT') throw e;
}
fs.copyFileSync(nodePath, copyPath, COPYFILE_FICLONE);
fs.chmodSync(copyPath, '0755');
// slow but simple
const envCopy = JSON.parse(JSON.stringify(process.env));
envCopy.FORK = 'true';
const child = require('child_process').fork(__filename, {
execPath: copyPath,
env: envCopy
});
child.on('message', common.mustCall(function(recv) {
assert.deepStrictEqual(msg, recv);
}));
child.on('exit', common.mustCall(function(code) {
fs.unlinkSync(copyPath);
assert.strictEqual(code, 0);
}));
return process.exit();
}
// Parent
tmpdir.refresh();
assert.strictEqual(fs.existsSync(copyPath), false);
fs.copyFileSync(nodePath, copyPath, fs.constants.COPYFILE_FICLONE);
fs.chmodSync(copyPath, '0755');
const envCopy = Object.assign({}, process.env, { 'FORK': 'true' });
const child = fork(__filename, { execPath: copyPath, env: envCopy });
child.on('message', common.mustCall(function(recv) {
assert.deepStrictEqual(recv, msg);
}));
child.on('exit', common.mustCall(function(code) {
assert.strictEqual(code, 0);
}));