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:
parent
002dacb7f7
commit
4f8b497991
@ -21,45 +21,41 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
const common = require('../common');
|
const common = require('../common');
|
||||||
const assert = require('assert');
|
|
||||||
const fs = require('fs');
|
// Test that `fork()` respects the `execPath` option.
|
||||||
const { COPYFILE_FICLONE } = fs.constants;
|
|
||||||
const path = require('path');
|
|
||||||
const tmpdir = require('../common/tmpdir');
|
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 msg = { test: 'this' };
|
||||||
const nodePath = process.execPath;
|
const nodePath = process.execPath;
|
||||||
const copyPath = path.join(tmpdir.path, 'node-copy.exe');
|
const copyPath = path.join(tmpdir.path, 'node-copy.exe');
|
||||||
const { addLibraryPath } = require('../common/shared-lib-util');
|
|
||||||
|
|
||||||
addLibraryPath(process.env);
|
addLibraryPath(process.env);
|
||||||
|
|
||||||
|
// Child
|
||||||
if (process.env.FORK) {
|
if (process.env.FORK) {
|
||||||
assert(process.send);
|
assert.strictEqual(process.execPath, copyPath);
|
||||||
assert.strictEqual(process.argv[0], copyPath);
|
assert.ok(process.send);
|
||||||
process.send(msg);
|
process.send(msg);
|
||||||
process.exit();
|
return 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);
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
}));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user