Merge pull request #19980 from ganhammar/feat/add-body-size-limit-option-to-code-coverage-backend

Feat/add body size limit option to code coverage backend
This commit is contained in:
Johan Haals
2023-09-21 15:53:54 +02:00
committed by GitHub
4 changed files with 72 additions and 3 deletions
+9
View File
@@ -235,3 +235,12 @@ Example
]
}
```
### Configuration
Configure the plugin in your `app-config.yaml`:
```yaml
codeCoverage:
bodySizeLimit: 100kb # Defaults to 100kb, see https://www.npmjs.com/package/body-parser#limit
```
@@ -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);