1'use strict'; 2 3const common = require('../common'); 4const assert = require('assert'); 5const http = require('http'); 6 7const { PerformanceObserver } = require('perf_hooks'); 8const entries = []; 9const obs = new PerformanceObserver(common.mustCallAtLeast((items) => { 10 entries.push(...items.getEntries()); 11})); 12 13obs.observe({ type: 'http' }); 14 15const expected = 'Post Body For Test'; 16const makeRequest = (options) => { 17 return new Promise((resolve, reject) => { 18 http.request(options, common.mustCall((res) => { 19 resolve(); 20 })).on('error', reject).end(options.data); 21 }); 22}; 23 24const server = http.Server(common.mustCall((req, res) => { 25 let result = ''; 26 27 req.setEncoding('utf8'); 28 req.on('data', function(chunk) { 29 result += chunk; 30 }); 31 32 req.on('end', common.mustCall(function() { 33 assert.strictEqual(result, expected); 34 res.writeHead(200); 35 res.end('hello world\n'); 36 })); 37}, 2)); 38 39server.listen(0, common.mustCall(async () => { 40 await Promise.all([ 41 makeRequest({ 42 port: server.address().port, 43 path: '/', 44 method: 'POST', 45 data: expected 46 }), 47 makeRequest({ 48 port: server.address().port, 49 path: '/', 50 method: 'POST', 51 data: expected 52 }), 53 ]); 54 server.close(); 55})); 56 57process.on('exit', () => { 58 let numberOfHttpClients = 0; 59 let numberOfHttpRequests = 0; 60 for (const entry of entries) { 61 assert.strictEqual(entry.entryType, 'http'); 62 assert.strictEqual(typeof entry.startTime, 'number'); 63 assert.strictEqual(typeof entry.duration, 'number'); 64 if (entry.name === 'HttpClient') { 65 numberOfHttpClients++; 66 } else if (entry.name === 'HttpRequest') { 67 numberOfHttpRequests++; 68 } 69 assert.strictEqual(typeof entry.detail.req.method, 'string'); 70 assert.strictEqual(typeof entry.detail.req.url, 'string'); 71 assert.strictEqual(typeof entry.detail.req.headers, 'object'); 72 assert.strictEqual(typeof entry.detail.res.statusCode, 'number'); 73 assert.strictEqual(typeof entry.detail.res.statusMessage, 'string'); 74 assert.strictEqual(typeof entry.detail.res.headers, 'object'); 75 } 76 assert.strictEqual(numberOfHttpClients, 2); 77 assert.strictEqual(numberOfHttpRequests, 2); 78}); 79