node/test/parallel/test-next-tick-intentional-starvation.js
Gibson Fahnestock 7a0e462f9f test: use eslint to fix var->const/let
Manually fix issues that eslint --fix couldn't do automatically.

PR-URL: https://github.com/nodejs/node/pull/10685
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Roman Reiss <me@silverwind.io>
2017-01-11 11:43:52 +00:00

45 lines
928 B
JavaScript

'use strict';
require('../common');
const assert = require('assert');
// this is the inverse of test-next-tick-starvation.
// it verifies that process.nextTick will *always* come before other
// events, up to the limit of the process.maxTickDepth value.
// WARNING: unsafe!
process.maxTickDepth = Infinity;
let ran = false;
let starved = false;
const start = +new Date();
let timerRan = false;
function spin() {
ran = true;
const now = +new Date();
if (now - start > 100) {
console.log('The timer is starving, just as we planned.');
starved = true;
// now let it out.
return;
}
process.nextTick(spin);
}
function onTimeout() {
if (!starved) throw new Error('The timer escaped!');
console.log('The timer ran once the ban was lifted');
timerRan = true;
}
spin();
setTimeout(onTimeout, 50);
process.on('exit', function() {
assert.ok(ran);
assert.ok(starved);
assert.ok(timerRan);
});