From 365e1f48f7059f94d4eeb8f5ba8b3949b686b355 Mon Sep 17 00:00:00 2001 From: Matt Mastracci Date: Fri, 19 Apr 2024 18:09:50 -0600 Subject: feat(ext/http): Add `addr` to HttpServer (#23442) Adds an `addr` field to `HttpServer` to simplify the pattern `Deno.serve({ onListen({ port } => listenPort = port })`. This becomes: `const server = Deno.serve({}); port = server.addr.port`. Changes: - Refactors `serve` overloads to split TLS out (in preparation for landing a place for the TLS SNI information) - Adds an `addr` field to `HttpServer` that matches the `addr` field of the corresponding `Deno.Listener`s. --- tests/unit/serve_test.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'tests') diff --git a/tests/unit/serve_test.ts b/tests/unit/serve_test.ts index 9b2870ebd..048529ae9 100644 --- a/tests/unit/serve_test.ts +++ b/tests/unit/serve_test.ts @@ -43,7 +43,10 @@ function onListen( } async function makeServer( - handler: (req: Request) => Response | Promise, + handler: ( + req: Request, + info: Deno.ServeHandlerInfo, + ) => Response | Promise, ): Promise< { finished: Promise; @@ -432,7 +435,7 @@ Deno.test(async function httpServerRejectsOnAddrInUse() { Deno.test({ permissions: { net: true } }, async function httpServerBasic() { const ac = new AbortController(); const deferred = Promise.withResolvers(); - const listeningDeferred = Promise.withResolvers(); + const listeningDeferred = Promise.withResolvers(); const server = Deno.serve({ handler: async (request, { remoteAddr }) => { @@ -447,11 +450,13 @@ Deno.test({ permissions: { net: true } }, async function httpServerBasic() { }, port: servePort, signal: ac.signal, - onListen: onListen(listeningDeferred.resolve), + onListen: (addr) => listeningDeferred.resolve(addr), onError: createOnErrorCb(ac), }); - await listeningDeferred.promise; + const addr = await listeningDeferred.promise; + assertEquals(addr.hostname, server.addr.hostname); + assertEquals(addr.port, server.addr.port); const resp = await fetch(`http://127.0.0.1:${servePort}/`, { headers: { "connection": "close" }, }); @@ -472,7 +477,7 @@ Deno.test( async function httpServerOnListener() { const ac = new AbortController(); const deferred = Promise.withResolvers(); - const listeningDeferred = Promise.withResolvers(); + const listeningDeferred = Promise.withResolvers(); const listener = Deno.listen({ port: servePort }); const server = serveHttpOnListener( listener, @@ -3812,7 +3817,7 @@ Deno.test( permissions: { run: true, read: true, write: true }, }, async function httpServerUnixDomainSocket() { - const { promise, resolve } = Promise.withResolvers<{ path: string }>(); + const { promise, resolve } = Promise.withResolvers(); const ac = new AbortController(); const filePath = tmpUnixSocketPath(); const server = Deno.serve( @@ -3830,7 +3835,7 @@ Deno.test( }, ); - assertEquals(await promise, { path: filePath }); + assertEquals((await promise).path, filePath); assertEquals( "hello world!", await curlRequest(["--unix-socket", filePath, "http://localhost"]), -- cgit v1.2.3