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