add test for initial error matcher

This commit is contained in:
Nick Fyson
2020-09-07 22:50:37 +01:00
parent 7dbaff09b6
commit 3e6d23928b
8 changed files with 95 additions and 16 deletions

33
src/error_matcher.test.ts Normal file
View File

@@ -0,0 +1,33 @@
import test from 'ava';
import { namedMatchersForTesting } from './error_matcher';
/*
NB We test the regexes for all the matchers against example log output snippets.
*/
test('noSourceCodeFound matches against example javascript output', async t => {
t.assert(testErrorMatcher("noSourceCodeFound", `
2020-09-07T17:39:53.9050522Z [2020-09-07 17:39:53] [build] Done extracting /opt/hostedtoolcache/CodeQL/0.0.0-20200630/x64/codeql/javascript/tools/data/externs/web/ie_vml.js (3 ms)
2020-09-07T17:39:53.9051849Z [2020-09-07 17:39:53] [build-err] No JavaScript or TypeScript code found.
2020-09-07T17:39:53.9052444Z [2020-09-07 17:39:53] [build-err] No JavaScript or TypeScript code found.
2020-09-07T17:39:53.9251124Z [2020-09-07 17:39:53] [ERROR] Spawned process exited abnormally (code 255; tried to run: [/opt/hostedtoolcache/CodeQL/0.0.0-20200630/x64/codeql/javascript/tools/autobuild.sh])
`));
});
function testErrorMatcher(matcherName: string, logSample: string): boolean {
const regex = namedMatchersForTesting[matcherName] ? namedMatchersForTesting[matcherName][1] : null;
if (regex) {
return regex.test(logSample);
} else {
if (namedMatchersForTesting[matcherName]) {
throw new Error(`Cannot test matcher ${matcherName} with null regex`);
} else {
throw new Error(`Unknown matcher ${matcherName}`);
}
}
}

View File

@@ -1,19 +1,19 @@
export type ErrorMatcher = [number|null, RegExp|null, string];
const namedMatchers: { [key: string]: ErrorMatcher } = {
// exported only for testing purposes
export const namedMatchersForTesting: { [key: string]: ErrorMatcher } = {
/*
In due course it may be possible to remove the regex, if/when javascript also exits with code 32.
For context see https://github.com/github/semmle-code/pull/36921
*/
noSourceCodeFound: [
32,
null,
`No source code was seen during the build. Please see...
https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/troubleshooting-code-scanning#no-code-found-during-the-build`
],
noSourceCodeFoundJavascript: [
null,
new RegExp("No JavaScript or TypeScript code found\\."),
`No source code was seen during the build. Please see...
https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/troubleshooting-code-scanning#no-code-found-during-the-build`
]
],
};
export const errorMatchers = Object.values(namedMatchers);
// we collapse the matches into an array for use in exec_wrapper
export const errorMatchers = Object.values(namedMatchersForTesting);