diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2019-02-19 17:55:47 +0800 |
---|---|---|
committer | Joyee Cheung <joyeec9h3@gmail.com> | 2019-02-21 10:47:31 +0800 |
commit | 85df2c4703242679e409f648de95843f4a1f69a7 (patch) | |
tree | 6e8034bf0a5f30ea99488f49dc69a5fa99ec5eb0 | |
parent | 908e114750989d42797a917938529a9b2ebed13e (diff) | |
download | android-node-v8-85df2c4703242679e409f648de95843f4a1f69a7.tar.gz android-node-v8-85df2c4703242679e409f648de95843f4a1f69a7.tar.bz2 android-node-v8-85df2c4703242679e409f648de95843f4a1f69a7.zip |
test: add test for dynamically enabling node.async_hooks tracing
PR-URL: https://github.com/nodejs/node/pull/26062
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r-- | test/parallel/test-trace-events-async-hooks-dynamic.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/test/parallel/test-trace-events-async-hooks-dynamic.js b/test/parallel/test-trace-events-async-hooks-dynamic.js new file mode 100644 index 0000000000..884909b2a3 --- /dev/null +++ b/test/parallel/test-trace-events-async-hooks-dynamic.js @@ -0,0 +1,83 @@ +'use strict'; + +const common = require('../common'); +if (!process.binding('config').hasTracing) + common.skip('missing trace events'); + +const assert = require('assert'); +const cp = require('child_process'); +const fs = require('fs'); +const path = require('path'); +const util = require('util'); + +const enable = `require("trace_events").createTracing( +{ categories: ["node.async_hooks"] }).enable();`; +const code = + 'setTimeout(() => { for (var i = 0; i < 100000; i++) { "test" + i } }, 1)'; + +const tmpdir = require('../common/tmpdir'); +const filename = path.join(tmpdir.path, 'node_trace.1.log'); + +tmpdir.refresh(); +const proc = cp.spawnSync( + process.execPath, + ['-e', enable + code ], + { + cwd: tmpdir.path, + env: Object.assign({}, process.env, { + 'NODE_DEBUG_NATIVE': 'tracing', + 'NODE_DEBUG': 'tracing' + }) + }); +console.log(proc.signal); +console.log(proc.stderr.toString()); +assert.strictEqual(proc.status, 0); + +assert(fs.existsSync(filename)); +const data = fs.readFileSync(filename, 'utf-8'); +const traces = JSON.parse(data).traceEvents; +assert(traces.length > 0); +// V8 trace events should be generated. +assert(!traces.some((trace) => { + if (trace.pid !== proc.pid) + return false; + if (trace.cat !== 'v8') + return false; + if (trace.name !== 'V8.ScriptCompiler') + return false; + return true; +})); + +// C++ async_hooks trace events should be generated. +assert(traces.some((trace) => { + if (trace.pid !== proc.pid) + return false; + if (trace.cat !== 'node,node.async_hooks') + return false; + return true; +})); + +// JavaScript async_hooks trace events should be generated. +assert(traces.some((trace) => { + if (trace.pid !== proc.pid) + return false; + if (trace.cat !== 'node,node.async_hooks') + return false; + if (trace.name !== 'Timeout') + return false; + return true; +})); + +// Check args in init events +const initEvents = traces.filter((trace) => { + return (trace.ph === 'b' && !trace.name.includes('_CALLBACK')); +}); +for (const trace of initEvents) { + console.log(trace); + if (trace.args.data.executionAsyncId > 0 && + trace.args.data.triggerAsyncId > 0) { + continue; + } + assert.fail('Unexpected initEvent: ', + util.inspect(trace, { depth: Infinity })); +} |