-
Notifications
You must be signed in to change notification settings - Fork 29.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
`node --prof foo.js` may not print the full profile log file, the last line will broken like `tick,` and not more blank line. `readline`will stuck in infinite loop, add `bytes === 0` will fix it.
- Loading branch information
Showing
5 changed files
with
97 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
66 changes: 66 additions & 0 deletions
66
test/tick-processor/test-tick-processor-polyfill-brokenfile.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
'use strict'; | ||
const common = require('../common'); | ||
const tmpdir = require('../common/tmpdir'); | ||
tmpdir.refresh(); | ||
|
||
if (!common.enoughTestCpu) | ||
common.skip('test is CPU-intensive'); | ||
|
||
if ( | ||
common.isWindows || | ||
common.isSunOS || | ||
common.isAIX || | ||
common.isLinuxPPCBE || | ||
common.isFreeBSD | ||
) { | ||
common.skip('C++ symbols are not mapped for this os.'); | ||
} | ||
|
||
//This test will produce a broken profile log. | ||
//ensure prof-polyfill not stuck in infinite loop | ||
//and success process | ||
|
||
|
||
const assert = require('assert'); | ||
const cp = require('child_process'); | ||
const path = require('path'); | ||
const fs = require('fs'); | ||
|
||
const LOG_FILE = path.join(tmpdir.path, 'tick-processor.log'); | ||
const RETRY_TIMEOUT = 150; | ||
const BROKEN_PART = 'tick,'; | ||
const WARN_REG_EXP = /\(node:\d+\) \[BROKEN_PROFILE_FILE\] Warning: profile file is broken[\r\n]+".*tick," at the file end is broken/; | ||
|
||
const code = `function f() { | ||
this.ts = Date.now(); | ||
setImmediate(function() { new f(); }); | ||
}; | ||
f();`; | ||
|
||
const proc = cp.spawn(process.execPath, [ | ||
'--no_logfile_per_isolate', | ||
'--logfile=-', | ||
'--prof', | ||
'-pe', code | ||
], { | ||
stdio: ['ignore', 'pipe', 'inherit'] | ||
}); | ||
|
||
let ticks = ''; | ||
proc.stdout.on('data', (chunk) => ticks += chunk); | ||
|
||
|
||
function runPolyfill(content) { | ||
proc.kill(); | ||
content += BROKEN_PART; | ||
fs.writeFileSync(LOG_FILE, content); | ||
const child = cp.spawnSync( | ||
`${process.execPath}`, | ||
[ | ||
'--prof-process', LOG_FILE | ||
]); | ||
assert(WARN_REG_EXP.test(child.stderr.toString())); | ||
assert.strictEqual(child.status, 0, 'broken file should success too'); | ||
} | ||
|
||
setTimeout(() => runPolyfill(ticks), RETRY_TIMEOUT); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters