diff --git a/test/parallel/parallel.status b/test/parallel/parallel.status index 7bb3c158d2c661..42c32d03665113 100644 --- a/test/parallel/parallel.status +++ b/test/parallel/parallel.status @@ -12,7 +12,6 @@ test-tls-ticket-cluster : PASS,FLAKY [$system==linux] test-cluster-worker-forced-exit : PASS,FLAKY test-http-client-timeout-event : PASS,FLAKY -test-tick-processor : PASS,FLAKY test-tls-no-sslv3 : PASS,FLAKY test-child-process-buffering : PASS,FLAKY test-child-process-exit-code : PASS,FLAKY diff --git a/test/parallel/test-tick-processor.js b/test/parallel/test-tick-processor.js index ebcda79d679d55..5e1cf139886bc3 100644 --- a/test/parallel/test-tick-processor.js +++ b/test/parallel/test-tick-processor.js @@ -6,32 +6,48 @@ var cp = require('child_process'); var common = require('../common'); common.refreshTmpDir(); - process.chdir(common.tmpDir); -cp.execFileSync(process.execPath, ['-prof', '-pe', - 'function foo(n) {' + - 'require(\'vm\').runInDebugContext(\'Debug\');' + - 'return n < 2 ? n : setImmediate(function() { foo(n-1) + foo(n-2);}); };' + - 'setTimeout(function() { process.exit(0); }, 2000);' + - 'foo(40);']); -var matches = fs.readdirSync(common.tmpDir).filter(function(file) { - return /^isolate-/.test(file); -}); -if (matches.length != 1) { - assert.fail('There should be a single log file.'); -} -var log = matches[0]; var processor = path.join(common.testDir, '..', 'tools', 'v8-prof', getScriptName()); -var out = cp.execSync(processor + ' ' + log, {encoding: 'utf8'}); -assert(out.match(/LazyCompile.*foo/)); +// Unknown checked for to prevent flakiness, if pattern is not found, +// then a large number of unknown ticks should be present +runTest(/LazyCompile.*\[eval\]:1|.*% UNKNOWN/, + `function f() { + for (var i = 0; i < 1000000; i++) { + i++; + } + setImmediate(function() { f(); }); + }; + setTimeout(function() { process.exit(0); }, 2000); + f();`); if (process.platform === 'win32' || process.platform === 'sunos' || process.platform === 'freebsd') { console.log('1..0 # Skipped: C++ symbols are not mapped for this os.'); return; } -assert(out.match(/RunInDebugContext/)); +runTest(/RunInDebugContext/, + `function f() { + require(\'vm\').runInDebugContext(\'Debug\'); + setImmediate(function() { f(); }); + }; + setTimeout(function() { process.exit(0); }, 2000); + f();`); + +function runTest(pattern, code) { + cp.execFileSync(process.execPath, ['-prof', '-pe', code]); + var matches = fs.readdirSync(common.tmpDir).filter(function(file) { + return /^isolate-/.test(file); + }); + if (matches.length != 1) { + assert.fail('There should be a single log file.'); + } + var log = matches[0]; + var out = cp.execSync(processor + ' --call-graph-size=10 ' + log, + {encoding: 'utf8'}); + assert(out.match(pattern)); + fs.unlinkSync(log); +} function getScriptName() { switch (process.platform) {