Add regression test
This commit is contained in:
parent
1653364141
commit
9085295c40
3 changed files with 113 additions and 43 deletions
68
lib/init-action-post-helper.test.js
generated
68
lib/init-action-post-helper.test.js
generated
|
|
@ -79,21 +79,7 @@ const workflow = __importStar(require("./workflow"));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
(0, ava_1.default)("uploads failed SARIF run for typical workflow", async (t) => {
|
(0, ava_1.default)("uploads failed SARIF run for typical workflow", async (t) => {
|
||||||
const config = {
|
const actionsWorkflow = {
|
||||||
codeQLCmd: "codeql",
|
|
||||||
debugMode: true,
|
|
||||||
languages: [],
|
|
||||||
packs: [],
|
|
||||||
};
|
|
||||||
const messages = [];
|
|
||||||
process.env["GITHUB_JOB"] = "analyze";
|
|
||||||
process.env["GITHUB_WORKSPACE"] =
|
|
||||||
"/home/runner/work/codeql-action/codeql-action";
|
|
||||||
sinon.stub(actionsUtil, "getRequiredInput").withArgs("matrix").returns("{}");
|
|
||||||
const codeqlObject = await codeql.getCodeQLForTesting();
|
|
||||||
sinon.stub(codeql, "getCodeQL").resolves(codeqlObject);
|
|
||||||
const diagnosticsExportStub = sinon.stub(codeqlObject, "diagnosticsExport");
|
|
||||||
sinon.stub(workflow, "getWorkflow").resolves({
|
|
||||||
name: "CodeQL",
|
name: "CodeQL",
|
||||||
on: {
|
on: {
|
||||||
push: {
|
push: {
|
||||||
|
|
@ -129,16 +115,60 @@ const workflow = __importStar(require("./workflow"));
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
};
|
||||||
|
await testFailedSarifUpload(t, actionsWorkflow, { category: "my-category" });
|
||||||
|
});
|
||||||
|
(0, ava_1.default)("uploading failed SARIF run fails when workflow does not reference github/codeql-action", async (t) => {
|
||||||
|
const actionsWorkflow = {
|
||||||
|
name: "CodeQL",
|
||||||
|
on: {
|
||||||
|
push: {
|
||||||
|
branches: ["main"],
|
||||||
|
},
|
||||||
|
pull_request: {
|
||||||
|
branches: ["main"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
jobs: {
|
||||||
|
analyze: {
|
||||||
|
name: "CodeQL Analysis",
|
||||||
|
"runs-on": "ubuntu-latest",
|
||||||
|
steps: [
|
||||||
|
{
|
||||||
|
name: "Checkout repository",
|
||||||
|
uses: "actions/checkout@v3",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
await t.throwsAsync(async () => await testFailedSarifUpload(t, actionsWorkflow));
|
||||||
|
});
|
||||||
|
async function testFailedSarifUpload(t, actionsWorkflow, { category } = {}) {
|
||||||
|
const config = {
|
||||||
|
codeQLCmd: "codeql",
|
||||||
|
debugMode: true,
|
||||||
|
languages: [],
|
||||||
|
packs: [],
|
||||||
|
};
|
||||||
|
const messages = [];
|
||||||
|
process.env["GITHUB_JOB"] = "analyze";
|
||||||
|
process.env["GITHUB_WORKSPACE"] =
|
||||||
|
"/home/runner/work/codeql-action/codeql-action";
|
||||||
|
sinon.stub(actionsUtil, "getRequiredInput").withArgs("matrix").returns("{}");
|
||||||
|
const codeqlObject = await codeql.getCodeQLForTesting();
|
||||||
|
sinon.stub(codeql, "getCodeQL").resolves(codeqlObject);
|
||||||
|
const diagnosticsExportStub = sinon.stub(codeqlObject, "diagnosticsExport");
|
||||||
|
sinon.stub(workflow, "getWorkflow").resolves(actionsWorkflow);
|
||||||
const uploadFromActions = sinon.stub(uploadLib, "uploadFromActions");
|
const uploadFromActions = sinon.stub(uploadLib, "uploadFromActions");
|
||||||
uploadFromActions.resolves({ sarifID: "42" });
|
uploadFromActions.resolves({ sarifID: "42" });
|
||||||
const waitForProcessing = sinon.stub(uploadLib, "waitForProcessing");
|
const waitForProcessing = sinon.stub(uploadLib, "waitForProcessing");
|
||||||
await initActionPostHelper.uploadFailedSarif(config, (0, repository_1.parseRepositoryNwo)("github/codeql-action"), (0, testing_utils_1.createFeatures)([feature_flags_1.Feature.UploadFailedSarifEnabled]), (0, testing_utils_1.getRecordingLogger)(messages));
|
await initActionPostHelper.uploadFailedSarif(config, (0, repository_1.parseRepositoryNwo)("github/codeql-action"), (0, testing_utils_1.createFeatures)([feature_flags_1.Feature.UploadFailedSarifEnabled]), (0, testing_utils_1.getRecordingLogger)(messages));
|
||||||
t.deepEqual(messages, []);
|
t.deepEqual(messages, []);
|
||||||
t.true(diagnosticsExportStub.calledOnceWith(sinon.match.string, "my-category"));
|
t.true(diagnosticsExportStub.calledOnceWith(sinon.match.string, category), `Actual args were: ${diagnosticsExportStub.args}`);
|
||||||
t.true(uploadFromActions.calledOnceWith(sinon.match.string, sinon.match.string, "my-category", sinon.match.any));
|
t.true(uploadFromActions.calledOnceWith(sinon.match.string, sinon.match.string, category, sinon.match.any), `Actual args were: ${uploadFromActions.args}`);
|
||||||
t.true(waitForProcessing.calledOnceWith(sinon.match.any, "42", sinon.match.any, {
|
t.true(waitForProcessing.calledOnceWith(sinon.match.any, "42", sinon.match.any, {
|
||||||
isUnsuccessfulExecution: true,
|
isUnsuccessfulExecution: true,
|
||||||
}));
|
}));
|
||||||
});
|
}
|
||||||
//# sourceMappingURL=init-action-post-helper.test.js.map
|
//# sourceMappingURL=init-action-post-helper.test.js.map
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,4 +1,4 @@
|
||||||
import test from "ava";
|
import test, { ExecutionContext } from "ava";
|
||||||
import * as sinon from "sinon";
|
import * as sinon from "sinon";
|
||||||
|
|
||||||
import * as actionsUtil from "./actions-util";
|
import * as actionsUtil from "./actions-util";
|
||||||
|
|
@ -86,23 +86,7 @@ test("post: init action with debug mode on", async (t) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("uploads failed SARIF run for typical workflow", async (t) => {
|
test("uploads failed SARIF run for typical workflow", async (t) => {
|
||||||
const config = {
|
const actionsWorkflow: workflow.Workflow = {
|
||||||
codeQLCmd: "codeql",
|
|
||||||
debugMode: true,
|
|
||||||
languages: [],
|
|
||||||
packs: [],
|
|
||||||
} as unknown as configUtils.Config;
|
|
||||||
const messages = [];
|
|
||||||
process.env["GITHUB_JOB"] = "analyze";
|
|
||||||
process.env["GITHUB_WORKSPACE"] =
|
|
||||||
"/home/runner/work/codeql-action/codeql-action";
|
|
||||||
sinon.stub(actionsUtil, "getRequiredInput").withArgs("matrix").returns("{}");
|
|
||||||
|
|
||||||
const codeqlObject = await codeql.getCodeQLForTesting();
|
|
||||||
sinon.stub(codeql, "getCodeQL").resolves(codeqlObject);
|
|
||||||
const diagnosticsExportStub = sinon.stub(codeqlObject, "diagnosticsExport");
|
|
||||||
|
|
||||||
sinon.stub(workflow, "getWorkflow").resolves({
|
|
||||||
name: "CodeQL",
|
name: "CodeQL",
|
||||||
on: {
|
on: {
|
||||||
push: {
|
push: {
|
||||||
|
|
@ -138,7 +122,61 @@ test("uploads failed SARIF run for typical workflow", async (t) => {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
};
|
||||||
|
await testFailedSarifUpload(t, actionsWorkflow, { category: "my-category" });
|
||||||
|
});
|
||||||
|
|
||||||
|
test("uploading failed SARIF run fails when workflow does not reference github/codeql-action", async (t) => {
|
||||||
|
const actionsWorkflow: workflow.Workflow = {
|
||||||
|
name: "CodeQL",
|
||||||
|
on: {
|
||||||
|
push: {
|
||||||
|
branches: ["main"],
|
||||||
|
},
|
||||||
|
pull_request: {
|
||||||
|
branches: ["main"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
jobs: {
|
||||||
|
analyze: {
|
||||||
|
name: "CodeQL Analysis",
|
||||||
|
"runs-on": "ubuntu-latest",
|
||||||
|
steps: [
|
||||||
|
{
|
||||||
|
name: "Checkout repository",
|
||||||
|
uses: "actions/checkout@v3",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
await t.throwsAsync(
|
||||||
|
async () => await testFailedSarifUpload(t, actionsWorkflow)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
async function testFailedSarifUpload(
|
||||||
|
t: ExecutionContext<unknown>,
|
||||||
|
actionsWorkflow: workflow.Workflow,
|
||||||
|
{ category }: { category?: string } = {}
|
||||||
|
): Promise<void> {
|
||||||
|
const config = {
|
||||||
|
codeQLCmd: "codeql",
|
||||||
|
debugMode: true,
|
||||||
|
languages: [],
|
||||||
|
packs: [],
|
||||||
|
} as unknown as configUtils.Config;
|
||||||
|
const messages = [];
|
||||||
|
process.env["GITHUB_JOB"] = "analyze";
|
||||||
|
process.env["GITHUB_WORKSPACE"] =
|
||||||
|
"/home/runner/work/codeql-action/codeql-action";
|
||||||
|
sinon.stub(actionsUtil, "getRequiredInput").withArgs("matrix").returns("{}");
|
||||||
|
|
||||||
|
const codeqlObject = await codeql.getCodeQLForTesting();
|
||||||
|
sinon.stub(codeql, "getCodeQL").resolves(codeqlObject);
|
||||||
|
const diagnosticsExportStub = sinon.stub(codeqlObject, "diagnosticsExport");
|
||||||
|
|
||||||
|
sinon.stub(workflow, "getWorkflow").resolves(actionsWorkflow);
|
||||||
|
|
||||||
const uploadFromActions = sinon.stub(uploadLib, "uploadFromActions");
|
const uploadFromActions = sinon.stub(uploadLib, "uploadFromActions");
|
||||||
uploadFromActions.resolves({ sarifID: "42" } as uploadLib.UploadResult);
|
uploadFromActions.resolves({ sarifID: "42" } as uploadLib.UploadResult);
|
||||||
|
|
@ -152,19 +190,21 @@ test("uploads failed SARIF run for typical workflow", async (t) => {
|
||||||
);
|
);
|
||||||
t.deepEqual(messages, []);
|
t.deepEqual(messages, []);
|
||||||
t.true(
|
t.true(
|
||||||
diagnosticsExportStub.calledOnceWith(sinon.match.string, "my-category")
|
diagnosticsExportStub.calledOnceWith(sinon.match.string, category),
|
||||||
|
`Actual args were: ${diagnosticsExportStub.args}`
|
||||||
);
|
);
|
||||||
t.true(
|
t.true(
|
||||||
uploadFromActions.calledOnceWith(
|
uploadFromActions.calledOnceWith(
|
||||||
sinon.match.string,
|
sinon.match.string,
|
||||||
sinon.match.string,
|
sinon.match.string,
|
||||||
"my-category",
|
category,
|
||||||
sinon.match.any
|
sinon.match.any
|
||||||
)
|
),
|
||||||
|
`Actual args were: ${uploadFromActions.args}`
|
||||||
);
|
);
|
||||||
t.true(
|
t.true(
|
||||||
waitForProcessing.calledOnceWith(sinon.match.any, "42", sinon.match.any, {
|
waitForProcessing.calledOnceWith(sinon.match.any, "42", sinon.match.any, {
|
||||||
isUnsuccessfulExecution: true,
|
isUnsuccessfulExecution: true,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
});
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue