node/test/parallel/test-permission-child-proce...

103 lines
3.0 KiB
JavaScript

// Flags: --permission --allow-child-process --allow-fs-read=* --allow-worker
'use strict';
const common = require('../common');
const { isMainThread } = require('worker_threads');
if (!isMainThread) {
common.skip('This test only works on a main thread');
}
const assert = require('assert');
const childProcess = require('child_process');
{
assert.ok(process.permission.has('child'));
}
{
assert.strictEqual(process.env.NODE_OPTIONS, undefined);
}
{
const { status, stdout } = childProcess.spawnSync(process.execPath,
[
'-e',
`
console.log(process.permission.has("fs.write"));
console.log(process.permission.has("fs.read"));
console.log(process.permission.has("child"));
console.log(process.permission.has("net"));
console.log(process.permission.has("worker"));
`,
]
);
const [fsWrite, fsRead, child, net, worker] = stdout.toString().split('\n');
assert.strictEqual(status, 0);
assert.strictEqual(fsWrite, 'false');
assert.strictEqual(fsRead, 'true');
assert.strictEqual(child, 'true');
assert.strictEqual(net, 'false');
assert.strictEqual(worker, 'true');
}
// It should not override when --permission is passed
{
const { status, stdout } = childProcess.spawnSync(
process.execPath,
[
'--permission',
'--allow-fs-write=*',
'-e',
`
console.log(process.permission.has("fs.write"));
console.log(process.permission.has("fs.read"));
console.log(process.permission.has("child"));
console.log(process.permission.has("net"));
console.log(process.permission.has("worker"));
`,
]
);
const [fsWrite, fsRead, child, net, worker] = stdout.toString().split('\n');
assert.strictEqual(status, 0);
assert.strictEqual(fsWrite, 'true');
assert.strictEqual(fsRead, 'false');
assert.strictEqual(child, 'false');
assert.strictEqual(net, 'false');
assert.strictEqual(worker, 'false');
}
// It should not override when NODE_OPTIONS with --permission is passed
{
const { status, stdout } = childProcess.spawnSync(
process.execPath,
[
'-e',
`
console.log(process.permission.has("fs.write"));
console.log(process.permission.has("fs.read"));
console.log(process.permission.has("child"));
console.log(process.permission.has("net"));
console.log(process.permission.has("worker"));
`,
],
{
env: {
...process.env,
'NODE_OPTIONS': '--permission --allow-fs-write=*',
}
}
);
const [fsWrite, fsRead, child, net, worker] = stdout.toString().split('\n');
assert.strictEqual(status, 0);
assert.strictEqual(fsWrite, 'true');
assert.strictEqual(fsRead, 'false');
assert.strictEqual(child, 'false');
assert.strictEqual(net, 'false');
assert.strictEqual(worker, 'false');
}
{
assert.strictEqual(process.env.NODE_OPTIONS, undefined);
}