feat: add option to set body size limit in code-coverage-backend

Signed-off-by: Anton Ganhammar <ganhammar@gmail.com>
This commit is contained in:
Anton Ganhammar
2023-09-17 11:15:02 +02:00
parent 8cc2b97796
commit edfee8ba8a
2 changed files with 58 additions and 3 deletions
@@ -41,6 +41,7 @@ CodeCoverageDatabase.create = jest.fn(
},
}),
getHistory: async () => ({}),
insertCodeCoverage: async () => undefined,
} as any),
);
@@ -50,7 +51,13 @@ jest.mock('@backstage/catalog-client', () => ({
CatalogClient: jest.fn().mockImplementation(() => ({
getEntityByRef: async (_: string, options: CatalogRequestOptions) => {
catalogRequestOptions = options;
return {};
return {
metadata: {
annotations: {
'backstage.io/code-coverage': 'enabled',
},
},
};
},
})),
}));
@@ -129,4 +136,41 @@ describe('createRouter', () => {
});
});
});
describe('POST /report', () => {
it('returns created when body does not exceed limit', async () => {
const response = await request(app)
.post('/report?entity=component:default/mycomponent&coverageType=lcov')
.set('Content-Type', 'text/plain')
.send(
'TN:\nSF:/src/index.js\nFNF:0\nFNH:0\nLF:1\nLH:1\nBRF:0\nBRH:0\nend_of_record',
);
expect(response.status).toBe(201);
});
it('returns content too large when body exceeds limit', async () => {
const router = await createRouter({
config: new ConfigReader({
codeCoverage: {
bodySizeLimit: '1b',
},
}),
database: createDatabase(),
discovery: testDiscovery,
urlReader: mockUrlReader,
logger: getVoidLogger(),
});
app = express().use(router);
const response = await request(app)
.post('/report?entity=component:default/mycomponent&coverageType=lcov')
.set('Content-Type', 'text/plain')
.send(
'TN:\nSF:/src/index.js\nFNF:0\nFNH:0\nLF:1\nLH:1\nBRF:0\nBRH:0\nend_of_record',
);
expect(response.status).toBe(413);
});
});
});
@@ -64,10 +64,21 @@ export const makeRouter = async (
options.catalogApi ?? new CatalogClient({ discoveryApi: discovery });
const scm = ScmIntegrations.fromConfig(config);
const bodySizeLimit =
config.getOptionalString('codeCoverage.bodySizeLimit') ?? '100kb';
bodyParserXml(BodyParser);
const router = Router();
router.use(BodyParser.xml());
router.use(BodyParser.text());
router.use(
BodyParser.xml({
limit: bodySizeLimit,
}),
);
router.use(
BodyParser.text({
limit: bodySizeLimit,
}),
);
router.use(express.json());
const utils = new CoverageUtils(scm, urlReader);