mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Port availability might be tricky if some port is already in use on the 'all' interface '0.0.0.0'. The proposed solution is to let the OS allocate the port for us using 0 as port specifier : - first create a server instance to allocate a port number - save port number - close the server - return the port number to the caller This should be safe granted the OS doesn't reuse the port numbers on consecutive port allocations. see : - about Node.js Net module : https://nodejs.org/docs/latest-v12.x/api/net.html#net_server_listen_port_host_backlog_callback - about safety around reusing port number : https://unix.stackexchange.com/a/132524 Signed-off-by: Alexis Deruelle <alexis.deruelle@gmail.com>
33 lines
718 B
TypeScript
33 lines
718 B
TypeScript
import { EventEmitter } from 'events'
|
|
|
|
class MockServer extends EventEmitter {
|
|
listen = jest.fn((obj) => {
|
|
this.emit('listening', {})
|
|
return this
|
|
})
|
|
address = () => { return { port: 12345 }}
|
|
unref = jest.fn()
|
|
close = jest.fn((cb) => {
|
|
cb()
|
|
})
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
const net = require("net")
|
|
jest.mock("net")
|
|
|
|
import * as port from "../../../src/main/port"
|
|
|
|
describe("getFreePort", () => {
|
|
beforeEach(() => {
|
|
net.createServer.mockReturnValue(new MockServer)
|
|
})
|
|
|
|
afterEach(() => {
|
|
jest.clearAllMocks()
|
|
})
|
|
|
|
it("finds the next free port", async () => {
|
|
return expect(port.getFreePort()).resolves.toEqual(expect.any(Number))
|
|
})
|
|
})
|