1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/spec/src/main/port_spec.ts
Alexis Deruelle 585983f6b6 Let OS allocate port number
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>
2020-05-03 23:34:39 +02:00

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))
})
})