mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
port.ts refactoring
Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
parent
62eb0fa592
commit
40da87c0ef
@ -50,7 +50,6 @@ async function main() {
|
||||
try {
|
||||
proxyPort = await getFreePort()
|
||||
} catch (error) {
|
||||
logger.error(error)
|
||||
await dialog.showErrorBox("Lens Error", "Could not find a free port for the cluster proxy")
|
||||
app.quit();
|
||||
}
|
||||
|
||||
@ -1,31 +1,20 @@
|
||||
import net, { AddressInfo } from "net"
|
||||
import logger from "./logger"
|
||||
import { createServer, AddressInfo } from "net"
|
||||
|
||||
// todo: use https://github.com/http-party/node-portfinder ?
|
||||
// todo: check https://github.com/http-party/node-portfinder ?
|
||||
|
||||
const getNextAvailablePort = () => {
|
||||
logger.debug("getNextAvailablePort() start")
|
||||
const server = createServer()
|
||||
server.unref()
|
||||
return new Promise<number>((resolve, reject) =>
|
||||
server
|
||||
.on('error', (error: any) => reject(error))
|
||||
.on('listening', () => {
|
||||
logger.debug("*** server listening event ***")
|
||||
const _port = (server.address() as AddressInfo).port
|
||||
server.close(() => resolve(_port))
|
||||
})
|
||||
.listen({host: "127.0.0.1", port: 0}))
|
||||
}
|
||||
|
||||
export const getFreePort = async () => {
|
||||
logger.debug("getFreePort() start")
|
||||
let freePort: number = null
|
||||
try {
|
||||
freePort = await getNextAvailablePort()
|
||||
logger.debug("got port : " + freePort)
|
||||
} catch(error) {
|
||||
throw("getNextAvailablePort() threw: '" + error + "'")
|
||||
}
|
||||
return freePort
|
||||
export async function getFreePort(): Promise<number> {
|
||||
logger.debug("Lookup new free port..");
|
||||
return new Promise((resolve, reject) => {
|
||||
const server = net.createServer().unref().listen({ port: 0 });
|
||||
server.on("listening", () => {
|
||||
const port = (server.address() as AddressInfo).port
|
||||
server.close(() => resolve(port));
|
||||
logger.debug(`New port found: ${port}`);
|
||||
});
|
||||
server.on("error", error => {
|
||||
logger.error(`Can't resolve new port: "${error}"`);
|
||||
reject(error);
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
import { EventEmitter } from 'events'
|
||||
import { getFreePort } from "./port"
|
||||
|
||||
let newPort = 0;
|
||||
|
||||
jest.mock("net", () => {
|
||||
return {
|
||||
createServer() {
|
||||
@ -10,7 +12,10 @@ jest.mock("net", () => {
|
||||
return this
|
||||
})
|
||||
address = () => {
|
||||
return { port: 12345 }
|
||||
newPort = Math.round(Math.random() * 10000)
|
||||
return {
|
||||
port: newPort
|
||||
}
|
||||
}
|
||||
unref = jest.fn()
|
||||
close = jest.fn(cb => cb())
|
||||
@ -21,6 +26,6 @@ jest.mock("net", () => {
|
||||
|
||||
describe("getFreePort", () => {
|
||||
it("finds the next free port", async () => {
|
||||
return expect(getFreePort()).resolves.toEqual(expect.any(Number))
|
||||
return expect(getFreePort()).resolves.toEqual(newPort);
|
||||
})
|
||||
})
|
||||
|
||||
Loading…
Reference in New Issue
Block a user