41 lines
2.2 KiB
JavaScript
41 lines
2.2 KiB
JavaScript
// Opt-in check of the built production worker; synthetic input only.
|
|
import assert from 'node:assert/strict';
|
|
import { Worker } from 'node:worker_threads';
|
|
|
|
const entry = new URL('../../dist-server/import-worker.mjs', import.meta.url).href;
|
|
const harness = new URL(`data:text/javascript,${encodeURIComponent(`
|
|
import { createRequire } from 'node:module';
|
|
import { parentPort } from 'node:worker_threads';
|
|
const require = createRequire(${JSON.stringify(entry)});
|
|
const send = parentPort.postMessage.bind(parentPort);
|
|
parentPort.postMessage = result => send({ ...result,
|
|
markupLoaded: Object.keys(require.cache).some(path => /[\\\\/]node_modules[\\\\/]jsdom[\\\\/]/.test(path)) });
|
|
await import(${JSON.stringify(entry)});
|
|
`)}`);
|
|
const csv = '"Domain"\r\n"synthetic.example.invalid"\r\n';
|
|
const start = Date.now();
|
|
for (let batch = 0; batch < 11; batch++) {
|
|
await Promise.all([0, 1].map(async index => {
|
|
const bytes = new TextEncoder().encode(csv);
|
|
const worker = new Worker(harness, {
|
|
execArgv: [],
|
|
workerData: { source: { metadata: { name: `synthetic-${batch}-${index}.csv`, sizeBytes: bytes.length, lastModified: 0 }, bytes } },
|
|
resourceLimits: { maxOldGenerationSizeMb: 512, maxYoungGenerationSizeMb: 64, stackSizeMb: 8 }
|
|
});
|
|
try {
|
|
const result = await new Promise((resolve, reject) => {
|
|
const timer = setTimeout(() => reject(new Error('Production worker exceeded its unchanged 30-second limit')), 30_000);
|
|
worker.once('message', result => { clearTimeout(timer); resolve(result); });
|
|
worker.once('error', error => { clearTimeout(timer); reject(error); });
|
|
});
|
|
assert.equal(result.ok, true);
|
|
assert.equal(result.dataset.format, 'CSV');
|
|
assert.equal(result.dataset.rawText, csv);
|
|
assert.equal(result.dataset.intermediate.tables.length, 1);
|
|
assert.deepEqual(result.dataset.intermediate.tables[0].rows.map(row => row.cells.map(cell => cell.rawValue)), [['Domain'], ['synthetic.example.invalid']]);
|
|
assert.equal(result.markupLoaded, false, 'CSV workers must not initialize the unrelated HTML/XML DOM runtime');
|
|
} finally { await worker.terminate(); }
|
|
}));
|
|
}
|
|
console.log(JSON.stringify({ syntheticFiles: 22, elapsedMs: Date.now() - start, markupLoaded: false }));
|