'use strict'; const common = require('../common'); const assert = require('assert'); const http = require('http'); const { PerformanceObserver } = require('perf_hooks'); const entries = []; const obs = new PerformanceObserver(common.mustCallAtLeast((items) => { entries.push(...items.getEntries()); })); obs.observe({ type: 'http' }); const expected = 'Post Body For Test'; const makeRequest = (options) => { return new Promise((resolve, reject) => { http.request(options, common.mustCall((res) => { resolve(); })).on('error', reject).end(options.data); }); }; const server = http.Server(common.mustCall((req, res) => { let result = ''; req.setEncoding('utf8'); req.on('data', function(chunk) { result += chunk; }); req.on('end', common.mustCall(function() { assert.strictEqual(result, expected); res.writeHead(200); res.end('hello world\n'); })); }, 2)); server.listen(0, common.mustCall(async () => { await Promise.all([ makeRequest({ port: server.address().port, path: '/', method: 'POST', data: expected }), makeRequest({ port: server.address().port, path: '/', method: 'POST', data: expected }), ]); server.close(); })); process.on('exit', () => { let numberOfHttpClients = 0; let numberOfHttpRequests = 0; for (const entry of entries) { assert.strictEqual(entry.entryType, 'http'); assert.strictEqual(typeof entry.startTime, 'number'); assert.strictEqual(typeof entry.duration, 'number'); if (entry.name === 'HttpClient') { numberOfHttpClients++; } else if (entry.name === 'HttpRequest') { numberOfHttpRequests++; } assert.strictEqual(typeof entry.detail.req.method, 'string'); assert.strictEqual(typeof entry.detail.req.url, 'string'); assert.strictEqual(typeof entry.detail.req.headers, 'object'); assert.strictEqual(typeof entry.detail.res.statusCode, 'number'); assert.strictEqual(typeof entry.detail.res.statusMessage, 'string'); assert.strictEqual(typeof entry.detail.res.headers, 'object'); } assert.strictEqual(numberOfHttpClients, 2); assert.strictEqual(numberOfHttpRequests, 2); });