1
0
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:
Roman 2020-07-12 10:37:10 +03:00
parent 62eb0fa592
commit 40da87c0ef
3 changed files with 23 additions and 30 deletions

View File

@ -50,7 +50,6 @@ async function main() {
try { try {
proxyPort = await getFreePort() proxyPort = await getFreePort()
} catch (error) { } catch (error) {
logger.error(error)
await dialog.showErrorBox("Lens Error", "Could not find a free port for the cluster proxy") await dialog.showErrorBox("Lens Error", "Could not find a free port for the cluster proxy")
app.quit(); app.quit();
} }

View File

@ -1,31 +1,20 @@
import net, { AddressInfo } from "net"
import logger from "./logger" 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 = () => { export async function getFreePort(): Promise<number> {
logger.debug("getNextAvailablePort() start") logger.debug("Lookup new free port..");
const server = createServer() return new Promise((resolve, reject) => {
server.unref() const server = net.createServer().unref().listen({ port: 0 });
return new Promise<number>((resolve, reject) => server.on("listening", () => {
server const port = (server.address() as AddressInfo).port
.on('error', (error: any) => reject(error)) server.close(() => resolve(port));
.on('listening', () => { logger.debug(`New port found: ${port}`);
logger.debug("*** server listening event ***") });
const _port = (server.address() as AddressInfo).port server.on("error", error => {
server.close(() => resolve(_port)) logger.error(`Can't resolve new port: "${error}"`);
}) reject(error);
.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
} }

View File

@ -1,6 +1,8 @@
import { EventEmitter } from 'events' import { EventEmitter } from 'events'
import { getFreePort } from "./port" import { getFreePort } from "./port"
let newPort = 0;
jest.mock("net", () => { jest.mock("net", () => {
return { return {
createServer() { createServer() {
@ -10,7 +12,10 @@ jest.mock("net", () => {
return this return this
}) })
address = () => { address = () => {
return { port: 12345 } newPort = Math.round(Math.random() * 10000)
return {
port: newPort
}
} }
unref = jest.fn() unref = jest.fn()
close = jest.fn(cb => cb()) close = jest.fn(cb => cb())
@ -21,6 +26,6 @@ jest.mock("net", () => {
describe("getFreePort", () => { describe("getFreePort", () => {
it("finds the next free port", async () => { it("finds the next free port", async () => {
return expect(getFreePort()).resolves.toEqual(expect.any(Number)) return expect(getFreePort()).resolves.toEqual(newPort);
}) })
}) })