diff options
author | Yusuke Tanaka <yusuktan@maguro.dev> | 2024-08-09 00:47:15 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-08 08:47:15 -0700 |
commit | e36b1a3aa88b31435b18a33448fc75eeb6dc8017 (patch) | |
tree | bc29141f8d59c74db46fee49426a9bc1a77c1d10 /tests/unit/fetch_test.ts | |
parent | 18b9b43c3631053e2c8b4c293b9e1f44dee7bfa8 (diff) |
fix(ext/fetch): include TCP src/dst socket info in error messages (#24939)
This commit makes `fetch` error messages include source and destination TCP
socket info i.e. port number and IP address for better debuggability.
Closes #24922
Diffstat (limited to 'tests/unit/fetch_test.ts')
-rw-r--r-- | tests/unit/fetch_test.ts | 59 |
1 files changed, 50 insertions, 9 deletions
diff --git a/tests/unit/fetch_test.ts b/tests/unit/fetch_test.ts index 5ebc0c86f..9b2463bcc 100644 --- a/tests/unit/fetch_test.ts +++ b/tests/unit/fetch_test.ts @@ -3,6 +3,7 @@ import { assert, assertEquals, assertRejects, + assertStringIncludes, assertThrows, delay, fail, @@ -1977,14 +1978,24 @@ Deno.test( }); const url = `http://localhost:${listenPort}/`; - const err = await assertRejects( - () => - fetch(url, { - body: stream, - method: "POST", - }), - TypeError, - `error sending request for url (${url}): client error (SendRequest): error from user's Body stream`, + const err = await assertRejects(() => + fetch(url, { + body: stream, + method: "POST", + }) + ); + + assert(err instanceof TypeError, `err was ${err}`); + + assertStringIncludes( + err.message, + "error sending request from 127.0.0.1:", + `err.message was ${err.message}`, + ); + assertStringIncludes( + err.message, + ` for http://localhost:${listenPort}/ (127.0.0.1:${listenPort}): client error (SendRequest): error from user's Body stream`, + `err.message was ${err.message}`, ); assert(err.cause, `err.cause was null ${err}`); @@ -2066,7 +2077,7 @@ Deno.test("URL authority is used as 'Authorization' header", async () => { Deno.test( { permissions: { net: true } }, - async function errorMessageIncludesUrlAndDetails() { + async function errorMessageIncludesUrlAndDetailsWithNoTcpInfo() { await assertRejects( () => fetch("http://example.invalid"), TypeError, @@ -2074,3 +2085,33 @@ Deno.test( ); }, ); + +Deno.test( + { permissions: { net: true } }, + async function errorMessageIncludesUrlAndDetailsWithTcpInfo() { + const listener = Deno.listen({ port: listenPort }); + const server = (async () => { + const conn = await listener.accept(); + listener.close(); + // Immediately close the connection to simulate a connection error + conn.close(); + })(); + + const url = `http://localhost:${listenPort}`; + const err = await assertRejects(() => fetch(url)); + + assert(err instanceof TypeError, `${err}`); + assertStringIncludes( + err.message, + "error sending request from 127.0.0.1:", + `${err.message}`, + ); + assertStringIncludes( + err.message, + ` for http://localhost:${listenPort}/ (127.0.0.1:${listenPort}): client error (SendRequest): `, + `${err.message}`, + ); + + await server; + }, +); |