mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Stop using source code in build file Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add new injectable version of binaryName Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add new NormalizedPlatform type Signed-off-by: Sebastian Malton <sebastian@malton.name> * Switch legacy execHelm to use legacy global DI for binaryPath Signed-off-by: Sebastian Malton <sebastian@malton.name> * Remove dead code Signed-off-by: Sebastian Malton <sebastian@malton.name> * Introduce injectable for kube auth proxy certs Signed-off-by: Sebastian Malton <sebastian@malton.name> * Introduce injectable forms of PrometheusProviders - Remove class requirement - Make everything injectable Signed-off-by: Sebastian Malton <sebastian@malton.name> * Update tests to not use private functions Signed-off-by: Sebastian Malton <sebastian@malton.name> * Cleanup creating binary names and paths Signed-off-by: Sebastian Malton <sebastian@malton.name> Signed-off-by: Sebastian Malton <sebastian@malton.name>
192 lines
6.2 KiB
TypeScript
192 lines
6.2 KiB
TypeScript
/**
|
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
*/
|
|
|
|
import type { ClusterContextHandler } from "../context-handler/context-handler";
|
|
import { getDiForUnitTesting } from "../getDiForUnitTesting";
|
|
import createContextHandlerInjectable from "../context-handler/create-context-handler.injectable";
|
|
import type { Cluster } from "../../common/cluster/cluster";
|
|
import createKubeAuthProxyInjectable from "../kube-auth-proxy/create-kube-auth-proxy.injectable";
|
|
import type { DiContainer } from "@ogre-tools/injectable";
|
|
import { getInjectable } from "@ogre-tools/injectable";
|
|
import type { PrometheusProvider } from "../prometheus/provider";
|
|
import { prometheusProviderInjectionToken } from "../prometheus/provider";
|
|
import { runInAction } from "mobx";
|
|
|
|
enum ServiceResult {
|
|
Success,
|
|
Failure,
|
|
}
|
|
|
|
const createTestPrometheusProvider = (kind: string, alwaysFail: ServiceResult): PrometheusProvider => ({
|
|
kind,
|
|
name: "TestProvider1",
|
|
isConfigurable: false,
|
|
getQuery: () => {
|
|
throw new Error("getQuery is not implemented.");
|
|
},
|
|
getPrometheusService: async () => {
|
|
switch (alwaysFail) {
|
|
case ServiceResult.Success:
|
|
return {
|
|
kind,
|
|
namespace: "default",
|
|
port: 7000,
|
|
service: "",
|
|
};
|
|
case ServiceResult.Failure:
|
|
throw new Error("does fail");
|
|
}
|
|
},
|
|
});
|
|
|
|
const clusterStub = {
|
|
getProxyKubeconfig: () => ({
|
|
makeApiClient: (): void => undefined,
|
|
}),
|
|
apiUrl: "http://localhost:81",
|
|
} as unknown as Cluster;
|
|
|
|
describe("ContextHandler", () => {
|
|
let createContextHandler: (cluster: Cluster) => ClusterContextHandler;
|
|
let di: DiContainer;
|
|
|
|
beforeEach(() => {
|
|
di = getDiForUnitTesting({ doGeneralOverrides: true });
|
|
di.override(createKubeAuthProxyInjectable, () => ({} as any));
|
|
|
|
createContextHandler = di.inject(createContextHandlerInjectable);
|
|
});
|
|
|
|
describe("getPrometheusService", () => {
|
|
it.each([
|
|
[0],
|
|
[1],
|
|
[2],
|
|
[3],
|
|
])("should throw after %d failure(s)", async (failures) => {
|
|
runInAction(() => {
|
|
for (let i = 0; i < failures; i += 1) {
|
|
di.register(getInjectable({
|
|
id: `test-prometheus-provider-failure-${i}`,
|
|
injectionToken: prometheusProviderInjectionToken,
|
|
instantiate: () => createTestPrometheusProvider(`id_failure_${i}`, ServiceResult.Failure),
|
|
}));
|
|
}
|
|
});
|
|
|
|
expect(() => createContextHandler(clusterStub).getPrometheusDetails()).rejects.toThrowError();
|
|
});
|
|
|
|
it.each([
|
|
[1, 0],
|
|
[1, 1],
|
|
[1, 2],
|
|
[1, 3],
|
|
[2, 0],
|
|
[2, 1],
|
|
[2, 2],
|
|
[2, 3],
|
|
])("should pick the first provider of %d success(es) after %d failure(s)", async (successes, failures) => {
|
|
runInAction(() => {
|
|
for (let i = 0; i < failures; i += 1) {
|
|
di.register(getInjectable({
|
|
id: `test-prometheus-provider-failure-${i}`,
|
|
injectionToken: prometheusProviderInjectionToken,
|
|
instantiate: () => createTestPrometheusProvider(`id_failure_${i}`, ServiceResult.Failure),
|
|
}));
|
|
}
|
|
|
|
for (let i = 0; i < successes; i += 1) {
|
|
di.register(getInjectable({
|
|
id: `test-prometheus-provider-success-${i}`,
|
|
injectionToken: prometheusProviderInjectionToken,
|
|
instantiate: () => createTestPrometheusProvider(`id_success_${i}`, ServiceResult.Success),
|
|
}));
|
|
}
|
|
});
|
|
|
|
const details = await createContextHandler(clusterStub).getPrometheusDetails();
|
|
|
|
expect(details.provider.kind === `id_failure_${failures}`);
|
|
});
|
|
|
|
it.each([
|
|
[1, 0],
|
|
[1, 1],
|
|
[1, 2],
|
|
[1, 3],
|
|
[2, 0],
|
|
[2, 1],
|
|
[2, 2],
|
|
[2, 3],
|
|
])("should pick the first provider of %d success(es) before %d failure(s)", async (successes, failures) => {
|
|
runInAction(() => {
|
|
for (let i = 0; i < failures; i += 1) {
|
|
di.register(getInjectable({
|
|
id: `test-prometheus-provider-failure-${i}`,
|
|
injectionToken: prometheusProviderInjectionToken,
|
|
instantiate: () => createTestPrometheusProvider(`id_failure_${i}`, ServiceResult.Failure),
|
|
}));
|
|
}
|
|
|
|
for (let i = 0; i < successes; i += 1) {
|
|
di.register(getInjectable({
|
|
id: `test-prometheus-provider-success-${i}`,
|
|
injectionToken: prometheusProviderInjectionToken,
|
|
instantiate: () => createTestPrometheusProvider(`id_success_${i}`, ServiceResult.Success),
|
|
}));
|
|
}
|
|
});
|
|
|
|
const details = await createContextHandler(clusterStub).getPrometheusDetails();
|
|
|
|
expect(details.provider.kind === "id_failure_0");
|
|
});
|
|
|
|
it.each([
|
|
[1, 0],
|
|
[1, 1],
|
|
[1, 2],
|
|
[1, 3],
|
|
[2, 0],
|
|
[2, 1],
|
|
[2, 2],
|
|
[2, 3],
|
|
])("should pick the first provider of %d success(es) between %d failure(s)", async (successes, failures) => {
|
|
const beforeSuccesses = Math.floor(successes / 2);
|
|
|
|
runInAction(() => {
|
|
for (let i = 0; i < beforeSuccesses; i += 1) {
|
|
di.register(getInjectable({
|
|
id: `test-prometheus-provider-success-${i}`,
|
|
injectionToken: prometheusProviderInjectionToken,
|
|
instantiate: () => createTestPrometheusProvider(`id_success_${i}`, ServiceResult.Success),
|
|
}));
|
|
}
|
|
|
|
for (let i = 0; i < failures; i += 1) {
|
|
di.register(getInjectable({
|
|
id: `test-prometheus-provider-failure-${i}`,
|
|
injectionToken: prometheusProviderInjectionToken,
|
|
instantiate: () => createTestPrometheusProvider(`id_failure_${i}`, ServiceResult.Failure),
|
|
}));
|
|
}
|
|
|
|
for (let i = beforeSuccesses; i < successes; i += 1) {
|
|
di.register(getInjectable({
|
|
id: `test-prometheus-provider-success-${i}`,
|
|
injectionToken: prometheusProviderInjectionToken,
|
|
instantiate: () => createTestPrometheusProvider(`id_success_${i}`, ServiceResult.Success),
|
|
}));
|
|
}
|
|
});
|
|
|
|
const details = await createContextHandler(clusterStub).getPrometheusDetails();
|
|
|
|
expect(details.provider.kind === "id_success_0");
|
|
});
|
|
});
|
|
});
|