summaryrefslogtreecommitdiff
path: root/cli/tests/node_compat/test/parallel/test-http-content-length.js
diff options
context:
space:
mode:
authorosddeitf <37999210+osddeitf@users.noreply.github.com>2023-08-28 14:32:54 +0700
committerGitHub <noreply@github.com>2023-08-28 09:32:54 +0200
commitc2547ba039096d2f8e07a2fd89360956ac94014a (patch)
tree0b08421954e4a618ce5d59f08f81f27dc112579e /cli/tests/node_compat/test/parallel/test-http-content-length.js
parentd22a6663fa0349acb6a68c53fdcbfac0426555d2 (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.js111
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);
+ });
+
+});