Skip to content

Commit 26de1ac

Browse files
Update execution service (#37)
* Update execution service
1 parent d96e323 commit 26de1ac

File tree

5 files changed

+66
-52
lines changed

5 files changed

+66
-52
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ jobs:
66
runs-on: ubuntu-latest
77
steps:
88
- uses: actions/checkout@v2
9-
- name: Use Node.js 12
9+
- name: Use Node.js 10
1010
uses: actions/setup-node@v2
1111
with:
12-
node-version: 12
12+
node-version: 10
1313
registry-url: https://npm.pkg.github.com/
1414
- run: npm ci
1515
- run: npm run build --if-present

jest.setup.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
jest.setTimeout(3600000);// in milliseconds
1+
jest.setTimeout(36000000);// in milliseconds

src/main/wrapper/ExecutionService.ts

Lines changed: 46 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -33,49 +33,60 @@ function transform(n:string) {
3333
export class ExecutionService {
3434
executeCommands(pathToExecutable: string, commands: string[], output? : string ): Promise<CxCommandOutput> {
3535
return new Promise(function (resolve, reject) {
36-
let stderr = '';
37-
let cxCommandOutput = new CxCommandOutput();
38-
let output_string ="";
39-
commands = transformation(commands);
40-
const cp = spawn(pathToExecutable, commands);
41-
cp.stderr.on('data', function (chunk: string) {
42-
stderr += chunk;
36+
let stderr = "";
37+
let stdout ="";
38+
39+
let cp = spawn(pathToExecutable, transformation(commands));
40+
cp.on('error', reject);
41+
cp.on('exit',(code: number, signal: any) => {
42+
logger.info("Exit code received from AST-CLI: " + code);
43+
resolve(ExecutionService.onCloseCommand(code, stderr, stdout, output ));
4344
});
44-
cp.on('error', reject)
45-
.on('close', function (code: number) {
46-
cxCommandOutput.exitCode = code;
47-
cxCommandOutput.status = stderr;
48-
logger.info("Exit code received from AST-CLI: " + code);
49-
logger.info(stderr);
50-
resolve(cxCommandOutput);
51-
});
52-
cp.stdout.on('data', (data: any) => {
45+
cp.stdout.on('data', (data: { toString: () => string; }) => {
5346
if (data) {
54-
output_string+=data;
47+
logger.info(data.toString().replace('\n', ''));
48+
stdout += data.toString();
5549
}
5650
});
57-
cp.stdout.on('close', (data: any) => {
58-
logger.info(`${output_string.toString().trim()}`);
59-
// Check if the json is valid
60-
if (isJsonString(output_string.toString())) {
61-
let resultObject = JSON.parse(output_string.toString().split('\n')[0]);
62-
switch(output){
63-
case 'CxScan':
64-
let scans = CxScan.parseProject(resultObject)
65-
cxCommandOutput.payload = scans;
66-
break;
67-
case 'CxProject':
68-
let projects = CxProject.parseProject(resultObject)
69-
cxCommandOutput.payload = projects;
70-
break;
71-
default:
72-
cxCommandOutput.payload = resultObject;
73-
}
74-
}
51+
cp.stderr.on('data', (data: { toString: () => string; }) => {
52+
if (data) {
53+
logger.error(data.toString().replace('\n', ''));
54+
stderr += data.toString();
55+
}
7556
});
7657
});
7758
}
7859

60+
private static onCloseCommand(code: number, stderr: string, stdout: string, output: string) : CxCommandOutput {
61+
const cxCommandOutput = new CxCommandOutput();
62+
cxCommandOutput.exitCode = code;
63+
if (stderr) {
64+
cxCommandOutput.status = stderr;
65+
}
66+
if (stdout) {
67+
const stdoutSplit = stdout.split('\n');
68+
const data = stdoutSplit.find(isJsonString);
69+
70+
if (data) {
71+
let resultObject = JSON.parse(data);
72+
switch(output){
73+
case 'CxScan':
74+
let scans = CxScan.parseProject(resultObject)
75+
cxCommandOutput.payload = scans;
76+
break;
77+
case 'CxProject':
78+
let projects = CxProject.parseProject(resultObject)
79+
cxCommandOutput.payload = projects;
80+
break;
81+
default:
82+
cxCommandOutput.payload = resultObject;
83+
}
84+
}
85+
}
86+
87+
return cxCommandOutput;
88+
}
89+
7990
executeResultsCommands(pathToExecutable: string, commands: string[]): Promise<CxCommandOutput> {
8091
return new Promise(function (resolve, reject) {
8192
let stderr = '';

src/tests/ProjectTest.test.ts

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {CxWrapper} from '../main/wrapper/CxWrapper';
22
import {CxCommandOutput} from "../main/wrapper/CxCommandOutput";
33
import {BaseTest} from "./BaseTest";
44
import {CxParamType} from "../main/wrapper/CxParamType";
5+
import CxScan from "../main/scan/CxScan";
56

67
describe("ProjectList cases",() => {
78
const cxScanConfig = new BaseTest();
@@ -18,13 +19,13 @@ describe("ProjectList cases",() => {
1819
params.set(CxParamType.S, "./src");
1920
params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*");
2021
params.set(CxParamType.BRANCH, "master");
21-
let auth = new CxWrapper(cxScanConfig);
22-
let data = await auth.scanCreate(params);
23-
let cxCommandOutput: CxCommandOutput = data;
24-
let ScanObject = cxCommandOutput.payload.pop();
25-
cxCommandOutput = await auth.projectShow(ScanObject.projectID);
26-
console.log(" Json object from ProjectShow Successful case: " + JSON.stringify(cxCommandOutput));
27-
expect(cxCommandOutput.payload.length).toBeGreaterThan(0);
22+
const auth = new CxWrapper(cxScanConfig);
23+
const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params);
24+
const scan: CxScan = cxCommandOutput.payload.pop();
25+
26+
const cxProjectCommandOutput: CxCommandOutput = await auth.projectShow(scan.projectID);
27+
console.log(" Json object from ProjectShow Successful case: " + JSON.stringify(cxProjectCommandOutput));
28+
expect(cxProjectCommandOutput.payload.length).toBeGreaterThan(0);
2829
});
2930

3031
it('ProjectBranches Successful case',async () =>{
@@ -33,12 +34,12 @@ describe("ProjectList cases",() => {
3334
params.set(CxParamType.S, "./src");
3435
params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*");
3536
params.set(CxParamType.BRANCH, "master");
36-
let auth = new CxWrapper(cxScanConfig);
37-
let data = await auth.scanCreate(params);
38-
let cxCommandOutput: CxCommandOutput = data;
39-
let ScanObject = cxCommandOutput.payload.pop();
40-
cxCommandOutput = await auth.projectBranches(ScanObject.projectID,"");
41-
console.log("Json object from projectBranches Successful case: " + JSON.stringify(cxCommandOutput))
42-
expect(cxCommandOutput.payload.length).toBeGreaterThan(0);
37+
const auth = new CxWrapper(cxScanConfig);
38+
const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params);
39+
const scan: CxScan = cxCommandOutput.payload.pop();
40+
41+
const cxProjectCommandOutput: CxCommandOutput = await auth.projectBranches(scan.projectID,"");
42+
console.log("Json object from projectBranches Successful case: " + JSON.stringify(cxProjectCommandOutput))
43+
expect(cxProjectCommandOutput.payload.length).toBeGreaterThan(0);
4344
});
4445
});

src/tests/ScanTest.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ describe("ScanCreate cases",() => {
99
const auth = new CxWrapper(cxScanConfig);
1010
const cxCommandOutput: CxCommandOutput = await auth.scanList("");
1111
console.log(" Json object from scanList successful case: " + JSON.stringify(cxCommandOutput));
12+
expect(cxCommandOutput.payload.length).toBeGreaterThan(1);
1213
expect(cxCommandOutput.exitCode).toBe(0);
1314
});
1415

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

0 commit comments

Comments
 (0)