summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile1
-rw-r--r--test/common/wpt.js83
-rw-r--r--test/wpt/testcfg.py2
-rw-r--r--tools/merge-wpt-reports.mjs32
4 files changed, 31 insertions, 87 deletions
diff --git a/Makefile b/Makefile
index 6c457dfc3d..85950cb95c 100644
--- a/Makefile
+++ b/Makefile
@@ -593,7 +593,6 @@ test-wpt-report:
$(RM) -r out/wpt
mkdir -p out/wpt
WPT_REPORT=1 $(PYTHON) tools/test.py --shell $(NODE) $(PARALLEL_ARGS) wpt
- $(NODE) "$$PWD/tools/merge-wpt-reports.mjs"
.PHONY: test-internet
test-internet: all
diff --git a/test/common/wpt.js b/test/common/wpt.js
index 3423241821..57c409f5cc 100644
--- a/test/common/wpt.js
+++ b/test/common/wpt.js
@@ -10,8 +10,6 @@ const os = require('os');
const { inspect } = require('util');
const { Worker } = require('worker_threads');
-const workerPath = path.join(__dirname, 'wpt/worker.js');
-
function getBrowserProperties() {
const { node: version } = process.versions; // e.g. 18.13.0, 20.0.0-nightly202302078e6e215481
const release = /^\d+\.\d+\.\d+$/.test(version);
@@ -59,8 +57,7 @@ function codeUnitStr(char) {
}
class WPTReport {
- constructor(path) {
- this.filename = `report-${path.replaceAll('/', '-')}.json`;
+ constructor() {
this.results = [];
this.time_start = Date.now();
}
@@ -99,18 +96,26 @@ class WPTReport {
return result;
});
- /**
- * Return required and some optional properties
- * https://github.com/web-platform-tests/wpt.fyi/blob/60da175/api/README.md?plain=1#L331-L335
- */
- this.run_info = {
- product: 'node.js',
- ...getBrowserProperties(),
- revision: process.env.WPT_REVISION || 'unknown',
- os: getOs(),
- };
+ if (fs.existsSync('out/wpt/wptreport.json')) {
+ const prev = JSON.parse(fs.readFileSync('out/wpt/wptreport.json'));
+ this.results = [...prev.results, ...this.results];
+ this.time_start = prev.time_start;
+ this.time_end = Math.max(this.time_end, prev.time_end);
+ this.run_info = prev.run_info;
+ } else {
+ /**
+ * Return required and some optional properties
+ * https://github.com/web-platform-tests/wpt.fyi/blob/60da175/api/README.md?plain=1#L331-L335
+ */
+ this.run_info = {
+ product: 'node.js',
+ ...getBrowserProperties(),
+ revision: process.env.WPT_REVISION || 'unknown',
+ os: getOs(),
+ };
+ }
- fs.writeFileSync(`out/wpt/${this.filename}`, JSON.stringify(this));
+ fs.writeFileSync('out/wpt/wptreport.json', JSON.stringify(this));
}
}
@@ -397,29 +402,6 @@ const kIncomplete = 'incomplete';
const kUncaught = 'uncaught';
const NODE_UNCAUGHT = 100;
-const limit = (concurrency) => {
- let running = 0;
- const queue = [];
-
- const execute = async (fn) => {
- if (running < concurrency) {
- running++;
- try {
- await fn();
- } finally {
- running--;
- if (queue.length > 0) {
- execute(queue.shift());
- }
- }
- } else {
- queue.push(fn);
- }
- };
-
- return execute;
-};
-
class WPTRunner {
constructor(path) {
this.path = path;
@@ -443,7 +425,7 @@ class WPTRunner {
this.scriptsModifier = null;
if (process.env.WPT_REPORT != null) {
- this.report = new WPTReport(path);
+ this.report = new WPTReport();
}
}
@@ -561,8 +543,6 @@ class WPTRunner {
this.inProgress = new Set(queue.map((spec) => spec.filename));
- const run = limit(os.availableParallelism());
-
for (const spec of queue) {
const testFileName = spec.filename;
const content = spec.getContent();
@@ -596,7 +576,15 @@ class WPTRunner {
this.scriptsModifier?.(obj);
scriptsToRun.push(obj);
- const runWorker = async (variant) => {
+ /**
+ * Example test with no META variant
+ * https://github.com/nodejs/node/blob/03854f6/test/fixtures/wpt/WebCryptoAPI/sign_verify/hmac.https.any.js#L1-L4
+ *
+ * Example test with multiple META variants
+ * https://github.com/nodejs/node/blob/03854f6/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js#L1-L9
+ */
+ for (const variant of meta.variant || ['']) {
+ const workerPath = path.join(__dirname, 'wpt/worker.js');
const worker = new Worker(workerPath, {
execArgv: this.flags,
workerData: {
@@ -647,17 +635,6 @@ class WPTRunner {
});
await events.once(worker, 'exit').catch(() => {});
- };
-
- /**
- * Example test with no META variant
- * https://github.com/nodejs/node/blob/03854f6/test/fixtures/wpt/WebCryptoAPI/sign_verify/hmac.https.any.js#L1-L4
- *
- * Example test with multiple META variants
- * https://github.com/nodejs/node/blob/03854f6/test/fixtures/wpt/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js#L1-L9
- */
- for (const variant of meta.variant || ['']) {
- run(() => runWorker(variant));
}
}
diff --git a/test/wpt/testcfg.py b/test/wpt/testcfg.py
index db235699dd..3c356cf474 100644
--- a/test/wpt/testcfg.py
+++ b/test/wpt/testcfg.py
@@ -3,4 +3,4 @@ sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import testpy
def GetConfiguration(context, root):
- return testpy.ParallelTestConfiguration(context, root, 'wpt')
+ return testpy.SimpleTestConfiguration(context, root, 'wpt')
diff --git a/tools/merge-wpt-reports.mjs b/tools/merge-wpt-reports.mjs
deleted file mode 100644
index 9199714f4b..0000000000
--- a/tools/merge-wpt-reports.mjs
+++ /dev/null
@@ -1,32 +0,0 @@
-import * as fs from 'node:fs';
-import * as path from 'node:path';
-import * as url from 'node:url';
-
-const __dirname = path.dirname(url.fileURLToPath(import.meta.url));
-
-const outDir = path.resolve(__dirname, '../out/wpt');
-const files = fs.readdirSync(outDir);
-const reports = files.filter((file) => file.endsWith('.json'));
-
-const startTimes = [];
-const endTimes = [];
-const results = [];
-let runInfo;
-
-for (const file of reports) {
- const report = JSON.parse(fs.readFileSync(path.resolve(outDir, file)));
- fs.unlinkSync(path.resolve(outDir, file));
- results.push(...report.results);
- startTimes.push(report.time_start);
- endTimes.push(report.time_end);
- runInfo ||= report.run_info;
-}
-
-const mergedReport = {
- time_start: Math.min(...startTimes),
- time_end: Math.max(...endTimes),
- run_info: runInfo,
- results,
-};
-
-fs.writeFileSync(path.resolve(outDir, 'wptreport.json'), JSON.stringify(mergedReport));