summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2019-02-19 17:55:47 +0800
committerJoyee Cheung <joyeec9h3@gmail.com>2019-02-21 10:47:31 +0800
commit85df2c4703242679e409f648de95843f4a1f69a7 (patch)
tree6e8034bf0a5f30ea99488f49dc69a5fa99ec5eb0
parent908e114750989d42797a917938529a9b2ebed13e (diff)
downloadandroid-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.js83
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 }));
+}