From 151aeea845610e243656a374fb12697ccf1893cb Mon Sep 17 00:00:00 2001 From: Jonah Back Date: Mon, 20 Jun 2022 14:51:37 -0700 Subject: [PATCH] feat: add test and basic docs for catalog cluster locator Signed-off-by: Jonah Back --- .../src/cluster-locator/index.test.ts | 13 ++++++++++-- .../src/service/KubernetesBuilder.test.ts | 20 +++++++++++++++++-- .../kubernetes-backend/src/service/router.ts | 2 ++ .../src/service/standaloneApplication.ts | 5 ++++- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/plugins/kubernetes-backend/src/cluster-locator/index.test.ts b/plugins/kubernetes-backend/src/cluster-locator/index.test.ts index cc7e7d07d6..475e59e503 100644 --- a/plugins/kubernetes-backend/src/cluster-locator/index.test.ts +++ b/plugins/kubernetes-backend/src/cluster-locator/index.test.ts @@ -16,6 +16,7 @@ import { Config, ConfigReader } from '@backstage/config'; import { getCombinedClusterSupplier } from './index'; +import { PluginEndpointDiscovery } from '@backstage/backend-common/dist'; describe('getCombinedClusterSupplier', () => { it('should retrieve cluster details from config', async () => { @@ -44,8 +45,12 @@ describe('getCombinedClusterSupplier', () => { }, 'ctx', ); + const discovery: PluginEndpointDiscovery = { + getBaseUrl: jest.fn().mockResolvedValue('http://test-backend'), + getExternalBaseUrl: jest.fn(), + }; - const clusterSupplier = getCombinedClusterSupplier(config); + const clusterSupplier = getCombinedClusterSupplier(config, discovery); const result = await clusterSupplier.getClusters(); expect(result).toStrictEqual([ @@ -99,8 +104,12 @@ describe('getCombinedClusterSupplier', () => { }, 'ctx', ); + const discovery: PluginEndpointDiscovery = { + getBaseUrl: jest.fn().mockResolvedValue('http://test-backend'), + getExternalBaseUrl: jest.fn(), + }; - expect(() => getCombinedClusterSupplier(config)).toThrowError( + expect(() => getCombinedClusterSupplier(config, discovery)).toThrowError( new Error('Unsupported kubernetes.clusterLocatorMethods: "magic"'), ); }); diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts index 37dad8c3e4..fd130a30bf 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -import { getVoidLogger } from '@backstage/backend-common'; +import { + getVoidLogger, + PluginEndpointDiscovery, +} from '@backstage/backend-common'; import { Config, ConfigReader } from '@backstage/config'; import { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common'; import express from 'express'; @@ -44,6 +47,10 @@ describe('KubernetesBuilder', () => { clusterLocatorMethods: [{ type: 'config', clusters: [] }], }, }); + const discovery: PluginEndpointDiscovery = { + getBaseUrl: jest.fn().mockResolvedValue('http://test-backend'), + getExternalBaseUrl: jest.fn(), + }; const clusters: ClusterDetails[] = [ { @@ -68,7 +75,11 @@ describe('KubernetesBuilder', () => { getKubernetesObjectsByEntity: jest.fn(), } as any; - const { router } = await KubernetesBuilder.createBuilder({ config, logger }) + const { router } = await KubernetesBuilder.createBuilder({ + config, + logger, + discovery, + }) .setObjectsProvider(kubernetesFanOutHandler) .setClusterSupplier(clusterSupplier) .build(); @@ -164,6 +175,10 @@ describe('KubernetesBuilder', () => { it('custom service locator', async () => { const logger = getVoidLogger(); + const discovery: PluginEndpointDiscovery = { + getBaseUrl: jest.fn().mockResolvedValue('http://test-backend'), + getExternalBaseUrl: jest.fn(), + }; const someCluster: ClusterDetails = { name: 'some-cluster', authProvider: 'serviceAccount', @@ -237,6 +252,7 @@ describe('KubernetesBuilder', () => { const { router } = await KubernetesBuilder.createBuilder({ logger, config, + discovery, }) .setClusterSupplier(clusterSupplier) .setServiceLocator(serviceLocator) diff --git a/plugins/kubernetes-backend/src/service/router.ts b/plugins/kubernetes-backend/src/service/router.ts index 61082267be..d00dc5d034 100644 --- a/plugins/kubernetes-backend/src/service/router.ts +++ b/plugins/kubernetes-backend/src/service/router.ts @@ -19,11 +19,13 @@ import { Logger } from 'winston'; import { KubernetesClustersSupplier } from '../types/types'; import express from 'express'; import { KubernetesBuilder } from './KubernetesBuilder'; +import { PluginEndpointDiscovery } from '@backstage/backend-common/dist'; export interface RouterOptions { logger: Logger; config: Config; clusterSupplier?: KubernetesClustersSupplier; + discovery: PluginEndpointDiscovery; } /** diff --git a/plugins/kubernetes-backend/src/service/standaloneApplication.ts b/plugins/kubernetes-backend/src/service/standaloneApplication.ts index 29262744e5..5c14c22b1d 100644 --- a/plugins/kubernetes-backend/src/service/standaloneApplication.ts +++ b/plugins/kubernetes-backend/src/service/standaloneApplication.ts @@ -18,6 +18,7 @@ import { errorHandler, notFoundHandler, requestLoggingHandler, + SingleHostDiscovery, } from '@backstage/backend-common'; import compression from 'compression'; import cors from 'cors'; @@ -37,6 +38,8 @@ export async function createStandaloneApplication( ): Promise { const { enableCors, logger } = options; const config = new ConfigReader({}); + const discovery = SingleHostDiscovery.fromConfig(config); + const app = express(); app.use(helmet()); @@ -46,7 +49,7 @@ export async function createStandaloneApplication( app.use(compression()); app.use(express.json()); app.use(requestLoggingHandler()); - app.use('/', await createRouter({ logger, config })); + app.use('/', await createRouter({ logger, config, discovery })); app.use(notFoundHandler()); app.use(errorHandler());