mirror of
https://github.com/nodejs/node.git
synced 2025-12-28 16:07:39 +00:00
test: parallelize test-without-async-context-frame correctly
It previously re-einvented the pattern matching that's already supported by test.py, and was running the tests one by one, which can lead to time out on slower machines. This move it to sequential and use wildcard support in test.py to correctly parallelize the tests. PR-URL: https://github.com/nodejs/node/pull/60273 Fixes: https://github.com/nodejs/node/issues/60268 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
This commit is contained in:
parent
8429d9a40b
commit
70c04c7fd8
@ -1,64 +0,0 @@
|
||||
import { isWindows } from '../common/index.mjs';
|
||||
import { spawn } from 'node:child_process';
|
||||
import { once } from 'node:events';
|
||||
import { opendir } from 'node:fs/promises';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { describe, it } from 'node:test';
|
||||
import { sep } from 'node:path';
|
||||
import { strictEqual } from 'node:assert';
|
||||
|
||||
const python = process.env.PYTHON || (isWindows ? 'python' : 'python3');
|
||||
|
||||
const testRunner = fileURLToPath(
|
||||
new URL('../../tools/test.py', import.meta.url)
|
||||
);
|
||||
|
||||
const setNames = ['async-hooks', 'parallel'];
|
||||
|
||||
// Get all test names for each set
|
||||
const testSets = await Promise.all(setNames.map(async (name) => {
|
||||
const path = fileURLToPath(new URL(`../${name}`, import.meta.url));
|
||||
const dir = await opendir(path);
|
||||
|
||||
const tests = [];
|
||||
for await (const entry of dir) {
|
||||
if (entry.name.startsWith('test-async-local-storage-')) {
|
||||
tests.push(entry.name);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
name,
|
||||
tests
|
||||
};
|
||||
}));
|
||||
|
||||
// Merge test sets with set name prefix
|
||||
const tests = testSets.reduce((m, v) => {
|
||||
for (const test of v.tests) {
|
||||
m.push(`${v.name}${sep}${test}`);
|
||||
}
|
||||
return m;
|
||||
}, []);
|
||||
|
||||
describe('without AsyncContextFrame', {
|
||||
// TODO(qard): I think high concurrency causes memory problems on Windows
|
||||
// concurrency: tests.length
|
||||
}, () => {
|
||||
for (const test of tests) {
|
||||
it(test, async () => {
|
||||
const proc = spawn(python, [
|
||||
testRunner,
|
||||
`--mode=${process.features.debug ? 'debug' : 'release'}`,
|
||||
`--shell=${process.execPath}`,
|
||||
'--node-args=--no-async-context-frame',
|
||||
test,
|
||||
], {
|
||||
stdio: ['ignore', 'ignore', 'inherit'],
|
||||
});
|
||||
|
||||
const [code] = await once(proc, 'exit');
|
||||
strictEqual(code, 0, `Test ${test} failed with exit code ${code}`);
|
||||
});
|
||||
}
|
||||
});
|
||||
24
test/sequential/test-without-async-context-frame.mjs
Normal file
24
test/sequential/test-without-async-context-frame.mjs
Normal file
@ -0,0 +1,24 @@
|
||||
import { isWindows } from '../common/index.mjs';
|
||||
import { spawn } from 'node:child_process';
|
||||
import { once } from 'node:events';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { strictEqual } from 'node:assert';
|
||||
|
||||
const python = process.env.PYTHON || (isWindows ? 'python' : 'python3');
|
||||
|
||||
const testRunner = fileURLToPath(
|
||||
new URL('../../tools/test.py', import.meta.url)
|
||||
);
|
||||
|
||||
const proc = spawn(python, [
|
||||
testRunner,
|
||||
`--mode=${process.features.debug ? 'debug' : 'release'}`,
|
||||
`--shell=${process.execPath}`,
|
||||
'--node-args=--no-async-context-frame',
|
||||
'*/test-async-local-storage-*',
|
||||
], {
|
||||
stdio: ['inherit', 'inherit', 'inherit'],
|
||||
});
|
||||
|
||||
const [code] = await once(proc, 'exit');
|
||||
strictEqual(code, 0);
|
||||
Loading…
Reference in New Issue
Block a user