feat: add test and basic docs for catalog cluster locator

Signed-off-by: Jonah Back <jonah@jonahback.com>
This commit is contained in:
Jonah Back
2022-06-20 14:51:37 -07:00
parent 1d2f631630
commit 151aeea845
4 changed files with 35 additions and 5 deletions
@@ -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"'),
);
});
@@ -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)
@@ -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;
}
/**
@@ -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<express.Application> {
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());