Skip to content

Commit

Permalink
Get topology component factories from plugins
Browse files Browse the repository at this point in the history
Move plugin resource utils to its own extension type, cleanup resourceUtils
Use plugins for data model transforms
Add plugin for creation of connectors
Remove conversion of transform data to model, Update to use DataModelProvider
Use extensions for filtering and getting display filters
  • Loading branch information
jeff-phillips-18 committed Jun 19, 2020
1 parent a9657ee commit ef2143a
Show file tree
Hide file tree
Showing 118 changed files with 10,855 additions and 5,990 deletions.
15 changes: 12 additions & 3 deletions frontend/packages/console-plugin-sdk/src/typings/overview.ts
@@ -1,7 +1,6 @@
import { K8sResourceKind } from '@console/internal/module/k8s';
import { FirehoseResource } from '@console/internal/components/utils';
import { OverviewDetailsResourcesTabProps } from '@console/internal/components/overview/resource-overview-page';
import { OverviewMainContentProps } from '@console/internal/components/overview';
import { Extension, LazyLoader } from './base';

type ResourceItem = {
Expand All @@ -12,9 +11,11 @@ namespace ExtensionProperties {
export interface OverviewCRD {
/** Resources list to be fetched from Firehose. */
resources: (namespace: string) => FirehoseResource[];
}

/** util to check get resources. */
utils: (dc: K8sResourceKind, props: OverviewMainContentProps) => ResourceItem | undefined;
export interface OverviewResourceUtil {
/** function to get derived resources */
getResources: (obj: K8sResourceKind, props: any) => ResourceItem | undefined;
}

export interface OverviewResourceTab {
Expand Down Expand Up @@ -45,6 +46,14 @@ export const isOverviewCRD = (e: Extension): e is OverviewCRD => {
return e.type === 'Overview/CRD';
};

export interface OverviewResourceUtil extends Extension<ExtensionProperties.OverviewResourceUtil> {
type: 'Overview/ResourceUtil';
}

export const isOverviewResourceUtil = (e: Extension): e is OverviewResourceUtil => {
return e.type === 'Overview/ResourceUtil';
};

export interface OverviewResourceTab extends Extension<ExtensionProperties.OverviewResourceTab> {
type: 'Overview/Resource';
}
Expand Down
@@ -1,4 +1,5 @@
import * as _ from 'lodash';
import { OverviewResourceUtil } from '@console/plugin-sdk/src';
import {
MockResources,
sampleDeploymentConfigs,
Expand All @@ -10,12 +11,20 @@ import {
getKnativeServingRevisions,
getKnativeServingConfigurations,
getKnativeServingRoutes,
getKnativeServingServices,
} from '@console/knative-plugin/src/utils/get-knative-resources';
import {
sampleKnativeDeployments,
MockKnativeResources,
} from '@console/knative-plugin/src/topology/__tests__/topology-knative-test-data';
import { TransformResourceData } from '../transformResourceData';
import {
createDaemonSetItems,
createDeploymentConfigItems,
createPodItems,
createStatefulSetItems,
getPodsForDeploymentConfigs,
getPodsForDeployments,
} from '../resource-utils';

declare global {
namespace jest {
Expand All @@ -25,6 +34,33 @@ declare global {
}
}

const knativeOverviewResourceUtils: OverviewResourceUtil[] = [
{
type: 'Overview/ResourceUtil',
properties: {
getResources: getKnativeServingRevisions,
},
},
{
type: 'Overview/ResourceUtil',
properties: {
getResources: getKnativeServingConfigurations,
},
},
{
type: 'Overview/ResourceUtil',
properties: {
getResources: getKnativeServingRoutes,
},
},
{
type: 'Overview/ResourceUtil',
properties: {
getResources: getKnativeServingServices,
},
},
];

expect.extend({
toHaveProperties(received, argument) {
const pass = argument.every((arg: string) => {
Expand Down Expand Up @@ -72,104 +108,122 @@ const knativeKeys = [...dcKeys, Keys.REVISIONS, Keys.KNATIVECONFIGS, Keys.KSROUT
const podRCKeys = [Keys.OBJ, Keys.CURRENT, Keys.PREVIOUS, Keys.PODS, Keys.ROLLINGOUT];

describe('TransformResourceData', () => {
let transformResourceData;
beforeEach(() => {
transformResourceData = new TransformResourceData(MockResources, [
getKnativeServingRevisions,
getKnativeServingConfigurations,
getKnativeServingRoutes,
]);
});
it('should create Deployment config Items for a provided dc', () => {
const transformedData = transformResourceData.createDeploymentConfigItems(
const transformedData = createDeploymentConfigItems(
sampleDeploymentConfigs.data,
MockResources,
knativeOverviewResourceUtils,
);
expect(transformedData).toHaveLength(2);
expect(transformedData[0]).toHaveProperties(dcKeys);
});

it('should only have keys mentions in dcKeys for created Deployment config Items for a provided dc', () => {
const transformedData = transformResourceData.createDeploymentConfigItems(
const transformedData = createDeploymentConfigItems(
sampleDeploymentConfigs.data,
MockResources,
knativeOverviewResourceUtils,
);
expect(transformedData).toHaveLength(2);
expect(transformedData[0]).not.toHaveProperties([...dcKeys, 'revisions']);
});

it('should create Deployment Items for a provided deployment', () => {
const transformedData = transformResourceData.createDeploymentItems(sampleDeployments.data);
const transformedData = createDeploymentConfigItems(
sampleDeployments.data,
MockResources,
knativeOverviewResourceUtils,
);
expect(transformedData).toHaveLength(3);
expect(transformedData[0]).toHaveProperties(dcKeys);
expect(transformedData[1]).toHaveProperties(dcKeys);
});

it('should create Knative Deployment Items for a provided deployment', () => {
const transformKnativeResourceData = new TransformResourceData(MockKnativeResources, [
getKnativeServingRevisions,
getKnativeServingConfigurations,
getKnativeServingRoutes,
]);
const transformedData = transformKnativeResourceData.createDeploymentItems(
const transformedData = createDeploymentConfigItems(
sampleKnativeDeployments.data,
MockKnativeResources,
knativeOverviewResourceUtils,
);
expect(transformedData).toHaveLength(1);
expect(transformedData[0]).toHaveProperties(knativeKeys);
});

it('should only have keys mentions in KnativeKeys for created Deployment Items for a provided deployment', () => {
const transformedData = transformResourceData.createDeploymentItems(sampleDeployments.data);
const transformedData = createDeploymentConfigItems(
sampleDeployments.data,
MockResources,
knativeOverviewResourceUtils,
);
expect(transformedData).toHaveLength(3);
expect(transformedData[0]).not.toHaveProperties([...knativeKeys, 'key']);
});

it('should create StatefulSets Items for a provided ss', () => {
const transformedData = transformResourceData.createStatefulSetItems(sampleStatefulSets.data);
const transformedData = createStatefulSetItems(
sampleStatefulSets.data,
MockResources,
knativeOverviewResourceUtils,
);
expect(transformedData).toHaveLength(1);
expect(transformedData[0]).toHaveProperties(dsAndSSKeys);
});

it('should not have rc current or previous prop for created StatefulSets Items for a provided ss', () => {
const transformedData = transformResourceData.createStatefulSetItems(sampleStatefulSets.data);
const transformedData = createStatefulSetItems(
sampleStatefulSets.data,
MockResources,
knativeOverviewResourceUtils,
);
expect(transformedData).toHaveLength(1);
expect(transformedData[0]).not.toHaveProperties([...dsAndSSKeys, 'previous']);
});

it('should create DaemonSets Items for a provided ds', () => {
const transformedData = transformResourceData.createDaemonSetItems(sampleDaemonSets.data);
const transformedData = createDaemonSetItems(
sampleDaemonSets.data,
MockResources,
knativeOverviewResourceUtils,
);
expect(transformedData).toHaveLength(1);
expect(transformedData[0]).toHaveProperties(dsAndSSKeys);
});

it('should not have rc current or previous prop for created DaemonSets Items for a provided ds', () => {
const transformedData = transformResourceData.createDaemonSetItems(sampleDaemonSets.data);
const transformedData = createDaemonSetItems(
sampleDaemonSets.data,
MockResources,
knativeOverviewResourceUtils,
);
expect(transformedData).toHaveLength(1);
expect(transformedData[0]).not.toHaveProperties([...dsAndSSKeys, 'current']);
});

it('should return pods and replication controllers for a given DeploymentConfig', () => {
const transformedData = transformResourceData.getPodsForDeploymentConfigs(
const transformedData = getPodsForDeploymentConfigs(
sampleDeploymentConfigs.data,
MockResources,
);
expect(transformedData).toHaveLength(2);
expect(transformedData[0]).toHaveProperties(podRCKeys);
});

it('should return pods and replication controllers for a given DeploymentConfig', () => {
const transformedData = transformResourceData.getPodsForDeployments(sampleDeployments.data);
const transformedData = getPodsForDeployments(sampleDeployments.data, MockResources);
expect(transformedData).toHaveLength(3);
expect(transformedData[0]).toHaveProperties(podRCKeys);
expect(transformedData[1]).toHaveProperties(podRCKeys);
});

it('should return only pods and not replication controllers for a given resource', () => {
const transformedData = transformResourceData.createPodItems();
const transformedData = createPodItems(MockResources);
transformedData.forEach((element) => {
expect(element).toHaveProperties(podKeys);
});
});

it('should return pods and not replication controllers for a given resource', () => {
const transformedData = transformResourceData.createPodItems();
const transformedData = createPodItems(MockResources);
transformedData.forEach((element) => {
expect(element).not.toHaveProperties([...podKeys, 'current', 'previous']);
});
Expand Down
1 change: 0 additions & 1 deletion frontend/packages/console-shared/src/utils/index.ts
Expand Up @@ -3,7 +3,6 @@ export * from './utils';
export * from './pod-utils';
export * from './pod-ring-utils';
export * from './resource-utils';
export * from './transformResourceData';
export * from './validation';
export * from './table-utils';
export * from './storage-utils';
Expand Down

0 comments on commit ef2143a

Please sign in to comment.