diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2021-05-19 13:39:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-19 21:39:52 +0900 |
commit | b43b639f450ad31fdf3c054b6d4718d4ba29a6a7 (patch) | |
tree | a5a0b343e16e46dfcd8a1e91937a5fcdd1ef3e02 /cli/tests/unit/http_test.ts | |
parent | 1cb5ec3c5ee92dab2d894b3c210ad4f3509cca51 (diff) |
fix(runtime/http): expose nextRequest() errors in respondWith() (#10384)
Diffstat (limited to 'cli/tests/unit/http_test.ts')
-rw-r--r-- | cli/tests/unit/http_test.ts | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/cli/tests/unit/http_test.ts b/cli/tests/unit/http_test.ts index ab43323bd..d4c35545f 100644 --- a/cli/tests/unit/http_test.ts +++ b/cli/tests/unit/http_test.ts @@ -272,3 +272,48 @@ unitTest( await promise; }, ); + +unitTest( + { perms: { net: true } }, + async function httpServerNextRequestErrorExposedInResponse() { + const promise = (async () => { + const listener = Deno.listen({ port: 4501 }); + const conn = await listener.accept(); + const httpConn = Deno.serveHttp(conn); + const event = await httpConn.nextRequest(); + assert(event); + // Start polling for the next request before awaiting response. + const nextRequestPromise = httpConn.nextRequest(); + const { respondWith } = event; + await assertThrowsAsync( + async () => { + let interval = 0; + await respondWith( + new Response( + new ReadableStream({ + start(controller) { + interval = setInterval(() => { + const message = `data: ${Date.now()}\n\n`; + controller.enqueue(new TextEncoder().encode(message)); + }, 200); + }, + cancel() { + clearInterval(interval); + }, + }), + ), + ); + }, + Deno.errors.Http, + "connection closed", + ); + // The error from `op_http_request_next` reroutes to `respondWith()`. + assertEquals(await nextRequestPromise, null); + listener.close(); + })(); + + const resp = await fetch("http://127.0.0.1:4501/"); + await resp.body!.cancel(); + await promise; + }, +); |