Skip to content

Commit

Permalink
Merge pull request #10211 from invincibleJai/cherrypick-for-pr-9268-f…
Browse files Browse the repository at this point in the history
…or-4.8

[release-4.8] Bug 2013091: adds check for status in ksvc in util logic
  • Loading branch information
openshift-merge-robot committed Oct 15, 2021
2 parents 120db8c + f44f935 commit 0b125ac
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 27 deletions.
Expand Up @@ -3,8 +3,8 @@ import { PodStatus } from '@console/shared';
import { ChartLabel } from '@patternfly/react-charts';
import { K8sResourceKind, OwnerReference, referenceForModel } from '@console/internal/module/k8s';
import { ResourceLink } from '@console/internal/components/utils';
import { Traffic } from '../../types';
import { RevisionModel } from '../../models';
import { getTrafficByRevision } from '../../utils/get-knative-resources';
import { usePodsForRevisions } from '../../utils/usePodsForRevisions';
import RoutesUrlLink from './RoutesUrlLink';

Expand All @@ -22,42 +22,18 @@ const RevisionsOverviewListItem: React.FC<RevisionsOverviewListItemProps> = ({
const {
metadata: { name, namespace },
} = revision;
const {
status: { traffic },
} = service;
const getTrafficByRevision = (revName: string) => {
if (!traffic || !traffic.length) {
return {};
}
const trafficPercent = traffic
.filter((t: Traffic) => t.revisionName === revName)
.reduce(
(acc, tr: Traffic) => {
acc.percent += tr.percent ? tr.percent : 0;
if (tr.url) {
acc.urls.push(tr.url);
}
return acc;
},
{ urls: [], percent: 0 },
);
return {
...trafficPercent,
percent: trafficPercent.percent ? `${trafficPercent.percent}%` : null,
};
};
const { pods } = usePodsForRevisions(revision.metadata.uid, namespace);
const current = pods?.[0];
const deploymentData = current?.obj?.metadata.ownerReferences?.[0] || ({} as OwnerReference);
const availableReplicas = current?.obj?.status?.availableReplicas || '0';
const { urls = [], percent: trafficPercent } = getTrafficByRevision(name);
const { urls = [], percent: trafficPercent } = getTrafficByRevision(name, service);
return (
<li className="list-group-item">
<div className="row">
<div className="col-sm-8 col-xs-9">
<ResourceLink kind={referenceForModel(RevisionModel)} name={name} namespace={namespace} />
</div>
<span className="col-sm-4 col-xs-3 text-right">{trafficPercent}</span>
{trafficPercent && <span className="col-sm-4 col-xs-3 text-right">{trafficPercent}</span>}
</div>
{deploymentData.name && (
<div className="odc-revision-deployment-list">
Expand Down
Expand Up @@ -9,6 +9,7 @@ import RevisionsOverviewListItem, {
RevisionsOverviewListItemProps,
} from '../RevisionsOverviewListItem';
import { usePodsForRevisions } from '../../../utils/usePodsForRevisions';
import RoutesUrlLink from '../RoutesUrlLink';

jest.mock('../../../utils/usePodsForRevisions', () => ({
usePodsForRevisions: jest.fn(),
Expand Down Expand Up @@ -155,4 +156,18 @@ describe('RevisionsOverviewListItem', () => {
).toEqual(1);
});
});

it('should not render RoutesUrlLink if status is not present', () => {
const mockKsvc = {
...MockKnativeResources.ksservices.data[0],
};
delete mockKsvc.status;
wrapper = shallow(
<RevisionsOverviewListItem
revision={MockKnativeResources.revisions.data[0]}
service={mockKsvc}
/>,
);
expect(wrapper.find(RoutesUrlLink).exists()).toBe(false);
});
});
Expand Up @@ -10,6 +10,7 @@ import {
knativeServingResourcesRevision,
knativeServingResourcesConfigurations,
knativeServingResourcesRoutes,
getTrafficByRevision,
} from '../get-knative-resources';
import { deploymentData, deploymentKnativeData } from './knative-serving-data';

Expand Down Expand Up @@ -67,6 +68,53 @@ describe('Get knative resources', () => {
const knEventResource = getKnativeServingServices(deploymentData, MockResources);
expect(knEventResource).toBeUndefined();
});

it('expect getTrafficByRevision to return traffic url with percentage if present', () => {
const mockKsvcData = {
...MockKnativeResources.services.data[0],
status: {
traffic: [
{
latestRevision: true,
percent: 60,
revisionName: 'overlayimage-00001',
url: 'http://tag1-overlayimage-cluster.apps.cluster.devcluster.openshift.com',
tag: 'tag1',
},
{
latestRevision: true,
percent: 40,
revisionName: 'overlayimage-00002',
url: 'http://tag1-overlayimage-cluster.apps.cluster.devcluster.openshift.com',
tag: 'tag2',
},
],
},
};
const knTrafficData = getTrafficByRevision('overlayimage-00001', mockKsvcData);
expect(knTrafficData.urls).toHaveLength(1);
expect(knTrafficData.urls).toEqual([
'http://tag1-overlayimage-cluster.apps.cluster.devcluster.openshift.com',
]);
expect(knTrafficData.percent).toEqual('60%');
});

it('expect getTrafficByRevision to not return traffic url with percentage if service status is not present', () => {
const mockKsvcData = {
...MockKnativeResources.services.data[0],
};
delete mockKsvcData.status;
const knTrafficData = getTrafficByRevision('overlayimage-00001', mockKsvcData);
expect(knTrafficData).toEqual({});
});

it('expect getTrafficByRevision to not return traffic url with percentage if service status doesnot has traffic', () => {
const mockKsvcData = {
...MockKnativeResources.services.data[0],
};
const knTrafficData = getTrafficByRevision('overlayimage-00001', mockKsvcData);
expect(knTrafficData).toEqual({});
});
});

describe('knative Serving Resources', () => {
Expand Down
Expand Up @@ -17,6 +17,7 @@ import {
CamelKameletBindingModel,
} from '../models';
import { KNATIVE_SERVING_LABEL } from '../const';
import { Traffic } from '../types';

export type KnativeItem = {
revisions?: K8sResourceKind[];
Expand Down Expand Up @@ -306,3 +307,25 @@ export const knativeCamelKameletBindingResourceWatchers = (
},
};
};

export const getTrafficByRevision = (revName: string, service: K8sResourceKind) => {
if (!service.status?.traffic?.length) {
return {};
}
const trafficPercent = service.status.traffic
.filter((t: Traffic) => t.revisionName === revName)
.reduce(
(acc, tr: Traffic) => {
acc.percent += tr.percent ? tr.percent : 0;
if (tr.url) {
acc.urls.push(tr.url);
}
return acc;
},
{ urls: [], percent: 0 },
);
return {
...trafficPercent,
percent: trafficPercent.percent ? `${trafficPercent.percent}%` : null,
};
};

0 comments on commit 0b125ac

Please sign in to comment.