Skip to content

Commit b194230

Browse files
committed
Respect env port when starting e2e server
1 parent 66d8384 commit b194230

File tree

1 file changed

+40
-22
lines changed

1 file changed

+40
-22
lines changed

cli/src/__tests__/e2e/test-server-utils.ts

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,31 +19,49 @@ export interface E2EServer {
1919
* Find an available port for the web server.
2020
* Uses an ephemeral OS-assigned port to avoid EADDRINUSE races between parallel tests.
2121
*/
22-
export async function findAvailableServerPort(_basePort: number = 3100): Promise<number> {
23-
return await new Promise((resolve, reject) => {
24-
const server = createServer()
25-
server.unref()
26-
27-
server.on('error', (error) => {
28-
server.close()
29-
reject(error)
30-
})
22+
export async function findAvailableServerPort(basePort: number = 3100): Promise<number> {
23+
const preferredPort = Number(
24+
process.env.NEXT_PUBLIC_WEB_PORT ||
25+
process.env.PORT ||
26+
basePort,
27+
)
3128

32-
server.listen(0, () => {
33-
const address = server.address()
34-
server.close((closeErr) => {
35-
if (closeErr) {
36-
reject(closeErr)
37-
return
38-
}
39-
if (address && typeof address === 'object') {
40-
resolve((address as AddressInfo).port)
41-
return
42-
}
43-
reject(new Error('Could not determine an available port'))
29+
const reservePort = (port: number): Promise<number> =>
30+
new Promise((resolve, reject) => {
31+
const server = createServer()
32+
server.unref()
33+
34+
server.on('error', (error) => {
35+
server.close()
36+
reject(error)
37+
})
38+
39+
server.listen(port, () => {
40+
const address = server.address()
41+
server.close((closeErr) => {
42+
if (closeErr) {
43+
reject(closeErr)
44+
return
45+
}
46+
if (address && typeof address === 'object') {
47+
resolve((address as AddressInfo).port)
48+
return
49+
}
50+
reject(new Error('Could not determine an available port'))
51+
})
4452
})
4553
})
46-
})
54+
55+
// Try the env-configured port first; fall back to an ephemeral port.
56+
if (!Number.isNaN(preferredPort)) {
57+
try {
58+
return await reservePort(preferredPort)
59+
} catch {
60+
// Fall through to ephemeral assignment
61+
}
62+
}
63+
64+
return await reservePort(0)
4765
}
4866

4967
/**

0 commit comments

Comments
 (0)