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 {
|
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();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user