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:
@@ -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)),
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user