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, {}, '[object Object]');
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();
});
});
|