mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
2d22820acf
Previously the tests required that Node.js finish the initialization of the watchdog thread and fires the timeout within 100ms, which can be difficult on certain systems under load. This patch relaxes the requirement to 2000ms. If there is a bug and the timeout can actually be escaped, raising the timeout to 2000ms would not make a difference anyway. PR-URL: https://github.com/nodejs/node/pull/44433 Refs: https://github.com/nodejs/reliability/issues/333 Refs: https://github.com/nodejs/reliability/issues/361 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
40 lines
870 B
JavaScript
40 lines
870 B
JavaScript
'use strict';
|
|
|
|
// https://github.com/nodejs/node/issues/3020
|
|
// Promises used to allow code to escape the timeout
|
|
// set for runInContext, runInNewContext, and runInThisContext.
|
|
|
|
require('../common');
|
|
const assert = require('assert');
|
|
const vm = require('vm');
|
|
|
|
const NS_PER_MS = 1000000n;
|
|
|
|
const hrtime = process.hrtime.bigint;
|
|
|
|
function loop() {
|
|
const start = hrtime();
|
|
while (1) {
|
|
const current = hrtime();
|
|
const span = (current - start) / NS_PER_MS;
|
|
if (span >= 2000n) {
|
|
throw new Error(
|
|
`escaped timeout at ${span} milliseconds!`);
|
|
}
|
|
}
|
|
}
|
|
|
|
assert.throws(() => {
|
|
vm.runInNewContext(
|
|
'Promise.resolve().then(() => loop()); loop();',
|
|
{
|
|
hrtime,
|
|
loop
|
|
},
|
|
{ timeout: 5, microtaskMode: 'afterEvaluate' }
|
|
);
|
|
}, {
|
|
code: 'ERR_SCRIPT_EXECUTION_TIMEOUT',
|
|
message: 'Script execution timed out after 5ms'
|
|
});
|