From 39f7eb2cd21d6e3a5642eca877d5f4fc6d28f840 Mon Sep 17 00:00:00 2001 From: pooya parsa Date: Mon, 28 Feb 2022 22:41:44 +0100 Subject: [PATCH] fix(test-utils): improve random port allocation (#3398) --- packages/test-utils/package.json | 2 +- packages/test-utils/src/server.ts | 32 +++---------------------------- packages/vite/package.json | 2 +- yarn.lock | 15 ++++++++++++--- 4 files changed, 17 insertions(+), 34 deletions(-) diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 7368c035ec..763541fe5f 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -17,7 +17,7 @@ "@nuxt/schema": "3.0.0", "defu": "^5.0.1", "execa": "^6.1.0", - "get-port-please": "^2.4.2", + "get-port-please": "^2.4.3", "jiti": "^1.13.0", "ohmyfetch": "^0.4.15" }, diff --git a/packages/test-utils/src/server.ts b/packages/test-utils/src/server.ts index 6520947860..372f9a23b7 100644 --- a/packages/test-utils/src/server.ts +++ b/packages/test-utils/src/server.ts @@ -1,28 +1,12 @@ import { resolve } from 'path' -import { createServer, AddressInfo } from 'net' import { execa } from 'execa' -import { getPort } from 'get-port-please' +import { getRandomPort, waitForPort } from 'get-port-please' import { fetch as _fetch, $fetch as _$fetch, FetchOptions } from 'ohmyfetch' import { useTestContext } from './context' -// TODO: use the export from `get-port-please` -function checkPort (port: number, host: string): Promise { - return new Promise((resolve) => { - const server = createServer() - server.unref() - server.on('error', () => { resolve(false) }) - server.listen(port, host, () => { - const { port } = server.address() as AddressInfo - server.close(() => { resolve(port) }) - }) - }) -} - export async function listen () { const ctx = useTestContext() - const host = process.env.HOST || '0.0.0.0' - const port = await getPort({ host, random: true }) - + const port = await getRandomPort() ctx.url = 'http://localhost:' + port ctx.serverProcess = execa('node', [ // @ts-ignore @@ -33,17 +17,7 @@ export async function listen () { NODE_ENV: 'test' } }) - - const TRIES = 50 - const DELAY = 100 - - for (let i = TRIES; i; i--) { - await new Promise(resolve => setTimeout(resolve, DELAY)) - // wait until port is in used - if (await checkPort(port, host) === false) { - return - } - } + await waitForPort(port, { retries: 8 }) } export function fetch (path: string, options?: any) { diff --git a/packages/vite/package.json b/packages/vite/package.json index bb1a2c07f7..b18f1b8a81 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -31,7 +31,7 @@ "escape-string-regexp": "^5.0.0", "externality": "^0.1.6", "fs-extra": "^10.0.1", - "get-port-please": "^2.4.2", + "get-port-please": "^2.4.3", "knitwork": "^0.1.0", "magic-string": "^0.25.7", "mlly": "^0.4.3", diff --git a/yarn.lock b/yarn.lock index 6093c47451..f528b165dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3253,7 +3253,7 @@ __metadata: "@nuxt/schema": 3.0.0 defu: ^5.0.1 execa: ^6.1.0 - get-port-please: ^2.4.2 + get-port-please: ^2.4.3 jiti: ^1.13.0 ohmyfetch: ^0.4.15 playwright: ^1.19.2 @@ -3369,7 +3369,7 @@ __metadata: escape-string-regexp: ^5.0.0 externality: ^0.1.6 fs-extra: ^10.0.1 - get-port-please: ^2.4.2 + get-port-please: ^2.4.3 knitwork: ^0.1.0 magic-string: ^0.25.7 magic-string-extra: ^0.1.2 @@ -11370,7 +11370,7 @@ __metadata: languageName: node linkType: hard -"get-port-please@npm:^2.1.0, get-port-please@npm:^2.2.0, get-port-please@npm:^2.4.2": +"get-port-please@npm:^2.1.0, get-port-please@npm:^2.2.0": version: 2.4.2 resolution: "get-port-please@npm:2.4.2" dependencies: @@ -11379,6 +11379,15 @@ __metadata: languageName: node linkType: hard +"get-port-please@npm:^2.4.3": + version: 2.4.3 + resolution: "get-port-please@npm:2.4.3" + dependencies: + fs-memo: ^1.2.0 + checksum: ad29938ddafab5dc9d100e9c7dc9348bc81dd5c8f0dc9e1c45c41abd452654c9fb69cc6ff77f9f31e448567216479770cedfa96e17f54796222bc17145d2f228 + languageName: node + linkType: hard + "get-port@npm:^5.1.1": version: 5.1.1 resolution: "get-port@npm:5.1.1"