From 915b724e6576f99479242c740858aabf4ae2e68b Mon Sep 17 00:00:00 2001 From: KuthorX Date: Fri, 29 May 2020 13:18:20 +0800 Subject: [PATCH 1/6] http: do not override user-provided options object --- test/parallel/test-http-client-input-function.js | 14 ++++++++++++++ .../test-http-client-insecure-http-parser-error.js | 13 +++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 test/parallel/test-http-client-input-function.js create mode 100644 test/parallel/test-http-client-insecure-http-parser-error.js diff --git a/test/parallel/test-http-client-input-function.js b/test/parallel/test-http-client-input-function.js new file mode 100644 index 00000000000000..00e3e1f4940dae --- /dev/null +++ b/test/parallel/test-http-client-input-function.js @@ -0,0 +1,14 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const ClientRequest = require('http').ClientRequest; + +{ + const req = new ClientRequest(() => {}); + req.on('error', common.mustCall((err) => { + assert.strictEqual(err.code, 'ECONNREFUSED'); + })) + assert.strictEqual(req.path, '/'); + assert.strictEqual(req.method, 'GET'); +} diff --git a/test/parallel/test-http-client-insecure-http-parser-error.js b/test/parallel/test-http-client-insecure-http-parser-error.js new file mode 100644 index 00000000000000..d68987af7456d6 --- /dev/null +++ b/test/parallel/test-http-client-insecure-http-parser-error.js @@ -0,0 +1,13 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const ClientRequest = require('http').ClientRequest; + +{ + assert.throws(() => { + new ClientRequest({insecureHTTPParser: 'wrongValue'}); + }, { + code: /ERR_INVALID_ARG_TYPE/ + }, 'http request should throw when passing not-boolean value as insecureHTTPParser'); +} From 2b0301fbeb5eaa382d1ceb4eb1d884ed9ccad864 Mon Sep 17 00:00:00 2001 From: KuthorX Date: Fri, 29 May 2020 13:40:17 +0800 Subject: [PATCH 2/6] fix code style by lint-js --- test/parallel/test-http-client-input-function.js | 2 +- .../parallel/test-http-client-insecure-http-parser-error.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-http-client-input-function.js b/test/parallel/test-http-client-input-function.js index 00e3e1f4940dae..9fd73073fa4baf 100644 --- a/test/parallel/test-http-client-input-function.js +++ b/test/parallel/test-http-client-input-function.js @@ -8,7 +8,7 @@ const ClientRequest = require('http').ClientRequest; const req = new ClientRequest(() => {}); req.on('error', common.mustCall((err) => { assert.strictEqual(err.code, 'ECONNREFUSED'); - })) + })); assert.strictEqual(req.path, '/'); assert.strictEqual(req.method, 'GET'); } diff --git a/test/parallel/test-http-client-insecure-http-parser-error.js b/test/parallel/test-http-client-insecure-http-parser-error.js index d68987af7456d6..488b34eacbea26 100644 --- a/test/parallel/test-http-client-insecure-http-parser-error.js +++ b/test/parallel/test-http-client-insecure-http-parser-error.js @@ -1,13 +1,13 @@ 'use strict'; -const common = require('../common'); +require('../common'); const assert = require('assert'); const ClientRequest = require('http').ClientRequest; { assert.throws(() => { - new ClientRequest({insecureHTTPParser: 'wrongValue'}); + new ClientRequest({ insecureHTTPParser: 'wrongValue' }); }, { code: /ERR_INVALID_ARG_TYPE/ - }, 'http request should throw when passing not-boolean value as insecureHTTPParser'); + }, 'http request should throw when passing invalid insecureHTTPParser'); } From 37d005aa5321fa0572491a51a980c1a3bab9e521 Mon Sep 17 00:00:00 2001 From: KuthorX Date: Sat, 30 May 2020 15:02:47 +0800 Subject: [PATCH 3/6] modify error code&msg, make client cb be called --- .../test-http-client-input-function.js | 24 +++++++++++++++---- ...-http-client-insecure-http-parser-error.js | 3 ++- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-http-client-input-function.js b/test/parallel/test-http-client-input-function.js index 9fd73073fa4baf..be65967cc65c82 100644 --- a/test/parallel/test-http-client-input-function.js +++ b/test/parallel/test-http-client-input-function.js @@ -1,14 +1,28 @@ 'use strict'; const common = require('../common'); +const http = require('http'); const assert = require('assert'); const ClientRequest = require('http').ClientRequest; { - const req = new ClientRequest(() => {}); - req.on('error', common.mustCall((err) => { - assert.strictEqual(err.code, 'ECONNREFUSED'); + const server = http.createServer(common.mustCall((req, res) => { + res.writeHead(200); + res.end('hello world'); + })).listen(80, '127.0.0.1'); + + const req = new ClientRequest(common.mustCall((response) => { + let body = ''; + response.setEncoding('utf8'); + response.on('data', (chunk) => { + body += chunk; + }); + + response.on('end', common.mustCall(() => { + assert.strictEqual(body, 'hello world'); + server.close(); + })); })); - assert.strictEqual(req.path, '/'); - assert.strictEqual(req.method, 'GET'); + + req.end(); } diff --git a/test/parallel/test-http-client-insecure-http-parser-error.js b/test/parallel/test-http-client-insecure-http-parser-error.js index 488b34eacbea26..d483d817f0ce79 100644 --- a/test/parallel/test-http-client-insecure-http-parser-error.js +++ b/test/parallel/test-http-client-insecure-http-parser-error.js @@ -8,6 +8,7 @@ const ClientRequest = require('http').ClientRequest; assert.throws(() => { new ClientRequest({ insecureHTTPParser: 'wrongValue' }); }, { - code: /ERR_INVALID_ARG_TYPE/ + code: 'ERR_INVALID_ARG_TYPE', + message: /insecureHTTPParser/ }, 'http request should throw when passing invalid insecureHTTPParser'); } From 289444ecc272baa6b435d75b53aa477a7c9f1606 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Tue, 19 Sep 2023 16:33:16 +0200 Subject: [PATCH 4/6] fix test --- lib/_http_client.js | 15 ++++++--------- test/parallel/test-http-client-input-function.js | 3 +-- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/lib/_http_client.js b/lib/_http_client.js index 9fd07e1676b8ff..6045c7aff8dc4c 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -186,9 +186,11 @@ function ClientRequest(input, options, cb) { const defaultPort = options.defaultPort || (this.agent && this.agent.defaultPort); - const port = options.port = options.port || defaultPort || 80; - const host = options.host = validateHost(options.hostname, 'hostname') || - validateHost(options.host, 'host') || 'localhost'; + const optsWithoutSignal = { __proto__: null, ...options }; + + const port = optsWithoutSignal.port = options.port || defaultPort || 80; + const host = optsWithoutSignal.host = validateHost(options.hostname, 'hostname') || + validateHost(options.host, 'host') || 'localhost'; const setHost = (options.setHost === undefined || Boolean(options.setHost)); @@ -200,6 +202,7 @@ function ClientRequest(input, options, cb) { const signal = options.signal; if (signal) { addAbortSignal(signal, this); + delete optsWithoutSignal.signal; } let method = options.method; const methodIsString = (typeof method === 'string'); @@ -326,12 +329,6 @@ function ClientRequest(input, options, cb) { this[kUniqueHeaders] = parseUniqueHeadersOption(options.uniqueHeaders); - let optsWithoutSignal = options; - if (optsWithoutSignal.signal) { - optsWithoutSignal = ObjectAssign({}, options); - delete optsWithoutSignal.signal; - } - // initiate connection if (this.agent) { this.agent.addRequest(this, optsWithoutSignal); diff --git a/test/parallel/test-http-client-input-function.js b/test/parallel/test-http-client-input-function.js index be65967cc65c82..eda5ef51785d0b 100644 --- a/test/parallel/test-http-client-input-function.js +++ b/test/parallel/test-http-client-input-function.js @@ -3,7 +3,6 @@ const common = require('../common'); const http = require('http'); const assert = require('assert'); -const ClientRequest = require('http').ClientRequest; { const server = http.createServer(common.mustCall((req, res) => { @@ -11,7 +10,7 @@ const ClientRequest = require('http').ClientRequest; res.end('hello world'); })).listen(80, '127.0.0.1'); - const req = new ClientRequest(common.mustCall((response) => { + const req = new http.ClientRequest(common.mustCall((response) => { let body = ''; response.setEncoding('utf8'); response.on('data', (chunk) => { From 9eed9e16c50c44671a6c7246ffd10fb0b465213a Mon Sep 17 00:00:00 2001 From: kuthorx Date: Tue, 10 Oct 2023 01:52:14 +0800 Subject: [PATCH 5/6] fix ci error, use different port --- test/parallel/test-http-client-input-function.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-http-client-input-function.js b/test/parallel/test-http-client-input-function.js index eda5ef51785d0b..338c10a0aa10fc 100644 --- a/test/parallel/test-http-client-input-function.js +++ b/test/parallel/test-http-client-input-function.js @@ -8,9 +8,9 @@ const assert = require('assert'); const server = http.createServer(common.mustCall((req, res) => { res.writeHead(200); res.end('hello world'); - })).listen(80, '127.0.0.1'); + })).listen(8080, '127.0.0.1'); - const req = new http.ClientRequest(common.mustCall((response) => { + const req = new http.ClientRequest('http://127.0.0.1:8080', common.mustCall((response) => { let body = ''; response.setEncoding('utf8'); response.on('data', (chunk) => { From 33e6591df08ff742a3dc9c5760dd8d6b867d3282 Mon Sep 17 00:00:00 2001 From: KuthorX Date: Tue, 10 Oct 2023 17:30:09 +0800 Subject: [PATCH 6/6] listen dynamic port --- .../test-http-client-input-function.js | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/test/parallel/test-http-client-input-function.js b/test/parallel/test-http-client-input-function.js index 338c10a0aa10fc..3a2f93aa0efdae 100644 --- a/test/parallel/test-http-client-input-function.js +++ b/test/parallel/test-http-client-input-function.js @@ -8,20 +8,22 @@ const assert = require('assert'); const server = http.createServer(common.mustCall((req, res) => { res.writeHead(200); res.end('hello world'); - })).listen(8080, '127.0.0.1'); + })).listen(0, '127.0.0.1'); - const req = new http.ClientRequest('http://127.0.0.1:8080', common.mustCall((response) => { - let body = ''; - response.setEncoding('utf8'); - response.on('data', (chunk) => { - body += chunk; - }); + server.on('listening', common.mustCall(() => { + const req = new http.ClientRequest(server.address(), common.mustCall((response) => { + let body = ''; + response.setEncoding('utf8'); + response.on('data', (chunk) => { + body += chunk; + }); - response.on('end', common.mustCall(() => { - assert.strictEqual(body, 'hello world'); - server.close(); + response.on('end', common.mustCall(() => { + assert.strictEqual(body, 'hello world'); + server.close(); + })); })); - })); - req.end(); + req.end(); + })); }