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  'ContextifyScript::New',
11  'RunInContext',
12];
13
14if (process.argv[2] === 'child') {
15  const vm = require('vm');
16  vm.runInNewContext('1 + 1');
17} else {
18  tmpdir.refresh();
19
20  const proc = cp.fork(__filename,
21                       [ 'child' ], {
22                         cwd: tmpdir.path,
23                         execArgv: [
24                           '--trace-event-categories',
25                           'node.vm.script',
26                         ]
27                       });
28
29  proc.once('exit', common.mustCall(() => {
30    const file = path.join(tmpdir.path, 'node_trace.1.log');
31
32    assert(fs.existsSync(file));
33    fs.readFile(file, common.mustCall((err, data) => {
34      const traces = JSON.parse(data.toString()).traceEvents
35        .filter((trace) => trace.cat !== '__metadata');
36      traces.forEach((trace) => {
37        assert.strictEqual(trace.pid, proc.pid);
38        assert(names.includes(trace.name));
39      });
40    }));
41  }));
42}
43