mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 13:48:44 +02:00
test: use unusual chars in the path to ensure our tests are robust
PR-URL: https://github.com/nodejs/node/pull/48409 Reviewed-By: Jacob Smith <jacob@frende.me>
This commit is contained in:
parent
ecc9fb2f8e
commit
d2af881997
12 changed files with 82 additions and 39 deletions
12
.github/workflows/test-linux.yml
vendored
12
.github/workflows/test-linux.yml
vendored
|
@ -40,6 +40,7 @@ jobs:
|
|||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
path: node
|
||||
- name: Set up Python ${{ env.PYTHON_VERSION }}
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
|
@ -51,6 +52,13 @@ jobs:
|
|||
- name: Environment Information
|
||||
run: npx envinfo
|
||||
- name: Build
|
||||
run: make build-ci -j4 V=1 CONFIG_FLAGS="--error-on-warn"
|
||||
run: make -C node build-ci -j4 V=1 CONFIG_FLAGS="--error-on-warn"
|
||||
- name: Test
|
||||
run: make run-ci -j4 V=1 TEST_CI_ARGS="-p actions --node-args='--test-reporter=spec' --node-args='--test-reporter-destination=stdout' --measure-flakiness 9"
|
||||
run: make -C node run-ci -j4 V=1 TEST_CI_ARGS="-p actions --node-args='--test-reporter=spec' --node-args='--test-reporter-destination=stdout' --measure-flakiness 9"
|
||||
- name: Re-run test in a folder whose name contains unusual chars
|
||||
run: |
|
||||
mv node "$DIR"
|
||||
cd "$DIR"
|
||||
./tools/test.py --flaky-tests keep_retrying -p actions -j 4
|
||||
env:
|
||||
DIR: dir%20with $unusual"chars?'åß∂ƒ©∆¬…`
|
||||
|
|
14
.github/workflows/test-macos.yml
vendored
14
.github/workflows/test-macos.yml
vendored
|
@ -51,6 +51,7 @@ jobs:
|
|||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
path: node
|
||||
- name: Set up Python ${{ env.PYTHON_VERSION }}
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
|
@ -68,7 +69,7 @@ jobs:
|
|||
# happen anymore running this step here first, that's also useful
|
||||
# information.)
|
||||
- name: tools/doc/node_modules workaround
|
||||
run: make tools/doc/node_modules
|
||||
run: make -C node tools/doc/node_modules
|
||||
# This is needed due to https://github.com/nodejs/build/issues/3878
|
||||
- name: Cleanup
|
||||
run: |
|
||||
|
@ -84,8 +85,15 @@ jobs:
|
|||
df -h
|
||||
echo "::endgroup::"
|
||||
- name: Build
|
||||
run: make build-ci -j$(getconf _NPROCESSORS_ONLN) V=1 CONFIG_FLAGS="--error-on-warn"
|
||||
run: make -C node build-ci -j$(getconf _NPROCESSORS_ONLN) V=1 CONFIG_FLAGS="--error-on-warn"
|
||||
- name: Free Space After Build
|
||||
run: df -h
|
||||
- name: Test
|
||||
run: make run-ci -j$(getconf _NPROCESSORS_ONLN) V=1 TEST_CI_ARGS="-p actions --node-args='--test-reporter=spec' --node-args='--test-reporter-destination=stdout' --measure-flakiness 9"
|
||||
run: make -C node run-ci -j$(getconf _NPROCESSORS_ONLN) V=1 TEST_CI_ARGS="-p actions --node-args='--test-reporter=spec' --node-args='--test-reporter-destination=stdout' --measure-flakiness 9"
|
||||
- name: Re-run test in a folder whose name contains unusual chars
|
||||
run: |
|
||||
mv node "$DIR"
|
||||
cd "$DIR"
|
||||
./tools/test.py --flaky-tests keep_retrying -p actions -j 4
|
||||
env:
|
||||
DIR: dir%20with $unusual"chars?'åß∂ƒ©∆¬…`
|
||||
|
|
|
@ -1135,6 +1135,15 @@ const common = {
|
|||
get checkoutEOL() {
|
||||
return fs.readFileSync(__filename).includes('\r\n') ? '\r\n' : '\n';
|
||||
},
|
||||
|
||||
get isInsideDirWithUnusualChars() {
|
||||
return __dirname.includes('%') ||
|
||||
(!isWindows && __dirname.includes('\\')) ||
|
||||
__dirname.includes('$') ||
|
||||
__dirname.includes('\n') ||
|
||||
__dirname.includes('\r') ||
|
||||
__dirname.includes('\t');
|
||||
},
|
||||
};
|
||||
|
||||
const validProperties = new Set(Object.keys(common));
|
||||
|
|
|
@ -26,6 +26,7 @@ const {
|
|||
isDumbTerminal,
|
||||
isFreeBSD,
|
||||
isIBMi,
|
||||
isInsideDirWithUnusualChars,
|
||||
isLinux,
|
||||
isLinuxPPCBE,
|
||||
isMainThread,
|
||||
|
@ -81,6 +82,7 @@ export {
|
|||
isDumbTerminal,
|
||||
isFreeBSD,
|
||||
isIBMi,
|
||||
isInsideDirWithUnusualChars,
|
||||
isLinux,
|
||||
isLinuxPPCBE,
|
||||
isMainThread,
|
||||
|
|
|
@ -19,6 +19,8 @@ describe('ESM: Package.json', { concurrency: !process.env.TEST_PARALLEL }, () =>
|
|||
assert.ok(
|
||||
stderr.includes(
|
||||
`Invalid package config ${path.toNamespacedPath(invalidJson)} while importing "invalid-pjson" from ${entry}.`
|
||||
) || stderr.includes(
|
||||
`Invalid package config ${path.toNamespacedPath(invalidJson)} while importing "invalid-pjson" from ${path.toNamespacedPath(entry)}.`
|
||||
),
|
||||
stderr
|
||||
);
|
||||
|
|
3
test/fixtures/snapshot/child-process-sync.js
vendored
3
test/fixtures/snapshot/child-process-sync.js
vendored
|
@ -8,7 +8,8 @@ const {
|
|||
function spawn() {
|
||||
const { spawnSync, execFileSync, execSync } = require('child_process');
|
||||
spawnSync(process.execPath, [ __filename, 'spawnSync' ], { stdio: 'inherit' });
|
||||
execSync(`"${process.execPath}" "${__filename}" "execSync"`, { stdio: 'inherit' });
|
||||
if (!process.env.DIRNAME_CONTAINS_SHELL_UNSAFE_CHARS)
|
||||
execSync(`"${process.execPath}" "${__filename}" "execSync"`, { stdio: 'inherit' });
|
||||
execFileSync(process.execPath, [ __filename, 'execFileSync' ], { stdio: 'inherit' });
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { mustCall, mustNotMutateObjectDeep } from '../common/index.mjs';
|
||||
import { mustCall, mustNotMutateObjectDeep, isInsideDirWithUnusualChars } from '../common/index.mjs';
|
||||
|
||||
import assert from 'assert';
|
||||
import fs from 'fs';
|
||||
|
@ -264,7 +264,7 @@ function nextdir(dirname) {
|
|||
}
|
||||
|
||||
// It throws error if parent directory of symlink in dest points to src.
|
||||
{
|
||||
if (!isInsideDirWithUnusualChars) {
|
||||
const src = nextdir();
|
||||
mkdirSync(join(src, 'a'), mustNotMutateObjectDeep({ recursive: true }));
|
||||
const dest = nextdir();
|
||||
|
@ -279,7 +279,7 @@ function nextdir(dirname) {
|
|||
}
|
||||
|
||||
// It throws error if attempt is made to copy directory to file.
|
||||
{
|
||||
if (!isInsideDirWithUnusualChars) {
|
||||
const src = nextdir();
|
||||
mkdirSync(src, mustNotMutateObjectDeep({ recursive: true }));
|
||||
const dest = './test/fixtures/copy/kitchen-sink/README.md';
|
||||
|
@ -310,7 +310,7 @@ function nextdir(dirname) {
|
|||
|
||||
|
||||
// It throws error if attempt is made to copy file to directory.
|
||||
{
|
||||
if (!isInsideDirWithUnusualChars) {
|
||||
const src = './test/fixtures/copy/kitchen-sink/README.md';
|
||||
const dest = nextdir();
|
||||
mkdirSync(dest, mustNotMutateObjectDeep({ recursive: true }));
|
||||
|
@ -346,7 +346,7 @@ function nextdir(dirname) {
|
|||
|
||||
// It throws error if attempt is made to copy src to dest
|
||||
// when src is parent directory of the parent of dest
|
||||
{
|
||||
if (!isInsideDirWithUnusualChars) {
|
||||
const src = nextdir('a');
|
||||
const destParent = nextdir('a/b');
|
||||
const dest = nextdir('a/b/c');
|
||||
|
@ -370,7 +370,7 @@ function nextdir(dirname) {
|
|||
}
|
||||
|
||||
// It throws an error if attempt is made to copy socket.
|
||||
if (!isWindows) {
|
||||
if (!isWindows && !isInsideDirWithUnusualChars) {
|
||||
const src = nextdir();
|
||||
mkdirSync(src);
|
||||
const dest = nextdir();
|
||||
|
@ -738,7 +738,7 @@ if (!isWindows) {
|
|||
}
|
||||
|
||||
// It returns an error if attempt is made to copy socket.
|
||||
if (!isWindows) {
|
||||
if (!isWindows && !isInsideDirWithUnusualChars) {
|
||||
const src = nextdir();
|
||||
mkdirSync(src);
|
||||
const dest = nextdir();
|
||||
|
|
|
@ -7,8 +7,10 @@ if (!process.config.variables.node_use_amaro) common.skip('Requires Amaro');
|
|||
const { NodeInstance } = require('../common/inspector-helper.js');
|
||||
const fixtures = require('../common/fixtures');
|
||||
const assert = require('assert');
|
||||
const { pathToFileURL } = require('url');
|
||||
|
||||
const scriptPath = fixtures.path('typescript/ts/test-typescript.ts');
|
||||
const scriptURL = pathToFileURL(scriptPath);
|
||||
|
||||
async function runTest() {
|
||||
const child = new NodeInstance(
|
||||
|
@ -30,10 +32,10 @@ async function runTest() {
|
|||
const scriptParsed = await session.waitForNotification((notification) => {
|
||||
if (notification.method !== 'Debugger.scriptParsed') return false;
|
||||
|
||||
return notification.params.url === scriptPath;
|
||||
return notification.params.url === scriptPath || notification.params.url === scriptURL.href;
|
||||
});
|
||||
// Verify that the script has a sourceURL, hinting that it is a generated source.
|
||||
assert(scriptParsed.params.hasSourceURL);
|
||||
assert(scriptParsed.params.hasSourceURL || common.isInsideDirWithUnusualChars);
|
||||
|
||||
await session.waitForPauseOnStart();
|
||||
await session.runToCompletion();
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
const common = require('../common');
|
||||
if (!common.hasCrypto)
|
||||
common.skip('missing crypto');
|
||||
if (common.isInsideDirWithUnusualChars)
|
||||
common.skip('npm does not support this install path');
|
||||
|
||||
const path = require('path');
|
||||
const exec = require('child_process').exec;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
// This tests that process.cwd() is accurate when
|
||||
// restoring state from a snapshot
|
||||
|
||||
require('../common');
|
||||
const { isInsideDirWithUnusualChars } = require('../common');
|
||||
const { spawnSyncAndAssert } = require('../common/child_process');
|
||||
const tmpdir = require('../common/tmpdir');
|
||||
const fixtures = require('../common/fixtures');
|
||||
|
@ -14,7 +14,7 @@ const blobPath = tmpdir.resolve('snapshot.blob');
|
|||
const file = fixtures.path('snapshot', 'child-process-sync.js');
|
||||
const expected = [
|
||||
'From child process spawnSync',
|
||||
'From child process execSync',
|
||||
...(isInsideDirWithUnusualChars ? [] : ['From child process execSync']),
|
||||
'From child process execFileSync',
|
||||
];
|
||||
|
||||
|
@ -27,6 +27,7 @@ const expected = [
|
|||
file,
|
||||
], {
|
||||
cwd: tmpdir.path,
|
||||
env: { ...process.env, DIRNAME_CONTAINS_SHELL_UNSAFE_CHARS: isInsideDirWithUnusualChars ? 'TRUE' : '' },
|
||||
}, {
|
||||
trim: true,
|
||||
stdout(output) {
|
||||
|
@ -43,6 +44,7 @@ const expected = [
|
|||
file,
|
||||
], {
|
||||
cwd: tmpdir.path,
|
||||
env: { ...process.env, DIRNAME_CONTAINS_SHELL_UNSAFE_CHARS: isInsideDirWithUnusualChars ? 'TRUE' : '' },
|
||||
}, {
|
||||
trim: true,
|
||||
stdout(output) {
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
'use strict';
|
||||
|
||||
const common = require('../common');
|
||||
|
||||
if (common.isInsideDirWithUnusualChars) {
|
||||
common.skip('expected failure');
|
||||
}
|
||||
|
||||
const assert = require('node:assert');
|
||||
const { spawnSync, spawn } = require('node:child_process');
|
||||
|
||||
|
@ -66,7 +71,7 @@ const allRegExpStatics =
|
|||
assert.strictEqual(child.signal, null);
|
||||
}
|
||||
|
||||
{
|
||||
if (!common.isInsideDirWithUnusualChars) {
|
||||
const child = spawn(process.execPath, [], { stdio: ['pipe', 'pipe', 'inherit'], encoding: 'utf8' });
|
||||
|
||||
let stdout = '';
|
||||
|
|
|
@ -1,26 +1,28 @@
|
|||
// We must load the CJS version here because the ESM wrapper call `hasIPv6`
|
||||
// which compiles a RegEx.
|
||||
// eslint-disable-next-line node-core/require-common-first
|
||||
import '../common/index.js';
|
||||
import common from '../common/index.js';
|
||||
import assert from 'node:assert';
|
||||
|
||||
assert.strictEqual(RegExp.$_, '');
|
||||
assert.strictEqual(RegExp.$0, undefined);
|
||||
assert.strictEqual(RegExp.$1, '');
|
||||
assert.strictEqual(RegExp.$2, '');
|
||||
assert.strictEqual(RegExp.$3, '');
|
||||
assert.strictEqual(RegExp.$4, '');
|
||||
assert.strictEqual(RegExp.$5, '');
|
||||
assert.strictEqual(RegExp.$6, '');
|
||||
assert.strictEqual(RegExp.$7, '');
|
||||
assert.strictEqual(RegExp.$8, '');
|
||||
assert.strictEqual(RegExp.$9, '');
|
||||
assert.strictEqual(RegExp.input, '');
|
||||
assert.strictEqual(RegExp.lastMatch, '');
|
||||
assert.strictEqual(RegExp.lastParen, '');
|
||||
assert.strictEqual(RegExp.leftContext, '');
|
||||
assert.strictEqual(RegExp.rightContext, '');
|
||||
assert.strictEqual(RegExp['$&'], '');
|
||||
assert.strictEqual(RegExp['$`'], '');
|
||||
assert.strictEqual(RegExp['$+'], '');
|
||||
assert.strictEqual(RegExp["$'"], '');
|
||||
if (!common.isInsideDirWithUnusualChars) {
|
||||
assert.strictEqual(RegExp.$_, '');
|
||||
assert.strictEqual(RegExp.$0, undefined);
|
||||
assert.strictEqual(RegExp.$1, '');
|
||||
assert.strictEqual(RegExp.$2, '');
|
||||
assert.strictEqual(RegExp.$3, '');
|
||||
assert.strictEqual(RegExp.$4, '');
|
||||
assert.strictEqual(RegExp.$5, '');
|
||||
assert.strictEqual(RegExp.$6, '');
|
||||
assert.strictEqual(RegExp.$7, '');
|
||||
assert.strictEqual(RegExp.$8, '');
|
||||
assert.strictEqual(RegExp.$9, '');
|
||||
assert.strictEqual(RegExp.input, '');
|
||||
assert.strictEqual(RegExp.lastMatch, '');
|
||||
assert.strictEqual(RegExp.lastParen, '');
|
||||
assert.strictEqual(RegExp.leftContext, '');
|
||||
assert.strictEqual(RegExp.rightContext, '');
|
||||
assert.strictEqual(RegExp['$&'], '');
|
||||
assert.strictEqual(RegExp['$`'], '');
|
||||
assert.strictEqual(RegExp['$+'], '');
|
||||
assert.strictEqual(RegExp["$'"], '');
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue