diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2023-05-29 01:29:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-29 01:29:01 +0200 |
commit | cf8b7bb53061ded139626378cf73c7b05f747eb9 (patch) | |
tree | d9a77a543cd6d5b808b91bda4295682bf4eaed3a | |
parent | 429da4ee2d3cfd5dd0cf24d5f7953cc21bc878b4 (diff) |
fix(node): http.IncomingMessageForClient.complete (#19302)
Closes https://github.com/denoland/deno/issues/19238
-rw-r--r-- | cli/tests/unit_node/http_test.ts | 7 | ||||
-rw-r--r-- | ext/node/polyfills/http.ts | 1 |
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"); |