From 1cd35a6746fbff9d180be599dbe9ffb8a1019050 Mon Sep 17 00:00:00 2001 From: Michael Herzner Date: Mon, 13 May 2024 00:17:22 +0200 Subject: [PATCH] test(net): improve test coverage (#4709) Co-authored-by: Asher Gomez --- net/get_available_port_test.ts | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/net/get_available_port_test.ts b/net/get_available_port_test.ts index bbb1eca1e..d61c4c656 100644 --- a/net/get_available_port_test.ts +++ b/net/get_available_port_test.ts @@ -1,7 +1,8 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. import { getAvailablePort } from "./get_available_port.ts"; -import { assertEquals } from "@std/assert"; +import { assertEquals, assertNotEquals, assertThrows } from "@std/assert"; +import { stub } from "@std/testing/mock"; /** Helper function to see if a port is indeed available for listening (race-y) */ async function testWithPort(port: number) { @@ -20,10 +21,34 @@ async function testWithPort(port: number) { Deno.test("getAvailablePort() gets an available port", async () => { const port = getAvailablePort(); + assertEquals(typeof port, "number"); await testWithPort(port); }); Deno.test("getAvailablePort() gets an available port with a preferred port", async () => { - const port = getAvailablePort({ preferredPort: 9563 }); + const preferredPort = 9563; + const port = getAvailablePort({ preferredPort }); + assertEquals(port, preferredPort); await testWithPort(port); }); + +Deno.test("getAvailablePort() falls back to another port if preferred port is in use", async () => { + const preferredPort = 9563; + const server = Deno.serve( + { port: preferredPort, onListen: () => {} }, + () => new Response("hello"), + ); + const port = getAvailablePort({ preferredPort }); + assertEquals(typeof port, "number"); + assertNotEquals(port, preferredPort); + server.shutdown(); + await server.finished; +}); + +Deno.test("getAvailablePort() throws if error is not AddrInUse", () => { + using _ = stub(Deno, "listen", () => { + throw new Error(); + }); + const preferredPort = 9563; + assertThrows(() => getAvailablePort({ preferredPort }), Error); +});