1'use strict'; 2require('../common'); 3const assert = require('assert'); 4const http = require('http'); 5const Countdown = require('../common/countdown'); 6 7const expectedHeadersMultipleWrites = { 8 'connection': 'close', 9 'transfer-encoding': 'chunked', 10}; 11 12const expectedHeadersEndWithData = { 13 'connection': 'close', 14 'content-length': String('hello world'.length) 15}; 16 17const expectedHeadersEndNoData = { 18 'connection': 'close', 19 'content-length': '0', 20}; 21 22 23const countdown = new Countdown(3, () => server.close()); 24 25const server = http.createServer(function(req, res) { 26 res.removeHeader('Date'); 27 28 switch (req.url.substr(1)) { 29 case 'multiple-writes': 30 assert.deepStrictEqual(req.headers, expectedHeadersMultipleWrites); 31 res.write('hello'); 32 res.end('world'); 33 break; 34 case 'end-with-data': 35 assert.deepStrictEqual(req.headers, expectedHeadersEndWithData); 36 res.end('hello world'); 37 break; 38 case 'empty': 39 assert.deepStrictEqual(req.headers, expectedHeadersEndNoData); 40 res.end(); 41 break; 42 default: 43 throw new Error('Unreachable'); 44 } 45 46 countdown.dec(); 47}); 48 49server.listen(0, function() { 50 let req; 51 52 req = http.request({ 53 port: this.address().port, 54 method: 'POST', 55 path: '/multiple-writes' 56 }); 57 req.removeHeader('Date'); 58 req.removeHeader('Host'); 59 req.write('hello '); 60 req.end('world'); 61 req.on('response', function(res) { 62 assert.deepStrictEqual(res.headers, expectedHeadersMultipleWrites); 63 }); 64 65 req = http.request({ 66 port: this.address().port, 67 method: 'POST', 68 path: '/end-with-data' 69 }); 70 req.removeHeader('Date'); 71 req.removeHeader('Host'); 72 req.end('hello world'); 73 req.on('response', function(res) { 74 assert.deepStrictEqual(res.headers, expectedHeadersEndWithData); 75 }); 76 77 req = http.request({ 78 port: this.address().port, 79 method: 'POST', 80 path: '/empty' 81 }); 82 req.removeHeader('Date'); 83 req.removeHeader('Host'); 84 req.end(); 85 req.on('response', function(res) { 86 assert.deepStrictEqual(res.headers, expectedHeadersEndNoData); 87 }); 88 89}); 90