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 {
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();
}

View File

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

View File

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