summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2023-05-29 01:29:01 +0200
committerGitHub <noreply@github.com>2023-05-29 01:29:01 +0200
commitcf8b7bb53061ded139626378cf73c7b05f747eb9 (patch)
treed9a77a543cd6d5b808b91bda4295682bf4eaed3a
parent429da4ee2d3cfd5dd0cf24d5f7953cc21bc878b4 (diff)
fix(node): http.IncomingMessageForClient.complete (#19302)
Closes https://github.com/denoland/deno/issues/19238
-rw-r--r--cli/tests/unit_node/http_test.ts7
-rw-r--r--ext/node/polyfills/http.ts1
2 files changed, 8 insertions, 0 deletions
diff --git a/cli/tests/unit_node/http_test.ts b/cli/tests/unit_node/http_test.ts
index 55160855e..5eb8c15bd 100644
--- a/cli/tests/unit_node/http_test.ts
+++ b/cli/tests/unit_node/http_test.ts
@@ -190,15 +190,21 @@ Deno.test("[node/http] request default protocol", async () => {
const server = http.createServer((_, res) => {
res.end("ok");
});
+
+ // @ts-ignore IncomingMessageForClient
+ // deno-lint-ignore no-explicit-any
+ let clientRes: any;
server.listen(() => {
const req = http.request(
// deno-lint-ignore no-explicit-any
{ host: "localhost", port: (server.address() as any).port },
(res) => {
+ assertEquals(res.complete, false);
res.on("data", () => {});
res.on("end", () => {
server.close();
});
+ clientRes = res;
assertEquals(res.statusCode, 200);
promise2.resolve();
},
@@ -210,6 +216,7 @@ Deno.test("[node/http] request default protocol", async () => {
});
await promise;
await promise2;
+ assertEquals(clientRes!.complete, true);
});
Deno.test("[node/http] request with headers", async () => {
diff --git a/ext/node/polyfills/http.ts b/ext/node/polyfills/http.ts
index 4e72b80f8..71186e4e7 100644
--- a/ext/node/polyfills/http.ts
+++ b/ext/node/polyfills/http.ts
@@ -970,6 +970,7 @@ export class IncomingMessageForClient extends NodeReadable {
// any messages, before ever calling this. In that case, just skip
// it, since something else is destroying this connection anyway.
_destroy(err, cb) {
+ this.complete = true;
if (!this.readableEnded || !this.complete) {
this.aborted = true;
this.emit("aborted");