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