diff options
author | osddeitf <37999210+osddeitf@users.noreply.github.com> | 2023-08-28 14:32:54 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-28 09:32:54 +0200 |
commit | c2547ba039096d2f8e07a2fd89360956ac94014a (patch) | |
tree | 0b08421954e4a618ce5d59f08f81f27dc112579e /cli/tests/node_compat/test/parallel/test-http-content-length.js | |
parent | d22a6663fa0349acb6a68c53fdcbfac0426555d2 (diff) |
fix(node/http): correctly send `Content-length` header instead of `Transfer-Encoding: chunked` (#20127)
Fix #20063.
Diffstat (limited to 'cli/tests/node_compat/test/parallel/test-http-content-length.js')
-rw-r--r-- | cli/tests/node_compat/test/parallel/test-http-content-length.js | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/cli/tests/node_compat/test/parallel/test-http-content-length.js b/cli/tests/node_compat/test/parallel/test-http-content-length.js new file mode 100644 index 000000000..53a5896d3 --- /dev/null +++ b/cli/tests/node_compat/test/parallel/test-http-content-length.js @@ -0,0 +1,111 @@ +// deno-fmt-ignore-file +// deno-lint-ignore-file + +// Copyright Joyent and Node contributors. All rights reserved. MIT license. +// Taken from Node 18.12.1 +// This file is automatically generated by `tools/node_compat/setup.ts`. Do not modify this file manually. + +'use strict'; +require('../common'); +const assert = require('assert'); +const http = require('http'); +const Countdown = require('../common/countdown'); + +const expectedHeadersMultipleWrites = { + 'connection': 'close', + 'transfer-encoding': 'chunked', +}; + +const expectedHeadersEndWithData = { + 'connection': 'close', + 'content-length': String('hello world'.length) +}; + +const expectedHeadersEndNoData = { + 'connection': 'close', + 'content-length': '0', +}; + +let error; +const countdown = new Countdown(3, () => server.close()); + +const server = http.createServer(function(req, res) { + res.removeHeader('Date'); + + try { + switch (req.url.substr(1)) { + case 'multiple-writes': + // assert.deepStrictEqual(req.headers, expectedHeadersMultipleWrites); + assert.equal(req.headers['transfer-encoding'], expectedHeadersMultipleWrites['transfer-encoding']); + assert.equal(req.headers['content-length'], expectedHeadersMultipleWrites['content-length']); + res.write('hello'); + res.end('world'); + break; + case 'end-with-data': + // assert.deepStrictEqual(req.headers, expectedHeadersEndWithData); + assert.equal(req.headers['transfer-encoding'], expectedHeadersEndWithData['transfer-encoding']); + assert.equal(req.headers['content-length'], expectedHeadersEndWithData['content-length']); + res.end('hello world'); + break; + case 'empty': + // assert.deepStrictEqual(req.headers, expectedHeadersEndNoData); + assert.equal(req.headers['transfer-encoding'], expectedHeadersEndNoData['transfer-encoding']); + assert.equal(req.headers['content-length'], expectedHeadersEndNoData['content-length']); + res.end(); + break; + default: + throw new Error('Unreachable'); + } + countdown.dec(); + } + catch (e) { + error = e; + server.close(); + } +}); + +server.on('close', () => { + if (error) throw error +}) + +server.listen(0, function() { + let req; + + req = http.request({ + port: this.address().port, + method: 'POST', + path: '/multiple-writes' + }); + req.removeHeader('Date'); + req.removeHeader('Host'); + req.write('hello '); + req.end('world'); + req.on('response', function(res) { + // assert.deepStrictEqual(res.headers, expectedHeadersMultipleWrites); + }); + + req = http.request({ + port: this.address().port, + method: 'POST', + path: '/end-with-data' + }); + req.removeHeader('Date'); + req.removeHeader('Host'); + req.end('hello world'); + req.on('response', function(res) { + // assert.deepStrictEqual(res.headers, expectedHeadersEndWithData); + }); + + req = http.request({ + port: this.address().port, + method: 'POST', + path: '/empty' + }); + req.removeHeader('Date'); + req.removeHeader('Host'); + req.end(); + req.on('response', function(res) { + // assert.deepStrictEqual(res.headers, expectedHeadersEndNoData); + }); + +}); |