From aa7f02946de5c92339eea6fe8b6849537077b8d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 22 Mar 2023 13:30:54 +0100 Subject: [PATCH] test: mark two unit tests as flaky (#18344) Temporarily marking two "fetch" tests as flaky, since they've been failing on CI for the past 24h. --- cli/tests/unit/fetch_test.ts | 71 ++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 24 deletions(-) diff --git a/cli/tests/unit/fetch_test.ts b/cli/tests/unit/fetch_test.ts index 9adafe203a..59489a726d 100644 --- a/cli/tests/unit/fetch_test.ts +++ b/cli/tests/unit/fetch_test.ts @@ -54,9 +54,30 @@ function findClosedPortInRange( ); } +function flakyTest( + fn: (t: Deno.TestContext) => Promise, +) { + async function wrapperFn(t: Deno.TestContext) { + let lastError; + + for (let i = 0; i < 3; i++) { + try { + await fn(t); + return; + } catch (e) { + lastError = e; + } + } + + throw lastError; + } + Object.defineProperty(wrapperFn, "name", { value: fn.name }); + return wrapperFn; +} + Deno.test( { permissions: { net: true } }, - async function fetchConnectionError() { + flakyTest(async function fetchConnectionError() { const port = findClosedPortInRange(4000, 9999); await assertRejects( async () => { @@ -65,7 +86,7 @@ Deno.test( TypeError, "error trying to connect", ); - }, + }), ); Deno.test( @@ -1676,32 +1697,34 @@ function invalidServer(addr: string, body: Uint8Array): Deno.Listener { Deno.test( { permissions: { net: true } }, - async function fetchWithInvalidContentLengthAndTransferEncoding(): Promise< - void - > { - const addr = "127.0.0.1:4516"; - const data = "a".repeat(10 << 10); + flakyTest( + async function fetchWithInvalidContentLengthAndTransferEncoding(): Promise< + void + > { + const addr = "127.0.0.1:4516"; + const data = "a".repeat(10 << 10); - const body = new TextEncoder().encode( - `HTTP/1.1 200 OK\r\nContent-Length: ${ - Math.round(data.length * 2) - }\r\nTransfer-Encoding: chunked\r\n\r\n${ - data.length.toString(16) - }\r\n${data}\r\n0\r\n\r\n`, - ); + const body = new TextEncoder().encode( + `HTTP/1.1 200 OK\r\nContent-Length: ${ + Math.round(data.length * 2) + }\r\nTransfer-Encoding: chunked\r\n\r\n${ + data.length.toString(16) + }\r\n${data}\r\n0\r\n\r\n`, + ); - // if transfer-encoding is sent, content-length is ignored - // even if it has an invalid value (content-length > totalLength) - const listener = invalidServer(addr, body); - const response = await fetch(`http://${addr}/`); + // if transfer-encoding is sent, content-length is ignored + // even if it has an invalid value (content-length > totalLength) + const listener = invalidServer(addr, body); + const response = await fetch(`http://${addr}/`); - const res = await response.arrayBuffer(); - const buf = new TextEncoder().encode(data); - assertEquals(res.byteLength, buf.byteLength); - assertEquals(new Uint8Array(res), buf); + const res = await response.arrayBuffer(); + const buf = new TextEncoder().encode(data); + assertEquals(res.byteLength, buf.byteLength); + assertEquals(new Uint8Array(res), buf); - listener.close(); - }, + listener.close(); + }, + ), ); Deno.test(