diff options
Diffstat (limited to 'test/known_issues/test-vm-timeout-escape-queuemicrotask.js')
-rw-r--r-- | test/known_issues/test-vm-timeout-escape-queuemicrotask.js | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/test/known_issues/test-vm-timeout-escape-queuemicrotask.js b/test/known_issues/test-vm-timeout-escape-queuemicrotask.js new file mode 100644 index 0000000000..8de33bc24d --- /dev/null +++ b/test/known_issues/test-vm-timeout-escape-queuemicrotask.js @@ -0,0 +1,40 @@ +'use strict'; + +// https://github.com/nodejs/node/issues/3020 +// Promises, nextTick, and queueMicrotask 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 >= 100n) { + throw new Error( + `escaped timeout at ${span} milliseconds!`); + } + } +} + +assert.throws(() => { + vm.runInNewContext( + 'queueMicrotask(loop); loop();', + { + hrtime, + queueMicrotask, + loop + }, + { timeout: 5 } + ); +}, { + code: 'ERR_SCRIPT_EXECUTION_TIMEOUT', + message: 'Script execution timed out after 5ms' +}); |