• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2const common = require('../common');
3const assert = require('assert');
4const cp = require('child_process');
5const fs = require('fs');
6const path = require('path');
7const tmpdir = require('../common/tmpdir');
8
9const names = [
10  'environment',
11  'nodeStart',
12  'v8Start',
13  'loopStart',
14  'loopExit',
15  'bootstrapComplete',
16];
17
18if (process.argv[2] === 'child') {
19  1 + 1; // eslint-disable-line no-unused-expressions
20} else {
21  tmpdir.refresh();
22
23  const proc = cp.fork(__filename,
24                       [ 'child' ], {
25                         cwd: tmpdir.path,
26                         execArgv: [
27                           '--trace-event-categories',
28                           'node.bootstrap',
29                         ]
30                       });
31
32  proc.once('exit', common.mustCall(() => {
33    const file = path.join(tmpdir.path, 'node_trace.1.log');
34
35    assert(fs.existsSync(file));
36    fs.readFile(file, common.mustCall((err, data) => {
37      const traces = JSON.parse(data.toString()).traceEvents
38        .filter((trace) => trace.cat !== '__metadata');
39      traces.forEach((trace) => {
40        assert.strictEqual(trace.pid, proc.pid);
41        assert(names.includes(trace.name));
42      });
43    }));
44  }));
45}
46