summaryrefslogtreecommitdiff
path: root/test/parallel/test-http-response-statuscode.js
blob: 680fa37cf6f9f4e984e36e51d718c63afdc85f23 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
'use strict';
const common = require('../common');
const assert = require('assert');
const http = require('http');
const Countdown = require('../common/countdown');

const MAX_REQUESTS = 13;
let reqNum = 0;

function test(res, header, code) {
  common.expectsError(() => {
    res.writeHead(header);
  }, {
    code: 'ERR_HTTP_INVALID_STATUS_CODE',
    type: RangeError,
    message: `Invalid status code: ${code}`
  });
}

const server = http.Server(common.mustCall(function(req, res) {
  switch (reqNum) {
    case 0:
      test(res, -1, '-1');
      break;
    case 1:
      test(res, Infinity, 'Infinity');
      break;
    case 2:
      test(res, NaN, 'NaN');
      break;
    case 3:
      test(res, {}, '{}');
      break;
    case 4:
      test(res, 99, '99');
      break;
    case 5:
      test(res, 1000, '1000');
      break;
    case 6:
      test(res, '1000', '1000');
      break;
    case 7:
      test(res, null, 'null');
      break;
    case 8:
      test(res, true, 'true');
      break;
    case 9:
      test(res, [], '[]');
      break;
    case 10:
      test(res, 'this is not valid', 'this is not valid');
      break;
    case 11:
      test(res, '404 this is not valid either', '404 this is not valid either');
      break;
    case 12:
      common.expectsError(() => { res.writeHead(); },
                          {
                            code: 'ERR_HTTP_INVALID_STATUS_CODE',
                            type: RangeError,
                            message: 'Invalid status code: undefined'
                          });
      this.close();
      break;
    default:
      throw new Error('Unexpected request');
  }
  res.statusCode = 200;
  res.end();
}, MAX_REQUESTS));
server.listen();

const countdown = new Countdown(MAX_REQUESTS, () => server.close());

server.on('listening', function makeRequest() {
  http.get({
    port: this.address().port
  }, (res) => {
    assert.strictEqual(res.statusCode, 200);
    res.on('end', () => {
      countdown.dec();
      reqNum = MAX_REQUESTS - countdown.remaining;
      if (countdown.remaining > 0)
        makeRequest.call(this);
    });
    res.resume();
  });
});