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 CODE = ` 10 const http = require('http'); 11 const server = http.createServer((req, res) => { 12 res.end('ok'); 13 server.close(); 14 }).listen(0, () => { 15 http.get({port: server.address().port}); 16 }); 17`; 18 19tmpdir.refresh(); 20const FILE_NAME = path.join(tmpdir.path, 'node_trace.1.log'); 21 22const proc = cp.spawn(process.execPath, 23 [ '--trace-events-enabled', 24 '--trace-event-categories', 'node.http', 25 '-e', CODE ], 26 { cwd: tmpdir.path }); 27 28proc.once('exit', common.mustCall(() => { 29 assert(fs.existsSync(FILE_NAME)); 30 fs.readFile(FILE_NAME, common.mustCall((err, data) => { 31 assert(!err); 32 const traces = JSON.parse(data.toString()).traceEvents; 33 assert(traces.length > 0); 34 let count = 0; 35 traces.forEach((trace) => { 36 if (trace.cat === 'node,node.http' && 37 ['http.server.request', 'http.client.request'].includes(trace.name)) { 38 count++; 39 } 40 }); 41 // Two begin, two end 42 assert.strictEqual(count, 4); 43 })); 44})); 45