|
3 | 3 | const common = require('../common'); |
4 | 4 | const http = require('http'); |
5 | 5 | const assert = require('assert'); |
6 | | -const Countdown = require('../common/countdown'); |
7 | 6 |
|
8 | | -const MAX_COUNT = 2; |
| 7 | +// TODO(@jasnell) At some point this should be refactored as the API should not |
| 8 | +// be allowing users to set multiple content-length values in the first place. |
9 | 9 |
|
10 | | -const server = http.createServer((req, res) => { |
11 | | - const num = req.headers['x-num']; |
12 | | - // TODO(@jasnell) At some point this should be refactored as the API |
13 | | - // should not be allowing users to set multiple content-length values |
14 | | - // in the first place. |
15 | | - switch (num) { |
16 | | - case '1': |
17 | | - res.setHeader('content-length', [2, 1]); |
18 | | - break; |
19 | | - case '2': |
20 | | - res.writeHead(200, { 'content-length': [1, 2] }); |
21 | | - break; |
22 | | - default: |
23 | | - assert.fail('should never get here'); |
24 | | - } |
25 | | - res.end('ok'); |
26 | | -}); |
27 | | - |
28 | | -const countdown = new Countdown(MAX_COUNT, () => server.close()); |
29 | | - |
30 | | -server.listen(0, common.mustCall(() => { |
31 | | - for (let n = 1; n <= MAX_COUNT; n++) { |
32 | | - // This runs twice, the first time, the server will use |
33 | | - // setHeader, the second time it uses writeHead. In either |
34 | | - // case, the error handler must be called because the client |
35 | | - // is not allowed to accept multiple content-length headers. |
| 10 | +function test(server) { |
| 11 | + server.listen(0, common.mustCall(() => { |
36 | 12 | http.get( |
37 | | - { port: server.address().port, headers: { 'x-num': n } }, |
38 | | - (res) => { |
39 | | - assert.fail('client allowed multiple content-length headers.'); |
40 | | - } |
| 13 | + { port: server.address().port }, |
| 14 | + () => { assert.fail('Client allowed multiple content-length headers.'); } |
41 | 15 | ).on('error', common.mustCall((err) => { |
42 | | - assert(/^Parse Error/.test(err.message)); |
| 16 | + assert.ok(err.message.startsWith('Parse Error'), err.message); |
43 | 17 | assert.strictEqual(err.code, 'HPE_UNEXPECTED_CONTENT_LENGTH'); |
44 | | - countdown.dec(); |
| 18 | + server.close(); |
45 | 19 | })); |
46 | | - } |
47 | | -})); |
| 20 | + })); |
| 21 | +} |
| 22 | + |
| 23 | +// Test adding an extra content-length header using setHeader(). |
| 24 | +{ |
| 25 | + const server = http.createServer((req, res) => { |
| 26 | + res.setHeader('content-length', [2, 1]); |
| 27 | + res.end('ok'); |
| 28 | + }); |
| 29 | + |
| 30 | + test(server); |
| 31 | +} |
| 32 | + |
| 33 | +// Test adding an extra content-length header using writeHead(). |
| 34 | +{ |
| 35 | + const server = http.createServer((req, res) => { |
| 36 | + res.writeHead(200, { 'content-length': [1, 2] }); |
| 37 | + res.end('ok'); |
| 38 | + }); |
| 39 | + |
| 40 | + test(server); |
| 41 | +} |
0 commit comments