1'use strict'; 2 3const common = require('../common'); 4const events = require('events'); 5const { createServer, request } = require('http'); 6const assert = require('assert'); 7 8events.captureRejections = true; 9 10{ 11 const server = createServer(common.mustCall(async (req, res) => { 12 // We will test that this header is cleaned up before forwarding. 13 res.setHeader('content-type', 'application/json'); 14 throw new Error('kaboom'); 15 })); 16 17 server.listen(0, common.mustCall(() => { 18 const req = request({ 19 method: 'GET', 20 host: server.address().host, 21 port: server.address().port 22 }); 23 24 req.end(); 25 26 req.on('response', common.mustCall((res) => { 27 assert.strictEqual(res.statusCode, 500); 28 assert.strictEqual(Object.hasOwn(res.headers, 'content-type'), false); 29 let data = ''; 30 res.setEncoding('utf8'); 31 res.on('data', common.mustCall((chunk) => { 32 data += chunk; 33 })); 34 res.on('end', common.mustCall(() => { 35 assert.strictEqual(data, 'Internal Server Error'); 36 server.close(); 37 })); 38 })); 39 })); 40} 41 42{ 43 let resolve; 44 const latch = new Promise((_resolve) => { 45 resolve = _resolve; 46 }); 47 const server = createServer(common.mustCall(async (req, res) => { 48 server.close(); 49 50 // We will test that this header is cleaned up before forwarding. 51 res.setHeader('content-type', 'application/json'); 52 res.write('{'); 53 req.resume(); 54 55 // Wait so the data is on the wire 56 await latch; 57 58 throw new Error('kaboom'); 59 })); 60 61 server.listen(0, common.mustCall(() => { 62 const req = request({ 63 method: 'GET', 64 host: server.address().host, 65 port: server.address().port 66 }); 67 68 req.end(); 69 70 req.on('response', common.mustCall((res) => { 71 assert.strictEqual(res.statusCode, 200); 72 assert.strictEqual(res.headers['content-type'], 'application/json'); 73 resolve(); 74 75 let data = ''; 76 res.setEncoding('utf8'); 77 res.on('data', common.mustCall((chunk) => { 78 data += chunk; 79 })); 80 81 req.on('close', common.mustCall(() => { 82 assert.strictEqual(data, '{'); 83 })); 84 })); 85 })); 86} 87 88{ 89 const server = createServer(common.mustCall(async (req, res) => { 90 // We will test that this header is cleaned up before forwarding. 91 res.writeHead(200); 92 throw new Error('kaboom'); 93 })); 94 95 server.listen(0, common.mustCall(() => { 96 const req = request({ 97 method: 'GET', 98 host: server.address().host, 99 port: server.address().port 100 }); 101 102 req.end(); 103 req.on('error', common.mustCall((err) => { 104 assert.strictEqual(err.code, 'ECONNRESET'); 105 server.close(); 106 })); 107 })); 108} 109