fix bug where response is badly formed. (#16830)

* fix bug where response is badly formed.

Ideally the client would validate that the response is in the format
it expects upfront before any of this processing is done. This change
provides a minimal fix.

Signed-off-by: Brian Fletcher <brian@roadie.io>

* Update plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts

Co-authored-by: Sam Blausten <sam@roadie.io>
Signed-off-by: Brian Fletcher <brian@roadie.io>

* prettier

Signed-off-by: Brian Fletcher <brian@roadie.io>

---------

Signed-off-by: Brian Fletcher <brian@roadie.io>
Co-authored-by: Sam Blausten <sam@roadie.io>
This commit is contained in:
Brian Fletcher
2023-03-14 19:44:18 +00:00
committed by GitHub
parent aa4b436825
commit 83d250badc
3 changed files with 47 additions and 1 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes-backend': patch
---
Fix parsing error when kubernetes api is returning badly structured data.
@@ -502,6 +502,47 @@ describe('getKubernetesObjectsByEntity', () => {
});
});
it('pods api is returning garbage', async () => {
getClustersByEntity.mockImplementation(() =>
Promise.resolve({
clusters: [
{
name: 'test-cluster',
authProvider: 'serviceAccount',
},
],
}),
);
fetchObjectsForService.mockImplementation((_: ObjectFetchParams) =>
Promise.resolve({
errors: [],
responses: [
{
garbage: ['thrash', 'rubbish'],
},
],
}),
);
mockMetrics(fetchPodMetricsByNamespaces);
const sut = getKubernetesFanOutHandler([]);
const result = await sut.getKubernetesObjectsByEntity({
entity,
auth: {},
});
expect(getClustersByEntity.mock.calls.length).toBe(1);
expect(fetchObjectsForService.mock.calls.length).toBe(1);
expect(fetchPodMetricsByNamespaces.mock.calls.length).toBe(0);
expect(result).toStrictEqual({
items: [],
});
});
it('retrieve objects for two clusters', async () => {
getClustersByEntity.mockImplementation(() =>
Promise.resolve({
@@ -324,7 +324,7 @@ export class KubernetesFanOutHandler {
(item.errors !== undefined && item.errors.length >= 1) ||
(item.resources !== undefined &&
item.resources.length >= 1 &&
item.resources.some(fr => fr.resources.length >= 1)),
item.resources.some(fr => fr.resources?.length >= 1)),
),
};
}