From 559203d8373e937c8dd3c18815eac13a47c1c1c1 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Mon, 14 Mar 2022 15:45:13 +0200 Subject: [PATCH] refactor Signed-off-by: Jari Kolehmainen --- src/common/__tests__/cluster-store.test.ts | 4 +++ src/common/__tests__/hotbar-store.test.ts | 2 ++ src/common/__tests__/user-store.test.ts | 2 ++ src/common/fs/write-file.injectable.ts | 25 +++++++++++++++++++ src/main/__test__/cluster.test.ts | 4 +++ src/main/__test__/context-handler.test.ts | 5 ++++ src/main/__test__/kube-auth-proxy.test.ts | 9 ++++++- src/main/__test__/kubeconfig-manager.test.ts | 19 +++++++++----- .../__test__/kubeconfig-sync.test.ts | 5 ++++ src/main/child-process/spawn.injectable.ts | 17 +++++++++++++ src/main/context-handler/context-handler.ts | 6 ++--- .../create-context-handler.injectable.ts | 6 +++-- src/main/getDiForUnitTesting.ts | 17 ++++++++++--- ...e-kube-auth-proxy-cert-files.injectable.ts | 14 ++++------- .../create-kube-auth-proxy-cert-files.ts | 6 +---- .../create-kube-auth-proxy.injectable.ts | 8 +++--- .../kube-auth-proxy-ca.injectable.ts | 21 ++++++++++++++++ .../kube-auth-proxy-cert.injectable.ts | 5 ---- src/main/kube-auth-proxy/kube-auth-proxy.ts | 4 +-- .../__tests__/delete-cluster-dialog.test.tsx | 3 +++ 20 files changed, 140 insertions(+), 42 deletions(-) create mode 100644 src/common/fs/write-file.injectable.ts create mode 100644 src/main/child-process/spawn.injectable.ts create mode 100644 src/main/kube-auth-proxy/kube-auth-proxy-ca.injectable.ts diff --git a/src/common/__tests__/cluster-store.test.ts b/src/common/__tests__/cluster-store.test.ts index 9bfc5346ed..a8e903af17 100644 --- a/src/common/__tests__/cluster-store.test.ts +++ b/src/common/__tests__/cluster-store.test.ts @@ -24,6 +24,8 @@ import { createClusterInjectionToken } from "../cluster/create-cluster-injection import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable"; +import kubeAuthProxyCaInjectable from "../../main/kube-auth-proxy/kube-auth-proxy-ca.injectable"; +import createKubeAuthProxyCertFilesInjectable from "../../main/kube-auth-proxy/create-kube-auth-proxy-cert-files.injectable"; console = new Console(stdout, stderr); @@ -87,6 +89,8 @@ describe("cluster-store", () => { mainDi = dis.mainDi; mainDi.override(directoryForUserDataInjectable, () => "some-directory-for-user-data"); + mainDi.override(createKubeAuthProxyCertFilesInjectable, () => ({})); + mainDi.override(kubeAuthProxyCaInjectable, () => ({})); await dis.runSetups(); diff --git a/src/common/__tests__/hotbar-store.test.ts b/src/common/__tests__/hotbar-store.test.ts index b9fc9d1e99..e93f53abe5 100644 --- a/src/common/__tests__/hotbar-store.test.ts +++ b/src/common/__tests__/hotbar-store.test.ts @@ -10,6 +10,7 @@ import type { CatalogEntity, CatalogEntityData, CatalogEntityKindData } from ".. import { HotbarStore } from "../hotbar-store"; import { getDiForUnitTesting } from "../../main/getDiForUnitTesting"; import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable"; +import writeFileInjectable from "../fs/write-file.injectable"; jest.mock("../../main/catalog/catalog-entity-registry", () => ({ catalogEntityRegistry: { @@ -115,6 +116,7 @@ describe("HotbarStore", () => { beforeEach(async () => { const di = getDiForUnitTesting({ doGeneralOverrides: true }); + di.override(writeFileInjectable, () => () => undefined); di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data"); await di.runSetups(); diff --git a/src/common/__tests__/user-store.test.ts b/src/common/__tests__/user-store.test.ts index da05121bdf..465acc2a45 100644 --- a/src/common/__tests__/user-store.test.ts +++ b/src/common/__tests__/user-store.test.ts @@ -32,6 +32,7 @@ import type { DiContainer } from "@ogre-tools/injectable"; import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable"; import type { ClusterStoreModel } from "../cluster-store/cluster-store"; import { defaultTheme } from "../vars"; +import writeFileInjectable from "../fs/write-file.injectable"; console = new Console(stdout, stderr); @@ -46,6 +47,7 @@ describe("user store tests", () => { mainDi = dis.mainDi; + mainDi.override(writeFileInjectable, () => () => undefined); mainDi.override(directoryForUserDataInjectable, () => "some-directory-for-user-data"); await dis.runSetups(); diff --git a/src/common/fs/write-file.injectable.ts b/src/common/fs/write-file.injectable.ts new file mode 100644 index 0000000000..d7e536fb52 --- /dev/null +++ b/src/common/fs/write-file.injectable.ts @@ -0,0 +1,25 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import path from "path"; +import fsInjectable from "./fs.injectable"; + +const writeFileInjectable = getInjectable({ + id: "write-file", + + instantiate: (di) => { + const { writeFile, ensureDir } = di.inject(fsInjectable); + + return async (filePath: string, content: string | Buffer) => { + await ensureDir(path.dirname(filePath), { mode: 0o755 }); + + await writeFile(filePath, content, { + encoding: "utf-8", + }); + }; + }, +}); + +export default writeFileInjectable; diff --git a/src/main/__test__/cluster.test.ts b/src/main/__test__/cluster.test.ts index 4fa5f5cdd3..2b6ab2eb8b 100644 --- a/src/main/__test__/cluster.test.ts +++ b/src/main/__test__/cluster.test.ts @@ -41,6 +41,7 @@ import type { ClusterModel } from "../../common/cluster-types"; import { createClusterInjectionToken } from "../../common/cluster/create-cluster-injection-token"; import authorizationReviewInjectable from "../../common/cluster/authorization-review.injectable"; import listNamespacesInjectable from "../../common/cluster/list-namespaces.injectable"; +import createContextHandlerInjectable from "../context-handler/create-context-handler.injectable"; console = new Console(process.stdout, process.stderr); // fix mockFS @@ -81,6 +82,9 @@ describe("create clusters", () => { di.override(authorizationReviewInjectable, () => () => () => Promise.resolve(true)); di.override(listNamespacesInjectable, () => () => () => Promise.resolve([ "default" ])); + di.override(createContextHandlerInjectable, () => () => { + throw new Error("you should never come here"); + }); createCluster = di.inject(createClusterInjectionToken); diff --git a/src/main/__test__/context-handler.test.ts b/src/main/__test__/context-handler.test.ts index 191a129dbe..c8180383e4 100644 --- a/src/main/__test__/context-handler.test.ts +++ b/src/main/__test__/context-handler.test.ts @@ -10,6 +10,8 @@ import mockFs from "mock-fs"; import { getDiForUnitTesting } from "../getDiForUnitTesting"; import createContextHandlerInjectable from "../context-handler/create-context-handler.injectable"; import type { Cluster } from "../../common/cluster/cluster"; +import kubeAuthProxyCaInjectable from "../kube-auth-proxy/kube-auth-proxy-ca.injectable"; +import createKubeAuthProxyInjectable from "../kube-auth-proxy/create-kube-auth-proxy.injectable"; jest.mock("electron", () => ({ app: { @@ -80,6 +82,9 @@ describe("ContextHandler", () => { "tmp": {}, }); + di.override(createKubeAuthProxyInjectable, () => ({})); + di.override(kubeAuthProxyCaInjectable, () => ({})); + await di.runSetups(); createContextHandler = di.inject(createContextHandlerInjectable); diff --git a/src/main/__test__/kube-auth-proxy.test.ts b/src/main/__test__/kube-auth-proxy.test.ts index 4c006ecec9..58bdafac58 100644 --- a/src/main/__test__/kube-auth-proxy.test.ts +++ b/src/main/__test__/kube-auth-proxy.test.ts @@ -50,6 +50,9 @@ import { getDiForUnitTesting } from "../getDiForUnitTesting"; import createKubeAuthProxyInjectable from "../kube-auth-proxy/create-kube-auth-proxy.injectable"; import { createClusterInjectionToken } from "../../common/cluster/create-cluster-injection-token"; import path from "path"; +import spawnInjectable from "../child-process/spawn.injectable"; +import kubeAuthProxyCaInjectable from "../kube-auth-proxy/kube-auth-proxy-ca.injectable"; +import createKubeAuthProxyCertFilesInjectable from "../kube-auth-proxy/create-kube-auth-proxy-cert-files.injectable"; console = new Console(stdout, stderr); @@ -92,6 +95,10 @@ describe("kube auth proxy tests", () => { const di = getDiForUnitTesting({ doGeneralOverrides: true }); + di.override(spawnInjectable, () => mockSpawn); + di.override(createKubeAuthProxyCertFilesInjectable, () => ({})); + di.override(kubeAuthProxyCaInjectable, () => ({})); + mockFs(mockMinikubeConfig); await di.runSetups(); @@ -130,7 +137,7 @@ describe("kube auth proxy tests", () => { beforeEach(async () => { mockedCP = mock(); listeners = new EventEmitter(); - + jest.spyOn(Kubectl.prototype, "checkBinary").mockReturnValueOnce(Promise.resolve(true)); jest.spyOn(Kubectl.prototype, "ensureKubectl").mockReturnValueOnce(Promise.resolve(false)); mockedCP.on.mockImplementation((event: string, listener: (message: any, sendHandle: any) => void): ChildProcess => { diff --git a/src/main/__test__/kubeconfig-manager.test.ts b/src/main/__test__/kubeconfig-manager.test.ts index 53808c6ce9..263d6be996 100644 --- a/src/main/__test__/kubeconfig-manager.test.ts +++ b/src/main/__test__/kubeconfig-manager.test.ts @@ -40,15 +40,18 @@ import * as path from "path"; import createKubeconfigManagerInjectable from "../kubeconfig-manager/create-kubeconfig-manager.injectable"; import { createClusterInjectionToken } from "../../common/cluster/create-cluster-injection-token"; import directoryForTempInjectable from "../../common/app-paths/directory-for-temp/directory-for-temp.injectable"; +import createContextHandlerInjectable from "../context-handler/create-context-handler.injectable"; +import type { DiContainer } from "@ogre-tools/injectable"; console = new Console(process.stdout, process.stderr); // fix mockFS describe("kubeconfig manager tests", () => { - let cluster: Cluster; + let clusterFake: Cluster; let createKubeconfigManager: (cluster: Cluster) => KubeconfigManager; + let di: DiContainer; beforeEach(async () => { - const di = getDiForUnitTesting({ doGeneralOverrides: true }); + di = getDiForUnitTesting({ doGeneralOverrides: true }); di.override(directoryForTempInjectable, () => "some-directory-for-temp"); @@ -78,17 +81,21 @@ describe("kubeconfig manager tests", () => { await di.runSetups(); + di.override(createContextHandlerInjectable, () => () => { + throw new Error("you should never come here"); + }); + const createCluster = di.inject(createClusterInjectionToken); createKubeconfigManager = di.inject(createKubeconfigManagerInjectable); - cluster = createCluster({ + clusterFake = createCluster({ id: "foo", contextName: "minikube", kubeConfigPath: "minikube-config.yml", }); - cluster.contextHandler = { + clusterFake.contextHandler = { ensureServer: () => Promise.resolve(), } as any; @@ -100,7 +107,7 @@ describe("kubeconfig manager tests", () => { }); it("should create 'temp' kube config with proxy", async () => { - const kubeConfManager = createKubeconfigManager(cluster); + const kubeConfManager = createKubeconfigManager(clusterFake); expect(logger.error).not.toBeCalled(); expect(await kubeConfManager.getPath()).toBe(`some-directory-for-temp${path.sep}kubeconfig-foo`); @@ -115,7 +122,7 @@ describe("kubeconfig manager tests", () => { }); it("should remove 'temp' kube config on unlink and remove reference from inside class", async () => { - const kubeConfManager = createKubeconfigManager(cluster); + const kubeConfManager = createKubeconfigManager(clusterFake); const configPath = await kubeConfManager.getPath(); diff --git a/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts b/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts index f04458c3c8..80eb89a96b 100644 --- a/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts +++ b/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts @@ -16,6 +16,8 @@ import { getDiForUnitTesting } from "../../getDiForUnitTesting"; import { createClusterInjectionToken } from "../../../common/cluster/create-cluster-injection-token"; import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable"; +import kubeAuthProxyCaInjectable from "../../kube-auth-proxy/kube-auth-proxy-ca.injectable"; +import createKubeAuthProxyCertFilesInjectable from "../../kube-auth-proxy/create-kube-auth-proxy-cert-files.injectable"; jest.mock("electron", () => ({ @@ -40,6 +42,9 @@ describe("kubeconfig-sync.source tests", () => { beforeEach(async () => { const di = getDiForUnitTesting({ doGeneralOverrides: true }); + di.override(kubeAuthProxyCaInjectable, () => Promise.resolve(Buffer.from("ca"))); + di.override(createKubeAuthProxyCertFilesInjectable, () => ({})); + mockFs(); await di.runSetups(); diff --git a/src/main/child-process/spawn.injectable.ts b/src/main/child-process/spawn.injectable.ts new file mode 100644 index 0000000000..d313e19d95 --- /dev/null +++ b/src/main/child-process/spawn.injectable.ts @@ -0,0 +1,17 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { spawn } from "child_process"; + +const spawnInjectable = getInjectable({ + id: "spawn", + + instantiate: () => { + return spawn; + }, + causesSideEffects: true, +}); + +export default spawnInjectable; diff --git a/src/main/context-handler/context-handler.ts b/src/main/context-handler/context-handler.ts index 95c4771529..d08d5ace1f 100644 --- a/src/main/context-handler/context-handler.ts +++ b/src/main/context-handler/context-handler.ts @@ -12,8 +12,6 @@ import url, { UrlWithStringQuery } from "url"; import { CoreV1Api } from "@kubernetes/client-node"; import logger from "../logger"; import type { KubeAuthProxy } from "../kube-auth-proxy/kube-auth-proxy"; -import path from "path"; -import { readFile } from "fs/promises"; import type { CreateKubeAuthProxy } from "../kube-auth-proxy/create-kube-auth-proxy.injectable"; export interface PrometheusDetails { @@ -30,7 +28,7 @@ interface PrometheusServicePreferences { interface Dependencies { createKubeAuthProxy: CreateKubeAuthProxy; - certPath: string; + authProxyCa: Promise; } export class ContextHandler { @@ -126,7 +124,7 @@ export class ContextHandler { } async resolveAuthProxyCa() { - return readFile(path.join(this.dependencies.certPath, "proxy.crt")); + return this.dependencies.authProxyCa; } async getApiTarget(isLongRunningRequest = false): Promise { diff --git a/src/main/context-handler/create-context-handler.injectable.ts b/src/main/context-handler/create-context-handler.injectable.ts index 083298be99..c08bd4276a 100644 --- a/src/main/context-handler/create-context-handler.injectable.ts +++ b/src/main/context-handler/create-context-handler.injectable.ts @@ -6,15 +6,17 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { Cluster } from "../../common/cluster/cluster"; import { ContextHandler } from "./context-handler"; import createKubeAuthProxyInjectable from "../kube-auth-proxy/create-kube-auth-proxy.injectable"; -import getKubeAuthProxyCertDirInjectable from "../kube-auth-proxy/kube-auth-proxy-cert.injectable"; +import kubeAuthProxyCaInjectable from "../kube-auth-proxy/kube-auth-proxy-ca.injectable"; const createContextHandlerInjectable = getInjectable({ id: "create-context-handler", instantiate: (di) => { + const authProxyCa = di.inject(kubeAuthProxyCaInjectable); + const dependencies = { createKubeAuthProxy: di.inject(createKubeAuthProxyInjectable), - certPath: di.inject(getKubeAuthProxyCertDirInjectable), + authProxyCa, }; return (cluster: Cluster) => new ContextHandler(dependencies, cluster); diff --git a/src/main/getDiForUnitTesting.ts b/src/main/getDiForUnitTesting.ts index d298c984d3..c78b3fc9ac 100644 --- a/src/main/getDiForUnitTesting.ts +++ b/src/main/getDiForUnitTesting.ts @@ -15,8 +15,8 @@ import registerChannelInjectable from "./app-paths/register-channel/register-cha import writeJsonFileInjectable from "../common/fs/write-json-file.injectable"; import readJsonFileInjectable from "../common/fs/read-json-file.injectable"; import directoryForBundledBinariesInjectable from "../common/app-paths/directory-for-bundled-binaries/directory-for-bundled-binaries.injectable"; -import getKubeAuthProxyCertDirInjectable from "./kube-auth-proxy/kube-auth-proxy-cert.injectable"; -import createKubeAuthProxyCertFilesInjectable from "./kube-auth-proxy/create-kube-auth-proxy-cert-files.injectable"; +import spawnInjectable from "./child-process/spawn.injectable"; +import readFileInjectable from "../common/fs/read-file.injectable"; export const getDiForUnitTesting = ( { doGeneralOverrides } = { doGeneralOverrides: false }, @@ -47,8 +47,13 @@ export const getDiForUnitTesting = ( di.override(appNameInjectable, () => "some-electron-app-name"); di.override(registerChannelInjectable, () => () => undefined); di.override(directoryForBundledBinariesInjectable, () => "some-bin-directory"); - di.override(getKubeAuthProxyCertDirInjectable, () => "some-kube-auth-proxy-cert-directory"); - di.override(createKubeAuthProxyCertFilesInjectable, async () => "does-not-matter"); + di.override(spawnInjectable, () => () => { + return { + stderr: { on: jest.fn(), removeAllListeners: jest.fn() }, + stdout: { on: jest.fn(), removeAllListeners: jest.fn() }, + on: jest.fn(), + } as any; + }); di.override(writeJsonFileInjectable, () => () => { throw new Error("Tried to write JSON file to file system without specifying explicit override."); @@ -57,6 +62,10 @@ export const getDiForUnitTesting = ( di.override(readJsonFileInjectable, () => () => { throw new Error("Tried to read JSON file from file system without specifying explicit override."); }); + + di.override(readFileInjectable, () => () => { + throw new Error("Tried to read a file from file system without specifying explicit override."); + }); } return di; diff --git a/src/main/kube-auth-proxy/create-kube-auth-proxy-cert-files.injectable.ts b/src/main/kube-auth-proxy/create-kube-auth-proxy-cert-files.injectable.ts index 3dfc7fb89e..dc8ce3dca2 100644 --- a/src/main/kube-auth-proxy/create-kube-auth-proxy-cert-files.injectable.ts +++ b/src/main/kube-auth-proxy/create-kube-auth-proxy-cert-files.injectable.ts @@ -3,24 +3,20 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { writeFile } from "fs/promises"; -import { ensureDir } from "fs-extra"; -import directoryForUserDataInjectable from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import { getKubeAuthProxyCertificatePath } from "./kube-auth-proxy-cert"; import * as selfsigned from "selfsigned"; import { createKubeAuthProxyCertFiles } from "./create-kube-auth-proxy-cert-files"; +import getKubeAuthProxyCertDirInjectable from "./kube-auth-proxy-cert.injectable"; +import writeFileInjectable from "../../common/fs/write-file.injectable"; const createKubeAuthProxyCertFilesInjectable = getInjectable({ id: "create-kube-auth-proxy-cert-files", instantiate: async (di) => { - const userData = di.inject(directoryForUserDataInjectable); - const certPath = getKubeAuthProxyCertificatePath(userData); + const certPath = di.inject(getKubeAuthProxyCertDirInjectable); return createKubeAuthProxyCertFiles(certPath, { - generate: selfsigned.generate, - ensureDir, - writeFile, + generate: selfsigned.generate, + writeFile: di.inject(writeFileInjectable), }); }, }); diff --git a/src/main/kube-auth-proxy/create-kube-auth-proxy-cert-files.ts b/src/main/kube-auth-proxy/create-kube-auth-proxy-cert-files.ts index b4d3cd0460..325495dc7a 100644 --- a/src/main/kube-auth-proxy/create-kube-auth-proxy-cert-files.ts +++ b/src/main/kube-auth-proxy/create-kube-auth-proxy-cert-files.ts @@ -3,8 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { writeFile } from "fs/promises"; -import type { ensureDir } from "fs-extra"; import path from "path"; import type * as selfsigned from "selfsigned"; @@ -12,8 +10,7 @@ type SelfSignedGenerate = typeof selfsigned.generate; interface CreateKubeAuthProxyCertificateFilesDependencies { generate: SelfSignedGenerate; - ensureDir: typeof ensureDir; - writeFile: typeof writeFile; + writeFile: (path: string, content: string | Buffer) => Promise; } function getKubeAuthProxyCertificate(generate: SelfSignedGenerate): selfsigned.SelfSignedCert { @@ -39,7 +36,6 @@ function getKubeAuthProxyCertificate(generate: SelfSignedGenerate): selfsigned.S export async function createKubeAuthProxyCertFiles(dir: string, dependencies: CreateKubeAuthProxyCertificateFilesDependencies): Promise { const cert = getKubeAuthProxyCertificate(dependencies.generate); - await dependencies.ensureDir(dir); await dependencies.writeFile(path.join(dir, "proxy.key"), cert.private); await dependencies.writeFile(path.join(dir, "proxy.crt"), cert.cert); diff --git a/src/main/kube-auth-proxy/create-kube-auth-proxy.injectable.ts b/src/main/kube-auth-proxy/create-kube-auth-proxy.injectable.ts index 275f05ead7..b566782197 100644 --- a/src/main/kube-auth-proxy/create-kube-auth-proxy.injectable.ts +++ b/src/main/kube-auth-proxy/create-kube-auth-proxy.injectable.ts @@ -4,12 +4,12 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { KubeAuthProxy, KubeAuthProxyDependencies } from "./kube-auth-proxy"; -import { spawn } from "child_process"; import type { Cluster } from "../../common/cluster/cluster"; import path from "path"; import { getBinaryName } from "../../common/vars"; import directoryForBundledBinariesInjectable from "../../common/app-paths/directory-for-bundled-binaries/directory-for-bundled-binaries.injectable"; -import getKubeAuthProxyCertDirInjectable from "./kube-auth-proxy-cert.injectable"; +import spawnInjectable from "../child-process/spawn.injectable"; +import createKubeAuthProxyCertFilesInjectable from "./create-kube-auth-proxy-cert-files.injectable"; export type CreateKubeAuthProxy = (cluster: Cluster, environmentVariables: NodeJS.ProcessEnv) => KubeAuthProxy; @@ -20,8 +20,8 @@ const createKubeAuthProxyInjectable = getInjectable({ const binaryName = getBinaryName("lens-k8s-proxy"); const dependencies: KubeAuthProxyDependencies = { proxyBinPath: path.join(di.inject(directoryForBundledBinariesInjectable), binaryName), - proxyCertPath: di.inject(getKubeAuthProxyCertDirInjectable), - spawn, + proxyCertPath: di.inject(createKubeAuthProxyCertFilesInjectable), + spawn: di.inject(spawnInjectable), }; return (cluster: Cluster, environmentVariables: NodeJS.ProcessEnv) => ( diff --git a/src/main/kube-auth-proxy/kube-auth-proxy-ca.injectable.ts b/src/main/kube-auth-proxy/kube-auth-proxy-ca.injectable.ts new file mode 100644 index 0000000000..e43c2c48da --- /dev/null +++ b/src/main/kube-auth-proxy/kube-auth-proxy-ca.injectable.ts @@ -0,0 +1,21 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import getKubeAuthProxyCertDirInjectable from "../kube-auth-proxy/kube-auth-proxy-cert.injectable"; +import path from "path"; +import readFileInjectable from "../../common/fs/read-file.injectable"; + +const kubeAuthProxyCaInjectable = getInjectable({ + id: "kube-auth-proxy-ca", + + instantiate: (di) => { + const certPath = di.inject(getKubeAuthProxyCertDirInjectable); + const readFile = di.inject(readFileInjectable); + + return readFile(path.join(certPath, "proxy.crt")); + }, +}); + +export default kubeAuthProxyCaInjectable; diff --git a/src/main/kube-auth-proxy/kube-auth-proxy-cert.injectable.ts b/src/main/kube-auth-proxy/kube-auth-proxy-cert.injectable.ts index d3825cd214..85f6f3c91a 100644 --- a/src/main/kube-auth-proxy/kube-auth-proxy-cert.injectable.ts +++ b/src/main/kube-auth-proxy/kube-auth-proxy-cert.injectable.ts @@ -5,15 +5,10 @@ import { getInjectable } from "@ogre-tools/injectable"; import directoryForUserDataInjectable from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import { getKubeAuthProxyCertificatePath } from "./kube-auth-proxy-cert"; -import createKubeAuthProxyCertFilesInjectable from "./create-kube-auth-proxy-cert-files.injectable"; const getKubeAuthProxyCertDirInjectable = getInjectable({ id: "get-kube-auth-proxy-cert-dir", - setup: async (di) => { - await di.inject(createKubeAuthProxyCertFilesInjectable); - }, - instantiate: (di) => getKubeAuthProxyCertificatePath(di.inject(directoryForUserDataInjectable)), }); diff --git a/src/main/kube-auth-proxy/kube-auth-proxy.ts b/src/main/kube-auth-proxy/kube-auth-proxy.ts index 3d28eaa95a..33498feef4 100644 --- a/src/main/kube-auth-proxy/kube-auth-proxy.ts +++ b/src/main/kube-auth-proxy/kube-auth-proxy.ts @@ -15,7 +15,7 @@ const startingServeRegex = /starting to serve on (?
.+)/i; export interface KubeAuthProxyDependencies { proxyBinPath: string; - proxyCertPath: string; + proxyCertPath: Promise; spawn: typeof spawn; } @@ -44,7 +44,7 @@ export class KubeAuthProxy { } const proxyBin = this.dependencies.proxyBinPath; - const certPath = this.dependencies.proxyCertPath; + const certPath = await this.dependencies.proxyCertPath; this.proxyProcess = this.dependencies.spawn(proxyBin, [], { env: { diff --git a/src/renderer/components/delete-cluster-dialog/__tests__/delete-cluster-dialog.test.tsx b/src/renderer/components/delete-cluster-dialog/__tests__/delete-cluster-dialog.test.tsx index fad58d03c5..f341faa185 100644 --- a/src/renderer/components/delete-cluster-dialog/__tests__/delete-cluster-dialog.test.tsx +++ b/src/renderer/components/delete-cluster-dialog/__tests__/delete-cluster-dialog.test.tsx @@ -15,6 +15,7 @@ import { DeleteClusterDialog } from "../delete-cluster-dialog"; import type { ClusterModel } from "../../../../common/cluster-types"; import { getDisForUnitTesting } from "../../../../test-utils/get-dis-for-unit-testing"; import { createClusterInjectionToken } from "../../../../common/cluster/create-cluster-injection-token"; +import createContextHandlerInjectable from "../../../../main/context-handler/create-context-handler.injectable"; jest.mock("electron", () => ({ app: { @@ -91,6 +92,8 @@ describe("", () => { beforeEach(async () => { const { mainDi, runSetups } = getDisForUnitTesting({ doGeneralOverrides: true }); + mainDi.override(createContextHandlerInjectable, () => () => undefined); + mockFs(); await runSetups();