summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorvmarchaud <contact@vmarchaud.fr>2019-06-30 22:37:18 +0200
committerAnna Henningsen <anna@addaleax.net>2019-07-12 00:36:27 +0200
commit0ebf01dc53b474ffca78c7ace023bb10341b6664 (patch)
tree47aa24677e1903e7a2d5f694b19ea12f59ad7d43 /test
parentca0884a60b2fc828b6ca35e9b46e6979d9024146 (diff)
downloadandroid-node-v8-0ebf01dc53b474ffca78c7ace023bb10341b6664.tar.gz
android-node-v8-0ebf01dc53b474ffca78c7ace023bb10341b6664.tar.bz2
android-node-v8-0ebf01dc53b474ffca78c7ace023bb10341b6664.zip
perf_hooks: add HttpRequest statistics monitoring #28445
```js const { PerformanceObserver, performance } = require('perf_hooks'); const http = require('http'); const obs = new PerformanceObserver((items) => { const entry = items.getEntries()[0]; console.log(entry.name, entry.duration); }); obs.observe({ entryTypes: ['http'] }); const server = http.Server(function(req, res) { server.close(); res.writeHead(200); res.end('hello world\n'); }); server.listen(0, function() { const req = http.request({ port: this.address().port, path: '/', method: 'POST' }).end(); }); ``` PR-URL: https://github.com/nodejs/node/pull/28486 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-http-perf_hooks.js58
1 files changed, 58 insertions, 0 deletions
diff --git a/test/parallel/test-http-perf_hooks.js b/test/parallel/test-http-perf_hooks.js
new file mode 100644
index 0000000000..f28885e436
--- /dev/null
+++ b/test/parallel/test-http-perf_hooks.js
@@ -0,0 +1,58 @@
+'use strict';
+
+const common = require('../common');
+const assert = require('assert');
+const http = require('http');
+
+const { PerformanceObserver } = require('perf_hooks');
+
+const obs = new PerformanceObserver(common.mustCall((items) => {
+ const entry = items.getEntries()[0];
+ assert.strictEqual(entry.entryType, 'http');
+ assert.strictEqual(typeof entry.startTime, 'number');
+ assert.strictEqual(typeof entry.duration, 'number');
+}, 2));
+
+obs.observe({ entryTypes: ['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();
+}));