summaryrefslogtreecommitdiff
path: root/tests/unit/fetch_test.ts
diff options
context:
space:
mode:
authorYusuke Tanaka <yusuktan@maguro.dev>2024-08-09 00:47:15 +0900
committerGitHub <noreply@github.com>2024-08-08 08:47:15 -0700
commite36b1a3aa88b31435b18a33448fc75eeb6dc8017 (patch)
treebc29141f8d59c74db46fee49426a9bc1a77c1d10 /tests/unit/fetch_test.ts
parent18b9b43c3631053e2c8b4c293b9e1f44dee7bfa8 (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.ts59
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;
+ },
+);