test: verify input flags
This makes sure all required flags are passed through to the test. If that's not the case an error is thrown to inform the user what flag is missing. PR-URL: https://github.com/nodejs/node/pull/24876 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Rich Trott <rtrott@gmail.com>
This commit is contained in:
parent
0f58ae392b
commit
240065fd8b
@ -45,6 +45,44 @@ const isMainThread = (() => {
|
||||
}
|
||||
})();
|
||||
|
||||
// Check for flags. Skip this for workers (both, the `cluster` module and
|
||||
// `worker_threads`) and child processes.
|
||||
if (process.argv.length === 2 &&
|
||||
isMainThread &&
|
||||
module.parent &&
|
||||
require('cluster').isMaster) {
|
||||
// The copyright notice is relatively big and the flags could come afterwards.
|
||||
const bytesToRead = 1500;
|
||||
const buffer = Buffer.allocUnsafe(bytesToRead);
|
||||
const fd = fs.openSync(module.parent.filename, 'r');
|
||||
fs.readSync(fd, buffer, 0, bytesToRead);
|
||||
fs.closeSync(fd);
|
||||
const source = buffer.toString();
|
||||
|
||||
const flagStart = source.indexOf('// Flags: --') + 10;
|
||||
if (flagStart !== 9) {
|
||||
let flagEnd = source.indexOf('\n', flagStart);
|
||||
// Normalize different EOL.
|
||||
if (source[flagEnd - 1] === '\r') {
|
||||
flagEnd--;
|
||||
}
|
||||
const flags = source
|
||||
.substring(flagStart, flagEnd)
|
||||
.replace(/_/g, '-')
|
||||
.split(' ');
|
||||
const args = process.execArgv.map((arg) => arg.replace(/_/g, '-'));
|
||||
for (const flag of flags) {
|
||||
if (!args.includes(flag) &&
|
||||
// If the binary is build without `intl` the inspect option is
|
||||
// invalid. The test itself should handle this case.
|
||||
(process.config.variables.v8_enable_inspector !== 0 ||
|
||||
!flag.startsWith('--inspect'))) {
|
||||
throw new Error(`Test has to be started with the flag: '${flag}'`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const isWindows = process.platform === 'win32';
|
||||
const isAIX = process.platform === 'aix';
|
||||
const isLinuxPPCBE = (process.platform === 'linux') &&
|
||||
|
Loading…
x
Reference in New Issue
Block a user