Skip to content
Merged
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js 12
- name: Use Node.js 10
uses: actions/setup-node@v2
with:
node-version: 12
node-version: 10
registry-url: https://npm.pkg.github.com/
- run: npm ci
- run: npm run build --if-present
Expand Down
2 changes: 1 addition & 1 deletion jest.setup.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
jest.setTimeout(3600000);// in milliseconds
jest.setTimeout(36000000);// in milliseconds
81 changes: 46 additions & 35 deletions src/main/wrapper/ExecutionService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,49 +33,60 @@ function transform(n:string) {
export class ExecutionService {
executeCommands(pathToExecutable: string, commands: string[], output? : string ): Promise<CxCommandOutput> {
return new Promise(function (resolve, reject) {
let stderr = '';
let cxCommandOutput = new CxCommandOutput();
let output_string ="";
commands = transformation(commands);
const cp = spawn(pathToExecutable, commands);
cp.stderr.on('data', function (chunk: string) {
stderr += chunk;
let stderr = "";
let stdout ="";

let cp = spawn(pathToExecutable, transformation(commands));
cp.on('error', reject);
cp.on('exit',(code: number, signal: any) => {
logger.info("Exit code received from AST-CLI: " + code);
resolve(ExecutionService.onCloseCommand(code, stderr, stdout, output ));
});
cp.on('error', reject)
.on('close', function (code: number) {
cxCommandOutput.exitCode = code;
cxCommandOutput.status = stderr;
logger.info("Exit code received from AST-CLI: " + code);
logger.info(stderr);
resolve(cxCommandOutput);
});
cp.stdout.on('data', (data: any) => {
cp.stdout.on('data', (data: { toString: () => string; }) => {
if (data) {
output_string+=data;
logger.info(data.toString().replace('\n', ''));
stdout += data.toString();
}
});
cp.stdout.on('close', (data: any) => {
logger.info(`${output_string.toString().trim()}`);
// Check if the json is valid
if (isJsonString(output_string.toString())) {
let resultObject = JSON.parse(output_string.toString().split('\n')[0]);
switch(output){
case 'CxScan':
let scans = CxScan.parseProject(resultObject)
cxCommandOutput.payload = scans;
break;
case 'CxProject':
let projects = CxProject.parseProject(resultObject)
cxCommandOutput.payload = projects;
break;
default:
cxCommandOutput.payload = resultObject;
}
}
cp.stderr.on('data', (data: { toString: () => string; }) => {
if (data) {
logger.error(data.toString().replace('\n', ''));
stderr += data.toString();
}
});
});
}

private static onCloseCommand(code: number, stderr: string, stdout: string, output: string) : CxCommandOutput {
const cxCommandOutput = new CxCommandOutput();
cxCommandOutput.exitCode = code;
if (stderr) {
cxCommandOutput.status = stderr;
}
if (stdout) {
const stdoutSplit = stdout.split('\n');
const data = stdoutSplit.find(isJsonString);

if (data) {
let resultObject = JSON.parse(data);
switch(output){
case 'CxScan':
let scans = CxScan.parseProject(resultObject)
cxCommandOutput.payload = scans;
break;
case 'CxProject':
let projects = CxProject.parseProject(resultObject)
cxCommandOutput.payload = projects;
break;
default:
cxCommandOutput.payload = resultObject;
}
}
}

return cxCommandOutput;
}

executeResultsCommands(pathToExecutable: string, commands: string[]): Promise<CxCommandOutput> {
return new Promise(function (resolve, reject) {
let stderr = '';
Expand Down
29 changes: 15 additions & 14 deletions src/tests/ProjectTest.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {CxWrapper} from '../main/wrapper/CxWrapper';
import {CxCommandOutput} from "../main/wrapper/CxCommandOutput";
import {BaseTest} from "./BaseTest";
import {CxParamType} from "../main/wrapper/CxParamType";
import CxScan from "../main/scan/CxScan";

describe("ProjectList cases",() => {
const cxScanConfig = new BaseTest();
Expand All @@ -18,13 +19,13 @@ describe("ProjectList cases",() => {
params.set(CxParamType.S, "./src");
params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*");
params.set(CxParamType.BRANCH, "master");
let auth = new CxWrapper(cxScanConfig);
let data = await auth.scanCreate(params);
let cxCommandOutput: CxCommandOutput = data;
let ScanObject = cxCommandOutput.payload.pop();
cxCommandOutput = await auth.projectShow(ScanObject.projectID);
console.log(" Json object from ProjectShow Successful case: " + JSON.stringify(cxCommandOutput));
expect(cxCommandOutput.payload.length).toBeGreaterThan(0);
const auth = new CxWrapper(cxScanConfig);
const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params);
const scan: CxScan = cxCommandOutput.payload.pop();

const cxProjectCommandOutput: CxCommandOutput = await auth.projectShow(scan.projectID);
console.log(" Json object from ProjectShow Successful case: " + JSON.stringify(cxProjectCommandOutput));
expect(cxProjectCommandOutput.payload.length).toBeGreaterThan(0);
});

it('ProjectBranches Successful case',async () =>{
Expand All @@ -33,12 +34,12 @@ describe("ProjectList cases",() => {
params.set(CxParamType.S, "./src");
params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*");
params.set(CxParamType.BRANCH, "master");
let auth = new CxWrapper(cxScanConfig);
let data = await auth.scanCreate(params);
let cxCommandOutput: CxCommandOutput = data;
let ScanObject = cxCommandOutput.payload.pop();
cxCommandOutput = await auth.projectBranches(ScanObject.projectID,"");
console.log("Json object from projectBranches Successful case: " + JSON.stringify(cxCommandOutput))
expect(cxCommandOutput.payload.length).toBeGreaterThan(0);
const auth = new CxWrapper(cxScanConfig);
const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params);
const scan: CxScan = cxCommandOutput.payload.pop();

const cxProjectCommandOutput: CxCommandOutput = await auth.projectBranches(scan.projectID,"");
console.log("Json object from projectBranches Successful case: " + JSON.stringify(cxProjectCommandOutput))
expect(cxProjectCommandOutput.payload.length).toBeGreaterThan(0);
});
});
2 changes: 2 additions & 0 deletions src/tests/ScanTest.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ describe("ScanCreate cases",() => {
const auth = new CxWrapper(cxScanConfig);
const cxCommandOutput: CxCommandOutput = await auth.scanList("");
console.log(" Json object from scanList successful case: " + JSON.stringify(cxCommandOutput));
expect(cxCommandOutput.payload.length).toBeGreaterThan(1);
expect(cxCommandOutput.exitCode).toBe(0);
});

Expand Down Expand Up @@ -46,6 +47,7 @@ describe("ScanCreate cases",() => {
params.set(CxParamType.S, "./src");
params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*");
params.set(CxParamType.BRANCH, "master");
params.set(CxParamType.ADDITIONAL_PARAMETERS, "--scan-types sast");
const auth = new CxWrapper(cxScanConfig);
const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params);
const scanObject = cxCommandOutput.payload.pop();
Expand Down