summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMatteo Collina <hello@matteocollina.com>2019-09-03 09:41:15 +0200
committerMatteo Collina <hello@matteocollina.com>2019-12-03 12:14:50 +0100
commit286b4536c5bf754150fc5e42db06acae9691da13 (patch)
treeeb9b81cea64f03f29b228465d965fe11f26e36a6 /test
parente490d9b1539a7ec5f6b9d9b2f18753ce1c3459f7 (diff)
downloadandroid-node-v8-286b4536c5bf754150fc5e42db06acae9691da13.tar.gz
android-node-v8-286b4536c5bf754150fc5e42db06acae9691da13.tar.bz2
android-node-v8-286b4536c5bf754150fc5e42db06acae9691da13.zip
http: implement capture rejections for 'request' event
PR-URL: https://github.com/nodejs/node/pull/27867 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-http-server-capture-rejections.js108
1 files changed, 108 insertions, 0 deletions
diff --git a/test/parallel/test-http-server-capture-rejections.js b/test/parallel/test-http-server-capture-rejections.js
new file mode 100644
index 0000000000..b437e27b58
--- /dev/null
+++ b/test/parallel/test-http-server-capture-rejections.js
@@ -0,0 +1,108 @@
+'use strict';
+
+const common = require('../common');
+const events = require('events');
+const { createServer, request } = require('http');
+const assert = require('assert');
+
+events.captureRejections = true;
+
+{
+ const server = createServer(common.mustCall(async (req, res) => {
+ // We will test that this header is cleaned up before forwarding.
+ res.setHeader('content-type', 'application/json');
+ throw new Error('kaboom');
+ }));
+
+ server.listen(0, common.mustCall(() => {
+ const req = request({
+ method: 'GET',
+ host: server.address().host,
+ port: server.address().port
+ });
+
+ req.end();
+
+ req.on('response', common.mustCall((res) => {
+ assert.strictEqual(res.statusCode, 500);
+ assert.strictEqual(res.headers.hasOwnProperty('content-type'), false);
+ let data = '';
+ res.setEncoding('utf8');
+ res.on('data', common.mustCall((chunk) => {
+ data += chunk;
+ }));
+ res.on('end', common.mustCall(() => {
+ assert.strictEqual(data, 'Internal Server Error');
+ server.close();
+ }));
+ }));
+ }));
+}
+
+{
+ let resolve;
+ const latch = new Promise((_resolve) => {
+ resolve = _resolve;
+ });
+ const server = createServer(common.mustCall(async (req, res) => {
+ server.close();
+
+ // We will test that this header is cleaned up before forwarding.
+ res.setHeader('content-type', 'application/json');
+ res.write('{');
+ req.resume();
+
+ // Wait so the data is on the wire
+ await latch;
+
+ throw new Error('kaboom');
+ }));
+
+ server.listen(0, common.mustCall(() => {
+ const req = request({
+ method: 'GET',
+ host: server.address().host,
+ port: server.address().port
+ });
+
+ req.end();
+
+ req.on('response', common.mustCall((res) => {
+ assert.strictEqual(res.statusCode, 200);
+ assert.strictEqual(res.headers['content-type'], 'application/json');
+ resolve();
+
+ let data = '';
+ res.setEncoding('utf8');
+ res.on('data', common.mustCall((chunk) => {
+ data += chunk;
+ }));
+
+ req.on('close', common.mustCall(() => {
+ assert.strictEqual(data, '{');
+ }));
+ }));
+ }));
+}
+
+{
+ const server = createServer(common.mustCall(async (req, res) => {
+ // We will test that this header is cleaned up before forwarding.
+ res.writeHead(200);
+ throw new Error('kaboom');
+ }));
+
+ server.listen(0, common.mustCall(() => {
+ const req = request({
+ method: 'GET',
+ host: server.address().host,
+ port: server.address().port
+ });
+
+ req.end();
+ req.on('error', common.mustCall((err) => {
+ assert.strictEqual(err.code, 'ECONNRESET');
+ server.close();
+ }));
+ }));
+}