build: add node-inspect integration test
This just adds an additional make target (`make test-node-inspect`) but will not include the new debugger in releases. PR-URL: https://github.com/nodejs/node/pull/10187 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
8c9762e150
commit
fc3f0d63b4
4
Makefile
4
Makefile
@ -256,6 +256,10 @@ test-debugger: all
|
|||||||
test-inspector: all
|
test-inspector: all
|
||||||
$(PYTHON) tools/test.py inspector
|
$(PYTHON) tools/test.py inspector
|
||||||
|
|
||||||
|
test-node-inspect: $(NODE_EXE)
|
||||||
|
USE_EMBEDDED_NODE_INSPECT=1 $(NODE) tools/test-npm-package \
|
||||||
|
--install deps/node-inspect test
|
||||||
|
|
||||||
test-tick-processor: all
|
test-tick-processor: all
|
||||||
$(PYTHON) tools/test.py tick-processor
|
$(PYTHON) tools/test.py tick-processor
|
||||||
|
|
||||||
|
139
tools/test-npm-package.js
Executable file
139
tools/test-npm-package.js
Executable file
@ -0,0 +1,139 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
/**
|
||||||
|
* Usage:
|
||||||
|
* test-npm-package.js [--install] [--rebuild] <source> <test-arg>+
|
||||||
|
*
|
||||||
|
* Everything after the <source> directory gets passed to `npm run` to build
|
||||||
|
* the test command.
|
||||||
|
*
|
||||||
|
* If `--install` is passed, we'll run a full `npm install` before running the
|
||||||
|
* test suite. Same for `--rebuild` and `npm rebuild`.
|
||||||
|
*
|
||||||
|
* We always use the node used to spawn this script and the `npm` version
|
||||||
|
* bundled in `deps/npm`.
|
||||||
|
*
|
||||||
|
* If an additional `--logfile=<filename>` option is passed before `<source>`,
|
||||||
|
* the stdout output of the test script will be written to that file.
|
||||||
|
*/
|
||||||
|
'use strict';
|
||||||
|
const { spawn, spawnSync } = require('child_process');
|
||||||
|
const { createHash } = require('crypto');
|
||||||
|
const { createWriteStream, mkdirSync, rmdirSync } = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
const common = require('../test/common');
|
||||||
|
|
||||||
|
const projectDir = path.resolve(__dirname, '..');
|
||||||
|
const npmBin = path.join(projectDir, 'deps', 'npm', 'cli.js');
|
||||||
|
const nodePath = path.dirname(process.execPath);
|
||||||
|
|
||||||
|
function spawnCopyDeepSync(source, destination) {
|
||||||
|
if (common.isWindows) {
|
||||||
|
mkdirSync(destination); // prevent interactive prompt
|
||||||
|
return spawnSync('xcopy.exe', ['/E', source, destination]);
|
||||||
|
} else {
|
||||||
|
return spawnSync('cp', ['-r', `${source}/`, destination]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function runNPMPackageTests({ srcDir, install, rebuild, testArgs, logfile }) {
|
||||||
|
// Make sure we don't conflict with concurrent test runs
|
||||||
|
const srcHash = createHash('md5').update(srcDir).digest('hex');
|
||||||
|
common.tmpDir = common.tmpDir + '.npm.' + srcHash;
|
||||||
|
common.refreshTmpDir();
|
||||||
|
|
||||||
|
const tmpDir = common.tmpDir;
|
||||||
|
const npmCache = path.join(tmpDir, 'npm-cache');
|
||||||
|
const npmPrefix = path.join(tmpDir, 'npm-prefix');
|
||||||
|
const npmTmp = path.join(tmpDir, 'npm-tmp');
|
||||||
|
const npmUserconfig = path.join(tmpDir, 'npm-userconfig');
|
||||||
|
const pkgDir = path.join(tmpDir, 'pkg');
|
||||||
|
|
||||||
|
spawnCopyDeepSync(srcDir, pkgDir);
|
||||||
|
|
||||||
|
const npmOptions = {
|
||||||
|
cwd: pkgDir,
|
||||||
|
env: Object.assign({}, process.env, {
|
||||||
|
'npm_config_cache': npmCache,
|
||||||
|
'npm_config_prefix': npmPrefix,
|
||||||
|
'npm_config_tmp': npmTmp,
|
||||||
|
'npm_config_userconfig': npmUserconfig,
|
||||||
|
}),
|
||||||
|
stdio: 'inherit',
|
||||||
|
};
|
||||||
|
|
||||||
|
if (common.isWindows) {
|
||||||
|
npmOptions.env.home = tmpDir;
|
||||||
|
npmOptions.env.Path = `${nodePath};${process.env.Path}`;
|
||||||
|
} else {
|
||||||
|
npmOptions.env.HOME = tmpDir;
|
||||||
|
npmOptions.env.PATH = `${nodePath}:${process.env.PATH}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rebuild) {
|
||||||
|
spawnSync(process.execPath, [
|
||||||
|
npmBin,
|
||||||
|
'rebuild',
|
||||||
|
], npmOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (install) {
|
||||||
|
spawnSync(process.execPath, [
|
||||||
|
npmBin,
|
||||||
|
'install',
|
||||||
|
'--ignore-scripts',
|
||||||
|
], npmOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
const testChild = spawn(process.execPath, [
|
||||||
|
npmBin,
|
||||||
|
'--silent',
|
||||||
|
'run',
|
||||||
|
...testArgs,
|
||||||
|
], Object.assign({}, npmOptions, { stdio: 'pipe' }));
|
||||||
|
|
||||||
|
testChild.stdout.pipe(process.stdout);
|
||||||
|
testChild.stderr.pipe(process.stderr);
|
||||||
|
|
||||||
|
if (logfile) {
|
||||||
|
const logStream = createWriteStream(logfile);
|
||||||
|
testChild.stdout.pipe(logStream);
|
||||||
|
}
|
||||||
|
|
||||||
|
testChild.on('exit', () => {
|
||||||
|
common.refreshTmpDir();
|
||||||
|
rmdirSync(tmpDir);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseArgs(args) {
|
||||||
|
let srcDir;
|
||||||
|
let rebuild = false;
|
||||||
|
let install = false;
|
||||||
|
let logfile = null;
|
||||||
|
const testArgs = [];
|
||||||
|
args.forEach((arg) => {
|
||||||
|
if (srcDir) {
|
||||||
|
testArgs.push(arg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arg === '--install') {
|
||||||
|
install = true;
|
||||||
|
} else if (arg === '--rebuild') {
|
||||||
|
rebuild = true;
|
||||||
|
} else if (arg[0] !== '-') {
|
||||||
|
srcDir = path.resolve(projectDir, arg);
|
||||||
|
} else if (arg.startsWith('--logfile=')) {
|
||||||
|
logfile = path.resolve(projectDir, arg.slice('--logfile='.length));
|
||||||
|
} else {
|
||||||
|
throw new Error(`Unrecognized option ${arg}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!srcDir) {
|
||||||
|
throw new Error('Expected a source directory');
|
||||||
|
}
|
||||||
|
return { srcDir, install, rebuild, testArgs, logfile };
|
||||||
|
}
|
||||||
|
|
||||||
|
runNPMPackageTests(parseArgs(process.argv.slice(2)));
|
@ -39,6 +39,7 @@ set enable_vtune_arg=
|
|||||||
set configure_flags=
|
set configure_flags=
|
||||||
set build_addons=
|
set build_addons=
|
||||||
set dll=
|
set dll=
|
||||||
|
set test_node_inspect=
|
||||||
|
|
||||||
:next-arg
|
:next-arg
|
||||||
if "%1"=="" goto args-done
|
if "%1"=="" goto args-done
|
||||||
@ -69,6 +70,7 @@ if /i "%1"=="test-internet" set test_args=%test_args% internet&goto arg-ok
|
|||||||
if /i "%1"=="test-pummel" set test_args=%test_args% pummel&goto arg-ok
|
if /i "%1"=="test-pummel" set test_args=%test_args% pummel&goto arg-ok
|
||||||
if /i "%1"=="test-all" set test_args=%test_args% sequential parallel message gc inspector internet pummel&set build_testgc_addon=1&set jslint=1&goto arg-ok
|
if /i "%1"=="test-all" set test_args=%test_args% sequential parallel message gc inspector internet pummel&set build_testgc_addon=1&set jslint=1&goto arg-ok
|
||||||
if /i "%1"=="test-known-issues" set test_args=%test_args% known_issues&goto arg-ok
|
if /i "%1"=="test-known-issues" set test_args=%test_args% known_issues&goto arg-ok
|
||||||
|
if /i "%1"=="test-node-inspect" set test_node_inspect=1&goto arg-ok
|
||||||
if /i "%1"=="jslint" set jslint=1&goto arg-ok
|
if /i "%1"=="jslint" set jslint=1&goto arg-ok
|
||||||
if /i "%1"=="jslint-ci" set jslint_ci=1&goto arg-ok
|
if /i "%1"=="jslint-ci" set jslint_ci=1&goto arg-ok
|
||||||
if /i "%1"=="package" set package=1&goto arg-ok
|
if /i "%1"=="package" set package=1&goto arg-ok
|
||||||
@ -332,6 +334,12 @@ EndLocal
|
|||||||
goto run-tests
|
goto run-tests
|
||||||
|
|
||||||
:run-tests
|
:run-tests
|
||||||
|
if not defined test_node_inspect goto node-tests
|
||||||
|
set USE_EMBEDDED_NODE_INSPECT=1
|
||||||
|
%config%\node tools\test-npm-package.js --install deps\node-inspect test
|
||||||
|
goto node-tests
|
||||||
|
|
||||||
|
:node-tests
|
||||||
if "%test_args%"=="" goto jslint
|
if "%test_args%"=="" goto jslint
|
||||||
if "%config%"=="Debug" set test_args=--mode=debug %test_args%
|
if "%config%"=="Debug" set test_args=--mode=debug %test_args%
|
||||||
if "%config%"=="Release" set test_args=--mode=release %test_args%
|
if "%config%"=="Release" set test_args=--mode=release %test_args%
|
||||||
|
Loading…
x
Reference in New Issue
Block a user