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