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