• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2const common = require('../common');
3const assert = require('assert');
4const cp = require('child_process');
5const path = require('path');
6const fs = require('fs');
7const tmpdir = require('../common/tmpdir');
8
9// Tests that node.console trace events for counters and time methods are
10// emitted as expected.
11
12const names = [
13  'time::foo',
14  'count::bar',
15];
16const expectedCounts = [ 1, 2, 0 ];
17const expectedTimeTypes = [ 'b', 'n', 'e' ];
18
19if (process.argv[2] === 'child') {
20  // The following console outputs exercise the test, causing node.console
21  // trace events to be emitted for the counter and time calls.
22  console.count('bar');
23  console.count('bar');
24  console.countReset('bar');
25  console.time('foo');
26  setImmediate(() => {
27    console.timeLog('foo');
28    setImmediate(() => {
29      console.timeEnd('foo');
30    });
31  });
32} else {
33  tmpdir.refresh();
34
35  const proc = cp.fork(__filename,
36                       [ 'child' ], {
37                         cwd: tmpdir.path,
38                         execArgv: [
39                           '--trace-event-categories',
40                           'node.console',
41                         ]
42                       });
43
44  proc.once('exit', common.mustCall(async () => {
45    const file = path.join(tmpdir.path, 'node_trace.1.log');
46
47    assert(fs.existsSync(file));
48    const data = await fs.promises.readFile(file, { encoding: 'utf8' });
49    JSON.parse(data).traceEvents
50      .filter((trace) => trace.cat !== '__metadata')
51      .forEach((trace) => {
52        assert.strictEqual(trace.pid, proc.pid);
53        assert(names.includes(trace.name));
54        if (trace.name === 'count::bar')
55          assert.strictEqual(trace.args.data, expectedCounts.shift());
56        else if (trace.name === 'time::foo')
57          assert.strictEqual(trace.ph, expectedTimeTypes.shift());
58      });
59    assert.strictEqual(expectedCounts.length, 0);
60    assert.strictEqual(expectedTimeTypes.length, 0);
61  }));
62}
63