|
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