From c5e0da956519dae489b3cca02c89b0f06f043c27 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Tue, 9 Nov 2021 09:27:54 +0000 Subject: [PATCH 01/28] Code refactor, fix in projects and branch list added --- README.md | 6 +- package.json | 2 +- src/main/CxCommandOutput.ts | 6 - src/main/CxParamType.ts | 4 - src/main/CxResultType.ts | 3 - src/main/CxScan.ts | 10 -- src/main/ExecutionService.ts | 82 ----------- src/main/project/CxProject.ts | 8 + src/main/results/CxResult.ts | 14 ++ src/main/results/CxResultType.ts | 4 + src/main/scan/CxScan.ts | 11 ++ src/main/{ => scan}/CxScanConfig.ts | 0 src/main/wrapper/CxCommandOutput.ts | 5 + src/main/wrapper/CxConstants.ts | 40 +++++ src/main/wrapper/CxParamType.ts | 15 ++ src/main/{CxAuth.ts => wrapper/CxWrapper.ts} | 110 +++++++++----- src/main/wrapper/ExecutionService.ts | 143 ++++++++++++++++++ src/main/{ => wrapper}/loggerConfig.ts | 0 src/main/{ => wrapper}/resources/cx-linux | Bin src/main/{ => wrapper}/resources/cx-mac | Bin src/main/{ => wrapper}/resources/cx.exe | Bin src/tests/AuthTest.test.ts | 28 ++++ src/tests/BaseTest.ts | 19 +++ src/tests/CxAuthCall.test.ts | 147 ------------------- src/tests/ProjectTest.test.ts | 45 ++++++ src/tests/ResultTest.test.ts | 55 +++++++ src/tests/ScanTest.test.ts | 77 ++++++++++ tsconfig.json | 4 +- 28 files changed, 541 insertions(+), 297 deletions(-) delete mode 100644 src/main/CxCommandOutput.ts delete mode 100644 src/main/CxParamType.ts delete mode 100644 src/main/CxResultType.ts delete mode 100644 src/main/CxScan.ts delete mode 100644 src/main/ExecutionService.ts create mode 100644 src/main/project/CxProject.ts create mode 100644 src/main/results/CxResult.ts create mode 100644 src/main/results/CxResultType.ts create mode 100644 src/main/scan/CxScan.ts rename src/main/{ => scan}/CxScanConfig.ts (100%) create mode 100644 src/main/wrapper/CxCommandOutput.ts create mode 100644 src/main/wrapper/CxConstants.ts create mode 100644 src/main/wrapper/CxParamType.ts rename src/main/{CxAuth.ts => wrapper/CxWrapper.ts} (57%) create mode 100644 src/main/wrapper/ExecutionService.ts rename src/main/{ => wrapper}/loggerConfig.ts (100%) rename src/main/{ => wrapper}/resources/cx-linux (100%) rename src/main/{ => wrapper}/resources/cx-mac (100%) rename src/main/{ => wrapper}/resources/cx.exe (100%) create mode 100644 src/tests/AuthTest.test.ts create mode 100644 src/tests/BaseTest.ts delete mode 100644 src/tests/CxAuthCall.test.ts create mode 100644 src/tests/ProjectTest.test.ts create mode 100644 src/tests/ResultTest.test.ts create mode 100644 src/tests/ScanTest.test.ts diff --git a/README.md b/README.md index 7f77fc62..185b6f41 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Table of Contents
  1. - About The Project + About The CxProject
  2. Getting Started @@ -26,7 +26,7 @@ -## About The Project +## About The CxProject The Javascript-Wrapper is part of the AST-CLI project that provides a shared infrastructure across the AST projects. It contains technology neutral repository interfaces as well as a metadata model for persisting Javascript classes. @@ -86,7 +86,7 @@ setx PATH_TO_EXECUTABLE {value} Checkmarx - AST Integrations Team -Project Link: [https://github.com/CheckmarxDev/ast-cli-javascript-wrapper](https://github.com/CheckmarxDev/ast-cli-javascript-wrapper) +CxProject Link: [https://github.com/CheckmarxDev/ast-cli-javascript-wrapper](https://github.com/CheckmarxDev/ast-cli-javascript-wrapper) © 2021 Checkmarx Ltd. All Rights Reserved. diff --git a/package.json b/package.json index 74af8dd5..f455d086 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ }, "scripts": { "build": "tsc", - "postbuild": "copyfiles -u 1 src/main/resources/cx* dist/", + "postbuild": "copyfiles -u 1 src/main/wrapper/resources/cx* dist/", "test": "tsc && jest --runInBand" }, "repository": "https://github.com/CheckmarxDev/ast-cli-javascript-wrapper.git", diff --git a/src/main/CxCommandOutput.ts b/src/main/CxCommandOutput.ts deleted file mode 100644 index c2cee508..00000000 --- a/src/main/CxCommandOutput.ts +++ /dev/null @@ -1,6 +0,0 @@ -import CxScan from "./CxScan"; - -export class CxCommandOutput { - exitCode: number = 0; - scanObjectList: CxScan[]; -} \ No newline at end of file diff --git a/src/main/CxParamType.ts b/src/main/CxParamType.ts deleted file mode 100644 index 1e301640..00000000 --- a/src/main/CxParamType.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum CxParamType { - S = "S", V = "V", G = "G", PROJECT_NAME = "PROJECT_NAME", SCAN_TYPES = "SCAN_TYPES", SAST_PRESET_NAME = "SAST_PRESET_NAME", - FILTER = "FILE_FILTER", DIRECTORY = "DIRECTORY", ADDITIONAL_PARAMETERS = "ADDITIONAL_PARAMETERS", AGENT = "AGENT", SOURCES = "FILE_SOURCE", TENANT = "TENANT", BRANCH = "BRANCH" -} \ No newline at end of file diff --git a/src/main/CxResultType.ts b/src/main/CxResultType.ts deleted file mode 100644 index 624c20f3..00000000 --- a/src/main/CxResultType.ts +++ /dev/null @@ -1,3 +0,0 @@ -export enum CxResultType { - LIST = "list", SUMMARY = "summary" -} \ No newline at end of file diff --git a/src/main/CxScan.ts b/src/main/CxScan.ts deleted file mode 100644 index 050c8474..00000000 --- a/src/main/CxScan.ts +++ /dev/null @@ -1,10 +0,0 @@ -export default class CxScan { - ID: string = " "; - ProjectID: string = " "; - Status: string = " "; - CreatedAt: string = " "; - UpdatedAt: string = " "; - Tags: object = {}; - Initiator: string = " "; - Origin: string = " "; -} \ No newline at end of file diff --git a/src/main/ExecutionService.ts b/src/main/ExecutionService.ts deleted file mode 100644 index ed4cfdc3..00000000 --- a/src/main/ExecutionService.ts +++ /dev/null @@ -1,82 +0,0 @@ -import {CxCommandOutput} from "./CxCommandOutput"; -import CxScan from "./CxScan"; -import { logger } from "./loggerConfig"; - -const spawn = require('child_process').spawn; - -function isJsonString(s: string) { - try { - let stringObject = s.split('\n')[0]; - JSON.parse(stringObject); - } catch (e) { - return false; - } - return true; -} - -function transformation(commands: string[]):string[] { - const result:string[] = commands.map(transform); - return result; -} - -function transform(n:string) { - return n.replace(/["']/g, "").replace("/[, ]/g",",") -} - -export class ExecutionService { - executeCommands(pathToExecutable: string, commands: string[]): Promise { - return new Promise(function (resolve, reject) { - let stderr = ''; - let cxCommandOutput = new CxCommandOutput(); - commands = transformation(commands) - const cp = spawn(pathToExecutable, commands); - cp.stderr.on('data', function (chunk: string) { - stderr += chunk; - }); - cp.on('error', reject) - .on('close', function (code: number) { - cxCommandOutput.exitCode = code; - logger.info("Exit code received from AST-CLI: " + code) - resolve(cxCommandOutput) - logger.info(stderr) - }); - cp.stdout.on('data', (data: any) => { - if (data) { - logger.info(`${data.toString().trim()}`); - if (isJsonString(data.toString())) { - let resultObject = JSON.parse(data.toString().split('\n')[0]); - if (resultObject instanceof Array) { - logger.info(JSON.stringify(resultObject)) - cxCommandOutput.scanObjectList = resultObject - } else { - let resultArray: CxScan[] = []; - resultArray.push(resultObject); - cxCommandOutput.scanObjectList = resultArray; - } - } - } - }); - }); - } - executeResultsCommands(pathToExecutable: string, commands: string[]): Promise { - return new Promise(function (resolve, reject) { - let stderr = ''; - let results:string = ''; - const cp = spawn(pathToExecutable, commands); - cp.stderr.on('data', function (chunk: string) { - stderr += chunk; - }); - cp.on('error', reject) - .on('close', function (code: number) { - logger.info("Exit code received from AST-CLI: " + code) - resolve(results) - logger.info(stderr) - }); - cp.stdout.on('data', (data: any) => { - logger.info(`${data}`); - results += data; - }); - }); - } - -} diff --git a/src/main/project/CxProject.ts b/src/main/project/CxProject.ts new file mode 100644 index 00000000..0baa1ac3 --- /dev/null +++ b/src/main/project/CxProject.ts @@ -0,0 +1,8 @@ +export default class CxProject { + ID: string = " "; + Name: string = " "; + CreatedAt: string = " "; + UpdatedAt: string = " "; + Tags: object = {} ; + Groups: any = [] ; +} diff --git a/src/main/results/CxResult.ts b/src/main/results/CxResult.ts new file mode 100644 index 00000000..dc4c4033 --- /dev/null +++ b/src/main/results/CxResult.ts @@ -0,0 +1,14 @@ +export default class CxResult { + type: string = ""; + id: string = ""; + status: string = ""; + state: string = ""; + severity: string = ""; + created: string = ""; + firstFoundAt: string = ""; + foundAt: string = ""; + firstScanId: string = ""; + data: any = {}; + comments: any = {}; + vulnerabilityDetails:any = {}; +} \ No newline at end of file diff --git a/src/main/results/CxResultType.ts b/src/main/results/CxResultType.ts new file mode 100644 index 00000000..3378741e --- /dev/null +++ b/src/main/results/CxResultType.ts @@ -0,0 +1,4 @@ +export enum CxResultType { + LIST = "list", + SUMMARY = "summary" +} \ No newline at end of file diff --git a/src/main/scan/CxScan.ts b/src/main/scan/CxScan.ts new file mode 100644 index 00000000..61c6d52e --- /dev/null +++ b/src/main/scan/CxScan.ts @@ -0,0 +1,11 @@ +export default class CxScan { + ID: string = ""; + ProjectID: string = ""; + Status: string = ""; + CreatedAt: string = ""; + UpdatedAt: string = ""; + Tags: object = {}; + Groups: any =[]; + Initiator: string = ""; + Origin: string = ""; +} \ No newline at end of file diff --git a/src/main/CxScanConfig.ts b/src/main/scan/CxScanConfig.ts similarity index 100% rename from src/main/CxScanConfig.ts rename to src/main/scan/CxScanConfig.ts diff --git a/src/main/wrapper/CxCommandOutput.ts b/src/main/wrapper/CxCommandOutput.ts new file mode 100644 index 00000000..34c378fd --- /dev/null +++ b/src/main/wrapper/CxCommandOutput.ts @@ -0,0 +1,5 @@ +export class CxCommandOutput { + exitCode: number = 0; + payload: any []; + status: string = ""; +} \ No newline at end of file diff --git a/src/main/wrapper/CxConstants.ts b/src/main/wrapper/CxConstants.ts new file mode 100644 index 00000000..1a294822 --- /dev/null +++ b/src/main/wrapper/CxConstants.ts @@ -0,0 +1,40 @@ +export enum CxConstants { + SOURCE = "-s", + VERBOSE = "-v", + PROJECT_NAME = "--project-name", + SCAN_TYPES = "--scan-types", + SAST_PRESET_NAME = "--sast-preset-name", + FILE_FILTER = "--file-filter", + AGENT = "--agent", + BRANCH = "--branch", + BRANCH_NAME = "branch-name=", + CLIENT_ID = "--client-id", + CLIENT_SECRET = "--client-secret", + API_KEY = "--apikey", + TENANT = "--tenant", + BASE_URI = "--base-uri", + BASE_AUTH_URI = "--base-auth-uri", + CMD_AUTH = "auth", + SUB_CMD_VALIDATE = "validate", + CMD_PROJECT = "project", + SUB_CMD_BRANCHES = "branches", + CMD_SCAN = "scan", + SUB_CMD_SHOW = "show", + SUB_CMD_LIST = "list", + SUB_CMD_CREATE = "create", + CMD_RESULT = "result", + FORMAT = "--format", + FORMAT_JSON = "json", + FORMAT_HTML = "html", + FORMAT_JSON_FILE = ".json", + FORMAT_HTML_FILE = ".html", + FORMAT_HTML_CLI = "summaryHTML", + FILTER = "--filter", + SCAN_ID = "--scan-id", + PROJECT_ID = "--project-id", + REPORT_FORMAT = "--report-format", + OUTPUT_NAME = "--output-name", + OUTPUT_PATH = "--output-path", + SCAN_TYPE = "CxScan", + PROJECT_TYPE = "CxProject", +} diff --git a/src/main/wrapper/CxParamType.ts b/src/main/wrapper/CxParamType.ts new file mode 100644 index 00000000..981c714d --- /dev/null +++ b/src/main/wrapper/CxParamType.ts @@ -0,0 +1,15 @@ +export enum CxParamType { + S = "S", + V = "V", + G = "G", + PROJECT_NAME = "PROJECT_NAME", + SCAN_TYPES = "SCAN_TYPES", + SAST_PRESET_NAME = "SAST_PRESET_NAME", + FILTER = "FILE_FILTER", + DIRECTORY = "DIRECTORY", + ADDITIONAL_PARAMETERS = "ADDITIONAL_PARAMETERS", + AGENT = "AGENT", + SOURCES = "FILE_SOURCE", + TENANT = "TENANT", + BRANCH = "BRANCH", +} diff --git a/src/main/CxAuth.ts b/src/main/wrapper/CxWrapper.ts similarity index 57% rename from src/main/CxAuth.ts rename to src/main/wrapper/CxWrapper.ts index ef5a9f58..999293bd 100644 --- a/src/main/CxAuth.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -1,15 +1,18 @@ -import {CxScanConfig} from "./CxScanConfig"; +import {CxScanConfig} from "../scan/CxScanConfig"; import {CxParamType} from "./CxParamType"; +import {CxConstants} from "./CxConstants"; import {ExecutionService} from "./ExecutionService"; import {CxCommandOutput} from "./CxCommandOutput"; +import { logger } from "./loggerConfig"; + import * as fs from "fs" import * as os from "os"; -import * as path from "path"; + type ParamTypeMap = Map; -export class CxAuth { +export class CxWrapper { baseUri: string = ""; clientId: string = ""; clientSecret: string = ""; @@ -20,13 +23,13 @@ export class CxAuth { constructor(cxScanConfig: CxScanConfig) { let path = require("path"); if (cxScanConfig.clientId && cxScanConfig.clientSecret) { - console.log("Received clientId and clientSecret"); + logger.info("Received clientId and clientSecret"); this.clientId = cxScanConfig.clientId; this.clientSecret = cxScanConfig.clientSecret; } else if (cxScanConfig.apiKey) { this.apiKey = cxScanConfig.apiKey; } else { - console.log("Did not receive ClientId/Secret or ApiKey from cli arguments"); + logger.info("Did not receive ClientId/Secret or ApiKey from cli arguments"); } let executablePath: string; @@ -57,34 +60,34 @@ export class CxAuth { initializeCommands(formatRequired: boolean): string[] { const list: string[] = []; if (this.clientId) { - list.push("--client-id"); + list.push(CxConstants.CLIENT_ID); list.push(this.clientId); } if (this.clientSecret) { - list.push("--client-secret"); + list.push(CxConstants.CLIENT_SECRET); list.push(this.clientSecret); } if (this.apiKey) { - list.push("--apikey"); + list.push(CxConstants.API_KEY); list.push(this.apiKey); } if (this.baseUri) { - list.push("--base-uri"); + list.push(CxConstants.BASE_URI); list.push(this.baseUri); } if (this.tenant) { - list.push("--tenant"); + list.push(CxConstants.TENANT); list.push(this.tenant); } if (formatRequired) { - list.push("--format"); - list.push("json"); + list.push(CxConstants.FORMAT); + list.push(CxConstants.FORMAT_JSON); } return list; } async scanCreate(params: ParamTypeMap): Promise { - const commands: string[] = ["scan", "create"]; + const commands: string[] = [CxConstants.CMD_SCAN, CxConstants.SUB_CMD_CREATE]; commands.push(...this.initializeCommands(true)); params.forEach((value: string, key: CxParamType) => { if (key !== CxParamType.ADDITIONAL_PARAMETERS && key.length !== 1 && value) { @@ -95,7 +98,7 @@ export class CxAuth { commands.push(value); } else if (key === CxParamType.ADDITIONAL_PARAMETERS) { let paramList = value.match(/(?:[^\s"]+|"[^"]*")+/g); - console.log("Additional parameters refined: " + paramList) + logger.info("Additional parameters refined: " + paramList) if (paramList) { paramList.forEach((element) => { commands.push(element); @@ -105,80 +108,107 @@ export class CxAuth { }); const exec = new ExecutionService(); - return await exec.executeCommands(this.pathToExecutable, commands); + return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.SCAN_TYPE); } async authValidate(): Promise { - const commands: string[] = ["auth", "validate"]; + const commands: string[] = [CxConstants.CMD_AUTH, CxConstants.SUB_CMD_VALIDATE]; commands.push(...this.initializeCommands(false)); let exec = new ExecutionService(); return await exec.executeCommands(this.pathToExecutable, commands); } async scanShow(id: string): Promise { - const commands: string[] = ["scan", "show", "--scan-id", id]; + const commands: string[] = [CxConstants.CMD_SCAN, CxConstants.SUB_CMD_SHOW, CxConstants.SCAN_ID, id]; commands.push(...this.initializeCommands(true)); const exec = new ExecutionService(); - return await exec.executeCommands(this.pathToExecutable, commands); + return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.SCAN_TYPE); } async scanList(): Promise { - const commands: string[] = ["scan", "list"]; + const commands: string[] = [CxConstants.CMD_SCAN, CxConstants.SUB_CMD_LIST]; commands.push(...this.initializeCommands(true)); const exec = new ExecutionService(); - return await exec.executeCommands(this.pathToExecutable, commands); + return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.SCAN_TYPE); } async projectList(): Promise { - const commands: string[] = ["project", "list"]; + const commands: string[] = [CxConstants.CMD_PROJECT, CxConstants.SUB_CMD_LIST]; commands.push(...this.initializeCommands(true)); const exec = new ExecutionService(); - return await exec.executeCommands(this.pathToExecutable, commands); + return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.PROJECT_TYPE); } - async getResultsList(scanId: string) { - return this.executeResultsCommands(scanId, "json", ".json"); - } + async projectBranches(projectId: string, filters: string): Promise { + // Verify and add possible branch filter by name + const validated_filters = this.filterArguments(filters) + const commands: string[] = [CxConstants.CMD_PROJECT , CxConstants.SUB_CMD_BRANCHES, CxConstants.PROJECT_ID, projectId].concat(validated_filters); + commands.push(...this.initializeCommands(false)); - async getResultsSummary(scanId: string): Promise { - return this.executeResultsCommands(scanId, "summaryHTML", ".html"); + const exec = new ExecutionService(); + return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.PROJECT_TYPE); } - async getResults(scanId: string, resultType:string, outputFileName: string, outputFilePath: string) { - const commands = this.createResultCommand(scanId, resultType, outputFileName, outputFilePath) + async projectShow(projectId: string): Promise { + const commands: string[] = [CxConstants.CMD_PROJECT, CxConstants.SUB_CMD_SHOW, CxConstants.PROJECT_ID,projectId]; + commands.push(...this.initializeCommands(true)); const exec = new ExecutionService(); - return await exec.executeCommands(this.pathToExecutable, commands); + return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.PROJECT_TYPE); } - async executeResultsCommands(scanId: string, resultType: string, fileExtension: string): Promise { + async getResultsList(scanId: string) { + const exec = new ExecutionService(); const fileName = new Date().getTime().toString(); - const commands = this.createResultCommand(scanId, resultType, fileName, os.tmpdir()) + const commands = this.createResultCommand(scanId, CxConstants.FORMAT_JSON, fileName, os.tmpdir()) + // Executes the command and creates a result file + await exec.executeResultsCommands(this.pathToExecutable, commands) + // Reads the result file and retrieves the results + return exec.executeResultsCommandsFile(scanId, CxConstants.FORMAT_JSON, CxConstants.FORMAT_JSON_FILE, commands,this.pathToExecutable,fileName); + } + async getResultsSummary(scanId: string): Promise { const exec = new ExecutionService(); - await exec.executeResultsCommands(this.pathToExecutable, commands) + const fileName = new Date().getTime().toString(); + const commands = this.createResultCommand(scanId, CxConstants.FORMAT_HTML_CLI, fileName, os.tmpdir()); + // Executes the command and creates a result file + await exec.executeResultsCommands(this.pathToExecutable, commands); + // Reads the result file and retrieves the results + return exec.executeResultsCommandsFile(scanId, CxConstants.FORMAT_HTML, CxConstants.FORMAT_HTML_FILE, commands,this.pathToExecutable,fileName); + } - const filePath = path.join(os.tmpdir(), fileName + fileExtension) + async getResults(scanId: string, resultType:string, outputFileName: string, outputFilePath: string) { + const commands = this.createResultCommand(scanId, resultType, outputFileName, outputFilePath) - return fs.readFileSync(filePath,'utf8'); + const exec = new ExecutionService(); + return await exec.executeCommands(this.pathToExecutable, commands); } createResultCommand(scanId: string, reportFormat: string, outputFileName: string, outputPath: string): string[] { - const commands: string[] = ["result", "--scan-id", scanId, "--report-format", reportFormat]; + const commands: string[] = [CxConstants.CMD_RESULT, CxConstants.SCAN_ID, scanId,CxConstants.REPORT_FORMAT , reportFormat]; if (outputFileName) { - commands.push("--output-name") - commands.push(outputFileName) + commands.push(CxConstants.OUTPUT_NAME); + commands.push(outputFileName); } if (outputPath) { - commands.push("--output-path") - commands.push(outputPath) + commands.push(CxConstants.OUTPUT_PATH); + commands.push(outputPath); } commands.push(...this.initializeCommands(false)); return commands; } + + filterArguments(filters:string):string[]{ + let r = []; + if(filters.length>0){ + r.push(CxConstants.FILTER); + r.push(CxConstants.BRANCH_NAME + filters); + } + return r; + } } \ No newline at end of file diff --git a/src/main/wrapper/ExecutionService.ts b/src/main/wrapper/ExecutionService.ts new file mode 100644 index 00000000..87c2cf09 --- /dev/null +++ b/src/main/wrapper/ExecutionService.ts @@ -0,0 +1,143 @@ +import {CxCommandOutput} from "./CxCommandOutput"; +import CxScan from "../scan/CxScan"; +import CxProject from "../project/CxProject"; +import { logger } from "./loggerConfig"; +import * as fs from "fs" +import * as os from "os"; +import * as path from "path"; +import CxResult from "../results/CxResult"; + +const spawn = require('child_process').spawn; + +function isJsonString(s: string) { + try { + let stringObject = s.split('\n')[0]; + JSON.parse(stringObject); + } catch (e) { + return false; + } + return true; +} + +function transformation(commands: string[]):string[] { + const result:string[] = commands.map(transform); + return result; +} + +function transform(n:string) { + return n.replace(/["']/g, "").replace("/[, ]/g",",") +} + +export class ExecutionService { + executeCommands(pathToExecutable: string, commands: string[], output? : string ): Promise { + return new Promise(function (resolve, reject) { + let stderr = ''; + let cxCommandOutput = new CxCommandOutput(); + commands = transformation(commands); + const cp = spawn(pathToExecutable, commands); + cp.stderr.on('data', function (chunk: string) { + stderr += chunk; + }); + 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) => { + if (data) { + logger.info(`${data.toString().trim()}`); + if (isJsonString(data.toString())) { + let resultObject = JSON.parse(data.toString().split('\n')[0]); + // Some cli outputs have array format, must be checked + if (resultObject instanceof Array) { + // Check if there is a specific type for the output and make conversions + switch(output){ + case 'CxScan': + let r = resultObject.map((member)=>{return Object.assign( new CxScan(),member);}) ; + cxCommandOutput.payload = r; + break; + case 'CxProject': + r = resultObject.map((member)=>{return Object.assign( new CxProject(),member);}) ; + cxCommandOutput.payload = r; + break; + default: + logger.info(JSON.stringify(resultObject)); + cxCommandOutput.payload = resultObject; + } + } else { + let resultArray: any [] = []; + // Check if there is a specific type for the output and make conversions + switch(output){ + case 'CxScan': + let r = Object.assign( new CxScan(),resultObject); + resultArray.push(r); + cxCommandOutput.payload = resultArray; + break; + case 'CxProject': + r = Object.assign( new CxProject(),resultObject); + resultArray.push(r); + cxCommandOutput.payload = resultArray; + break; + default: + resultArray.push(resultObject); + cxCommandOutput.payload = resultArray; + } + } + } + } + }); + }); + } + + executeResultsCommands(pathToExecutable: string, commands: string[]): Promise { + return new Promise(function (resolve, reject) { + let stderr = ''; + let cxCommandOutput = new CxCommandOutput(); + const cp = spawn(pathToExecutable, commands); + cp.stderr.on('data', function (chunk: string) { + stderr += chunk; + }); + cp.on('error', reject) + .on('close', function (code: number) { + logger.info("Exit code received from AST-CLI: " + code); + logger.info(stderr); + cxCommandOutput.status = stderr; + cxCommandOutput.exitCode = code; + resolve(cxCommandOutput) + }); + cp.stdout.on('data', (data: any) => { + logger.info(`${data}`); + cxCommandOutput.payload = data; + }); + }); + } + + async executeResultsCommandsFile(scanId: string, resultType: string, fileExtension: string,commands: string[], pathToExecutable: string,fileName:string): Promise { + + const filePath = path.join(os.tmpdir(), fileName + fileExtension) + let read = fs.readFileSync(filePath,'utf8'); + let cxCommandOutput = new CxCommandOutput(); + // Need to check if file output is json or html + if(fileExtension.includes("json")){ + let read_json = JSON.parse(read); + if (read_json.results){ + let r : CxResult[] = read_json.results.map((member:any)=>{return Object.assign( new CxResult(),member);}); + cxCommandOutput.payload = r; + } + else{ + cxCommandOutput.exitCode = 1; + cxCommandOutput.status = "Error in the json file." + } + } + // in case of html output + else{ + let html_arrray:any = [] + html_arrray.push(read) + cxCommandOutput.payload = html_arrray; + } + return cxCommandOutput; + } +} diff --git a/src/main/loggerConfig.ts b/src/main/wrapper/loggerConfig.ts similarity index 100% rename from src/main/loggerConfig.ts rename to src/main/wrapper/loggerConfig.ts diff --git a/src/main/resources/cx-linux b/src/main/wrapper/resources/cx-linux similarity index 100% rename from src/main/resources/cx-linux rename to src/main/wrapper/resources/cx-linux diff --git a/src/main/resources/cx-mac b/src/main/wrapper/resources/cx-mac similarity index 100% rename from src/main/resources/cx-mac rename to src/main/wrapper/resources/cx-mac diff --git a/src/main/resources/cx.exe b/src/main/wrapper/resources/cx.exe similarity index 100% rename from src/main/resources/cx.exe rename to src/main/wrapper/resources/cx.exe diff --git a/src/tests/AuthTest.test.ts b/src/tests/AuthTest.test.ts new file mode 100644 index 00000000..23ab851b --- /dev/null +++ b/src/tests/AuthTest.test.ts @@ -0,0 +1,28 @@ +import {CxWrapper} from '../main/wrapper/CxWrapper'; +import {CxCommandOutput} from "../main/wrapper/CxCommandOutput"; +import {CxScanConfig} from "../main/scan/CxScanConfig"; +import {BaseTest} from "./BaseTest"; + + +describe("Authentication validation",() => { + let cxScanConfig = new BaseTest(); + it('Result authentication successful case', async () => { + const auth = new CxWrapper(cxScanConfig); + const data = await auth.authValidate(); + const cxCommandOutput: CxCommandOutput = data + expect(cxCommandOutput.exitCode).toBe(0); + }); + it('Result authentication failed case', async () => { + let cxScanConfig_fail = new CxScanConfig(); + cxScanConfig_fail.baseUri = process.env["CX_BASE_URI"]; + cxScanConfig_fail.clientId = process.env["CX_CLIENT_ID"]; + cxScanConfig_fail.clientSecret = process.env["CX_CLIENT_SECRET"]; + cxScanConfig_fail.tenant = process.env["CX_TENANT"]; + cxScanConfig_fail.apiKey = ""; + + const auth = new CxWrapper(cxScanConfig); + const data = await auth.authValidate(); + const cxCommandOutput: CxCommandOutput = data; + expect(cxCommandOutput.exitCode).toBe(1); + }); +}); \ No newline at end of file diff --git a/src/tests/BaseTest.ts b/src/tests/BaseTest.ts new file mode 100644 index 00000000..9baa3c9c --- /dev/null +++ b/src/tests/BaseTest.ts @@ -0,0 +1,19 @@ +export class BaseTest { + baseUri: string = ""; + clientId: string = ""; + clientSecret: string = ""; + apiKey: string = ""; + pathToExecutable: string; + tenant: string; + + constructor() { + this.baseUri = process.env["CX_BASE_URI"]; + this.clientId = process.env["CX_CLIENT_ID"]; + this.clientSecret = process.env["CX_CLIENT_SECRET"]; + this.tenant = process.env["CX_TENANT"]; + this.apiKey = process.env["CX_APIKEY"]; + if (process.env["PATH_TO_EXECUTABLE"] !== null && process.env["PATH_TO_EXECUTABLE"] !== undefined) { + this.pathToExecutable = process.env["PATH_TO_EXECUTABLE"]; + } + } +} \ No newline at end of file diff --git a/src/tests/CxAuthCall.test.ts b/src/tests/CxAuthCall.test.ts deleted file mode 100644 index 104ef77b..00000000 --- a/src/tests/CxAuthCall.test.ts +++ /dev/null @@ -1,147 +0,0 @@ -import {CxScanConfig} from '../main/CxScanConfig'; -import {CxAuth} from '../main/CxAuth'; -import {CxParamType} from '../main/CxParamType'; -import {CxCommandOutput} from "../main/CxCommandOutput"; -import * as fs from "fs"; - -let cxScanConfig = new CxScanConfig(); -cxScanConfig.baseUri = process.env["CX_BASE_URI"]; -cxScanConfig.clientId = process.env["CX_CLIENT_ID"]; -cxScanConfig.clientSecret = process.env["CX_CLIENT_SECRET"]; -cxScanConfig.tenant = process.env["CX_TENANT"]; -if(process.env["PATH_TO_EXECUTABLE"] !== null && process.env["PATH_TO_EXECUTABLE"] !== undefined ) { - cxScanConfig.pathToExecutable = process.env["PATH_TO_EXECUTABLE"]; -} - -describe("ScanCreate cases",() => { - it('ScanCreate Successful case wait mode', async () => { - const params = new Map(); - params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); - params.set(CxParamType.S, "./src"); - params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); - - const auth = new CxAuth(cxScanConfig); - const data = await auth.scanCreate(params); - const cxCommandOutput: CxCommandOutput = JSON.parse(JSON.stringify(data)) - const ScanObject = cxCommandOutput.scanObjectList.pop() - const scanShowObject = await auth.scanShow(ScanObject.ID); - console.log(" Json object from successful wait mode case: " + JSON.stringify(scanShowObject)) - expect(scanShowObject.scanObjectList.pop().Status).toEqual("Completed") - }) - - it('ScanCreate Successful case with Branch', async () => { - const params = new Map(); - params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); - params.set(CxParamType.S, "./src"); - params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); - params.set(CxParamType.BRANCH, "master"); - const auth = new CxAuth(cxScanConfig); - - const data = await auth.scanCreate(params); - const cxCommandOutput: CxCommandOutput = JSON.parse(JSON.stringify(data)) - const ScanObject = cxCommandOutput.scanObjectList.pop() - const scanShowObject = await auth.scanShow(ScanObject.ID); - console.log(" Json object from successful wait mode case with branch: " +JSON.stringify(scanShowObject)) - expect(scanShowObject.scanObjectList.pop().Status).toEqual("Completed") - - }) - - it('ScanCreate Failure case', async () => { - const params = new Map(); - params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); - params.set(CxParamType.S, "./src"); - params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); - const auth = new CxAuth(cxScanConfig); - - const data = await auth.scanCreate(params); - const cxCommandOutput: CxCommandOutput = JSON.parse(JSON.stringify(data)) - const ScanObject = cxCommandOutput.scanObjectList.pop() - const scanShowObject = await auth.scanShow(ScanObject.ID); - console.log(" Json object from failure case: " + JSON.stringify(scanShowObject)) - expect(scanShowObject.scanObjectList.pop().Status).toEqual("Failed") - }) - - it('ScanCreate Successful case no wait mode', async () => { - const params = new Map(); - params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-nowait"); - params.set(CxParamType.S, "./src"); - params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); - params.set(CxParamType.ADDITIONAL_PARAMETERS, "--nowait"); - const auth = new CxAuth(cxScanConfig); - - const data = await auth.scanCreate(params); - const cxCommandOutput: CxCommandOutput = JSON.parse(JSON.stringify(data)) - const ScanObject = cxCommandOutput.scanObjectList.pop() - const scanShowObject = await auth.scanShow(ScanObject.ID); - console.log(" Json object from successful no wait mode case: " + JSON.stringify(scanShowObject)) - expect(scanShowObject.scanObjectList.pop().Status).toEqual("Running") - }) - -}); - -describe("ScanList cases",() => { - it('ScanList Successful case', async () => { - const auth = new CxAuth(cxScanConfig); - const data = await auth.scanList(); - const cxCommandOutput: CxCommandOutput = JSON.parse(JSON.stringify(data)) - expect(cxCommandOutput.scanObjectList.length).toBeGreaterThan(0); - }); -}); - -describe("ProjectList cases",() => { - it('ProjectList Successful case', async () => { - const auth = new CxAuth(cxScanConfig); - const data = await auth.projectList(); - const cxCommandOutput: CxCommandOutput = JSON.parse(JSON.stringify(data)) - expect(cxCommandOutput.scanObjectList.length).toBeGreaterThan(0); - }); -}); - -describe("Results cases",() => { - it('Result Test Successful case', async () => { - const auth = new CxAuth(cxScanConfig); - const data = await auth.scanList(); - const cxCommandOutput: CxCommandOutput = JSON.parse(JSON.stringify(data)) - let sampleId = cxCommandOutput.scanObjectList.pop().ID; - await auth.getResults(sampleId,"json","jsonList", ".") - const file = await fileExists("./jsonList.json"); - expect(file).toBe(true); - }); - - it('Result List Successful case', async () => { - const auth = new CxAuth(cxScanConfig); - const data = await auth.scanList(); - const cxCommandOutput: CxCommandOutput = JSON.parse(JSON.stringify(data)) - let sampleId = cxCommandOutput.scanObjectList.pop().ID; - const written = await auth.getResultsList(sampleId) - expect(written.length).toBeGreaterThan(0); - }); - - it('Result summary html file generation successful case', async () => { - const auth = new CxAuth(cxScanConfig); - const data = await auth.scanList(); - const cxCommandOutput: CxCommandOutput = JSON.parse(JSON.stringify(data)) - let sampleId = cxCommandOutput.scanObjectList.pop().ID; - await auth.getResults(sampleId,"summaryHTML","test", ".") - const file = await fileExists("./test.html"); - expect(file).toBe(true); - }); - - it('Result summary html string successful case', async () => { - const auth = new CxAuth(cxScanConfig); - const data = await auth.scanList(); - const cxCommandOutput: CxCommandOutput = JSON.parse(JSON.stringify(data)) - let sampleId = cxCommandOutput.scanObjectList.pop().ID; - const written = await auth.getResultsSummary(sampleId) - expect(written.length).toBeGreaterThan(0); - }); - -}); - -const fileExists = (file:any) => { - return new Promise((resolve) => { - fs.access(file, fs.constants.F_OK, (err) => { - err ? resolve(false) : resolve(true) - }); - }) -} diff --git a/src/tests/ProjectTest.test.ts b/src/tests/ProjectTest.test.ts new file mode 100644 index 00000000..c6d2b5aa --- /dev/null +++ b/src/tests/ProjectTest.test.ts @@ -0,0 +1,45 @@ +import {CxWrapper} from '../main/wrapper/CxWrapper'; +import {CxCommandOutput} from "../main/wrapper/CxCommandOutput"; +import {BaseTest} from "./BaseTest"; +import {CxParamType} from "../main/wrapper/CxParamType"; + +describe("ProjectList cases",() => { + let cxScanConfig = new BaseTest(); + + it('ProjectList Successful case', async () => { + const auth = new CxWrapper(cxScanConfig); + const data = await auth.projectList(); + const cxCommandOutput: CxCommandOutput = data; + expect(cxCommandOutput.payload.length).toBeGreaterThan(0); + }); + + it('ProjectShow Successful case',async () =>{ + const params = new Map(); + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); + params.set(CxParamType.S, "./src"); + params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); + + const auth = new CxWrapper(cxScanConfig); + const data = await auth.scanCreate(params); + let cxCommandOutput: CxCommandOutput = data; + const 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); + }); + + it('ProjectBranches Successful case',async () =>{ + const params = new Map(); + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); + params.set(CxParamType.S, "./src"); + params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); + + const auth = new CxWrapper(cxScanConfig); + const data = await auth.scanCreate(params); + let cxCommandOutput: CxCommandOutput = data; + const 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); + }); +}); \ No newline at end of file diff --git a/src/tests/ResultTest.test.ts b/src/tests/ResultTest.test.ts new file mode 100644 index 00000000..670abf29 --- /dev/null +++ b/src/tests/ResultTest.test.ts @@ -0,0 +1,55 @@ +import {CxWrapper} from '../main/wrapper/CxWrapper'; +import {CxCommandOutput} from "../main/wrapper/CxCommandOutput"; +import {BaseTest} from "./BaseTest"; +import * as fs from "fs"; + + +describe("Results cases",() => { + let cxScanConfig = new BaseTest(); + it('Result Test Successful case', async () => { + const auth = new CxWrapper(cxScanConfig); + const data = await auth.scanList(); + const cxCommandOutput: CxCommandOutput = data + let sampleId = cxCommandOutput.payload.pop().ID; + await auth.getResults(sampleId,"json","jsonList", ".") + const file = await fileExists("./jsonList.json"); + expect(file).toBe(true); + }); + + it('Result List Successful case', async () => { + const auth = new CxWrapper(cxScanConfig); + const data = await auth.scanList(); + const cxCommandOutput: CxCommandOutput = data + let sampleId = cxCommandOutput.payload.pop().ID; + const written = await auth.getResultsList(sampleId) + expect(written.payload.length).toBeGreaterThan(0); + }); + + it('Result summary html file generation successful case', async () => { + const auth = new CxWrapper(cxScanConfig); + const data = await auth.scanList(); + const cxCommandOutput: CxCommandOutput = data + let sampleId = cxCommandOutput.payload.pop().ID; + await auth.getResults(sampleId,"summaryHTML","test", ".") + const file = await fileExists("./test.html"); + expect(file).toBe(true); + }); + + it('Result summary html string successful case', async () => { + const auth = new CxWrapper(cxScanConfig); + const data = await auth.scanList(); + const cxCommandOutput: CxCommandOutput = data + let sampleId = cxCommandOutput.payload.pop().ID; + const written = await auth.getResultsSummary(sampleId) + expect(written.payload.length).toBeGreaterThan(0); + }); + +}); + +const fileExists = (file:any) => { + return new Promise((resolve) => { + fs.access(file, fs.constants.F_OK, (err) => { + err ? resolve(false) : resolve(true) + }); + }) +} \ No newline at end of file diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts new file mode 100644 index 00000000..112712ee --- /dev/null +++ b/src/tests/ScanTest.test.ts @@ -0,0 +1,77 @@ +import {CxWrapper} from '../main/wrapper/CxWrapper'; +import {CxCommandOutput} from "../main/wrapper/CxCommandOutput"; +import {CxParamType} from "../main/wrapper/CxParamType"; +import {BaseTest} from "./BaseTest"; + +describe("ScanCreate cases",() => { + let cxScanConfig = new BaseTest(); + it('ScanCreate Successful case wait mode', async () => { + const params = new Map(); + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); + params.set(CxParamType.S, "./src"); + params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); + + const auth = new CxWrapper(cxScanConfig); + const data = await auth.scanCreate(params); + const cxCommandOutput: CxCommandOutput = data; + const ScanObject = cxCommandOutput.payload.pop(); + const scanShowObject = await auth.scanShow(ScanObject.ID); + console.log(" Json object from successful wait mode case: " + JSON.stringify(scanShowObject)); + expect(scanShowObject.payload.pop().Status).toEqual("Completed"); + }) + + it('ScanCreate Successful case with Branch', async () => { + const params = new Map(); + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); + params.set(CxParamType.S, "./src"); + params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); + params.set(CxParamType.BRANCH, "master"); + const auth = new CxWrapper(cxScanConfig); + + const data = await auth.scanCreate(params); + const cxCommandOutput: CxCommandOutput = data; + const ScanObject = cxCommandOutput.payload.pop(); + const scanShowObject = await auth.scanShow(ScanObject.ID); + console.log(" Json object from successful wait mode case with branch: " +JSON.stringify(scanShowObject)); + expect(scanShowObject.payload.pop().Status).toEqual("Completed"); + + }) + + it('ScanCreate Failure case', async () => { + const params = new Map(); + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); + params.set(CxParamType.S, "./src"); + params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); + const auth = new CxWrapper(cxScanConfig); + + const data = await auth.scanCreate(params); + const cxCommandOutput: CxCommandOutput = data; + const ScanObject = cxCommandOutput.payload.pop(); + const scanShowObject = await auth.scanShow(ScanObject.ID); + console.log(" Json object from failure case: " + JSON.stringify(scanShowObject)); + expect(scanShowObject.payload.pop().Status).toEqual("Failed"); + }) + + it('ScanCreate Successful case no wait mode', async () => { + const params = new Map(); + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-nowait"); + params.set(CxParamType.S, "./src"); + params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); + params.set(CxParamType.ADDITIONAL_PARAMETERS, "--nowait"); + const auth = new CxWrapper(cxScanConfig); + + const data = await auth.scanCreate(params); + const cxCommandOutput: CxCommandOutput = data; + const ScanObject = cxCommandOutput.payload.pop(); + const scanShowObject = await auth.scanShow(ScanObject.ID); + console.log(" Json object from successful no wait mode case: " + JSON.stringify(scanShowObject)) + expect(scanShowObject.payload.pop().Status).toEqual("Running") + }) + + it('ScanList Successful case', async () => { + const auth = new CxWrapper(cxScanConfig); + const data = await auth.scanList(); + const cxCommandOutput: CxCommandOutput = data; + expect(cxCommandOutput.payload.length).toBeGreaterThan(0); + }); +}); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 195671cd..0bcb2d03 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,5 +14,7 @@ "noUnusedLocals": true, "pretty": true }, - "include": ["./src/**/*","./src/main/resources/**/*"] + "include": ["./src/**/*", + "./src/main/wrapper/resources/**/*" + ] } \ No newline at end of file From 2c5cab755f58ea05c17ba3120ba6280009cbb043 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Tue, 9 Nov 2021 17:56:19 +0000 Subject: [PATCH 02/28] merge with master --- .github/workflows/ci.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f869ab7..38a934e0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,10 +6,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Copy executable - run: cp ./src/main/resources/cx-linux /tmp/ - - name: Permissions to executable - run: sudo chmod 777 /tmp/cx-linux - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v2 with: From c82a5a1c257fc8f7ec5d0fe5d96cebbe2196315f Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Tue, 9 Nov 2021 17:57:51 +0000 Subject: [PATCH 03/28] merge with master --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 38a934e0..c4293e6b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,6 @@ jobs: CX_CLIENT_SECRET: ${{ secrets.CLIENT_SECRET}} CX_BASE_URI: ${{ secrets.BASE_URI }} CX_TENANT: ${{ secrets.TENANT }} - PATH_TO_EXECUTABLE: /tmp/cx-linux run: npm test cx-scan: runs-on: ubuntu-latest From ebdd3c98711950669e868191c8c328e044e241f4 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Tue, 9 Nov 2021 18:02:58 +0000 Subject: [PATCH 04/28] fix integration tests, branch required --- src/tests/ScanTest.test.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 112712ee..760d2f99 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -10,6 +10,7 @@ describe("ScanCreate cases",() => { params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); + params.set(CxParamType.BRANCH, "master"); const auth = new CxWrapper(cxScanConfig); const data = await auth.scanCreate(params); @@ -26,6 +27,7 @@ describe("ScanCreate cases",() => { params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); params.set(CxParamType.BRANCH, "master"); + const auth = new CxWrapper(cxScanConfig); const data = await auth.scanCreate(params); @@ -42,6 +44,8 @@ describe("ScanCreate cases",() => { params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); params.set(CxParamType.S, "./src"); params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); + params.set(CxParamType.BRANCH, "master"); + const auth = new CxWrapper(cxScanConfig); const data = await auth.scanCreate(params); @@ -58,6 +62,8 @@ describe("ScanCreate cases",() => { params.set(CxParamType.S, "./src"); params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); params.set(CxParamType.ADDITIONAL_PARAMETERS, "--nowait"); + params.set(CxParamType.BRANCH, "master"); + const auth = new CxWrapper(cxScanConfig); const data = await auth.scanCreate(params); From 127c4d7903deeba7a0e452c46e1cc0a26e81597d Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Wed, 10 Nov 2021 09:53:24 +0000 Subject: [PATCH 05/28] fix integration tests, branch required --- src/tests/AuthTest.test.ts | 4 ++-- src/tests/ProjectTest.test.ts | 2 ++ src/tests/ScanTest.test.ts | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/tests/AuthTest.test.ts b/src/tests/AuthTest.test.ts index 23ab851b..d7223918 100644 --- a/src/tests/AuthTest.test.ts +++ b/src/tests/AuthTest.test.ts @@ -15,8 +15,8 @@ describe("Authentication validation",() => { it('Result authentication failed case', async () => { let cxScanConfig_fail = new CxScanConfig(); cxScanConfig_fail.baseUri = process.env["CX_BASE_URI"]; - cxScanConfig_fail.clientId = process.env["CX_CLIENT_ID"]; - cxScanConfig_fail.clientSecret = process.env["CX_CLIENT_SECRET"]; + cxScanConfig_fail.clientId = ""; + cxScanConfig_fail.clientSecret = ""; cxScanConfig_fail.tenant = process.env["CX_TENANT"]; cxScanConfig_fail.apiKey = ""; diff --git a/src/tests/ProjectTest.test.ts b/src/tests/ProjectTest.test.ts index c6d2b5aa..1af99748 100644 --- a/src/tests/ProjectTest.test.ts +++ b/src/tests/ProjectTest.test.ts @@ -18,6 +18,7 @@ describe("ProjectList cases",() => { params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); + params.set(CxParamType.BRANCH, "master"); const auth = new CxWrapper(cxScanConfig); const data = await auth.scanCreate(params); @@ -33,6 +34,7 @@ describe("ProjectList cases",() => { params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); + params.set(CxParamType.BRANCH, "master"); const auth = new CxWrapper(cxScanConfig); const data = await auth.scanCreate(params); diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 760d2f99..1c1840f9 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -61,7 +61,7 @@ describe("ScanCreate cases",() => { params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-nowait"); params.set(CxParamType.S, "./src"); params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); - params.set(CxParamType.ADDITIONAL_PARAMETERS, "--nowait"); + params.set(CxParamType.ADDITIONAL_PARAMETERS, "--async"); params.set(CxParamType.BRANCH, "master"); const auth = new CxWrapper(cxScanConfig); From e17bfa256146a376f5267bd1bef1c838700369ee Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Wed, 10 Nov 2021 10:22:37 +0000 Subject: [PATCH 06/28] fix integration tests, branch required --- src/tests/AuthTest.test.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/tests/AuthTest.test.ts b/src/tests/AuthTest.test.ts index d7223918..947d7126 100644 --- a/src/tests/AuthTest.test.ts +++ b/src/tests/AuthTest.test.ts @@ -14,13 +14,13 @@ describe("Authentication validation",() => { }); it('Result authentication failed case', async () => { let cxScanConfig_fail = new CxScanConfig(); - cxScanConfig_fail.baseUri = process.env["CX_BASE_URI"]; - cxScanConfig_fail.clientId = ""; - cxScanConfig_fail.clientSecret = ""; + cxScanConfig_fail.baseUri = "error"; + cxScanConfig_fail.clientId = "error"; + cxScanConfig_fail.clientSecret = "error"; cxScanConfig_fail.tenant = process.env["CX_TENANT"]; - cxScanConfig_fail.apiKey = ""; + cxScanConfig_fail.apiKey = "error"; - const auth = new CxWrapper(cxScanConfig); + const auth = new CxWrapper(cxScanConfig_fail); const data = await auth.authValidate(); const cxCommandOutput: CxCommandOutput = data; expect(cxCommandOutput.exitCode).toBe(1); From 6bfccc6e8eb10cac57c439dc9bf1ab642bf872ac Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Wed, 10 Nov 2021 10:53:45 +0000 Subject: [PATCH 07/28] fix integration tests, branch required --- src/tests/ResultTest.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/ResultTest.test.ts b/src/tests/ResultTest.test.ts index 670abf29..aa9d1ce8 100644 --- a/src/tests/ResultTest.test.ts +++ b/src/tests/ResultTest.test.ts @@ -22,7 +22,7 @@ describe("Results cases",() => { const cxCommandOutput: CxCommandOutput = data let sampleId = cxCommandOutput.payload.pop().ID; const written = await auth.getResultsList(sampleId) - expect(written.payload.length).toBeGreaterThan(0); + expect(written.status).toEqual(""); }); it('Result summary html file generation successful case', async () => { From c70508cee1ba17d4cb05d81fdca45cdc7437ce97 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Wed, 10 Nov 2021 12:38:43 +0000 Subject: [PATCH 08/28] fix integration tests, branch required --- src/main/wrapper/CxWrapper.ts | 14 ++++++++------ src/tests/ProjectTest.test.ts | 2 +- src/tests/ResultTest.test.ts | 8 ++++---- src/tests/ScanTest.test.ts | 2 +- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/main/wrapper/CxWrapper.ts b/src/main/wrapper/CxWrapper.ts index 999293bd..d080c900 100644 --- a/src/main/wrapper/CxWrapper.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -126,16 +126,18 @@ export class CxWrapper { return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.SCAN_TYPE); } - async scanList(): Promise { - const commands: string[] = [CxConstants.CMD_SCAN, CxConstants.SUB_CMD_LIST]; + async scanList(filters:string): Promise { + const validated_filters = this.filterArguments(filters); + const commands: string[] = [CxConstants.CMD_SCAN, "list"].concat(validated_filters); commands.push(...this.initializeCommands(true)); const exec = new ExecutionService(); return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.SCAN_TYPE); } - async projectList(): Promise { - const commands: string[] = [CxConstants.CMD_PROJECT, CxConstants.SUB_CMD_LIST]; + async projectList(filters:string): Promise { + const validated_filters = this.filterArguments(filters); + const commands: string[] = [CxConstants.CMD_PROJECT, "list"].concat(validated_filters); commands.push(...this.initializeCommands(true)); const exec = new ExecutionService(); @@ -144,7 +146,7 @@ export class CxWrapper { async projectBranches(projectId: string, filters: string): Promise { // Verify and add possible branch filter by name - const validated_filters = this.filterArguments(filters) + const validated_filters = this.filterArguments(CxConstants.BRANCH_NAME + filters) const commands: string[] = [CxConstants.CMD_PROJECT , CxConstants.SUB_CMD_BRANCHES, CxConstants.PROJECT_ID, projectId].concat(validated_filters); commands.push(...this.initializeCommands(false)); @@ -207,7 +209,7 @@ export class CxWrapper { let r = []; if(filters.length>0){ r.push(CxConstants.FILTER); - r.push(CxConstants.BRANCH_NAME + filters); + r.push(filters); } return r; } diff --git a/src/tests/ProjectTest.test.ts b/src/tests/ProjectTest.test.ts index 1af99748..b02a14d2 100644 --- a/src/tests/ProjectTest.test.ts +++ b/src/tests/ProjectTest.test.ts @@ -8,7 +8,7 @@ describe("ProjectList cases",() => { it('ProjectList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const data = await auth.projectList(); + const data = await auth.projectList(""); const cxCommandOutput: CxCommandOutput = data; expect(cxCommandOutput.payload.length).toBeGreaterThan(0); }); diff --git a/src/tests/ResultTest.test.ts b/src/tests/ResultTest.test.ts index aa9d1ce8..6f9a9527 100644 --- a/src/tests/ResultTest.test.ts +++ b/src/tests/ResultTest.test.ts @@ -8,7 +8,7 @@ describe("Results cases",() => { let cxScanConfig = new BaseTest(); it('Result Test Successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanList(); + const data = await auth.scanList(""); const cxCommandOutput: CxCommandOutput = data let sampleId = cxCommandOutput.payload.pop().ID; await auth.getResults(sampleId,"json","jsonList", ".") @@ -18,7 +18,7 @@ describe("Results cases",() => { it('Result List Successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanList(); + const data = await auth.scanList(""); const cxCommandOutput: CxCommandOutput = data let sampleId = cxCommandOutput.payload.pop().ID; const written = await auth.getResultsList(sampleId) @@ -27,7 +27,7 @@ describe("Results cases",() => { it('Result summary html file generation successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanList(); + const data = await auth.scanList(""); const cxCommandOutput: CxCommandOutput = data let sampleId = cxCommandOutput.payload.pop().ID; await auth.getResults(sampleId,"summaryHTML","test", ".") @@ -37,7 +37,7 @@ describe("Results cases",() => { it('Result summary html string successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanList(); + const data = await auth.scanList(""); const cxCommandOutput: CxCommandOutput = data let sampleId = cxCommandOutput.payload.pop().ID; const written = await auth.getResultsSummary(sampleId) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 1c1840f9..65abb788 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -76,7 +76,7 @@ describe("ScanCreate cases",() => { it('ScanList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanList(); + const data = await auth.scanList(""); const cxCommandOutput: CxCommandOutput = data; expect(cxCommandOutput.payload.length).toBeGreaterThan(0); }); From 6bd5172801354cb2811e04b00459469e2d33b845 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 10:38:43 +0000 Subject: [PATCH 09/28] fix integration tests, branch required --- src/main/wrapper/ExecutionService.ts | 80 +++++++++++++++------------- 1 file changed, 42 insertions(+), 38 deletions(-) diff --git a/src/main/wrapper/ExecutionService.ts b/src/main/wrapper/ExecutionService.ts index 87c2cf09..fdace127 100644 --- a/src/main/wrapper/ExecutionService.ts +++ b/src/main/wrapper/ExecutionService.ts @@ -33,6 +33,7 @@ export class ExecutionService { 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) { @@ -48,50 +49,53 @@ export class ExecutionService { }); cp.stdout.on('data', (data: any) => { if (data) { - logger.info(`${data.toString().trim()}`); - if (isJsonString(data.toString())) { - let resultObject = JSON.parse(data.toString().split('\n')[0]); - // Some cli outputs have array format, must be checked - if (resultObject instanceof Array) { - // Check if there is a specific type for the output and make conversions - switch(output){ - case 'CxScan': - let r = resultObject.map((member)=>{return Object.assign( new CxScan(),member);}) ; - cxCommandOutput.payload = r; - break; - case 'CxProject': - r = resultObject.map((member)=>{return Object.assign( new CxProject(),member);}) ; - cxCommandOutput.payload = r; - break; - default: - logger.info(JSON.stringify(resultObject)); - cxCommandOutput.payload = resultObject; - } - } else { - let resultArray: any [] = []; - // Check if there is a specific type for the output and make conversions - switch(output){ - case 'CxScan': - let r = Object.assign( new CxScan(),resultObject); - resultArray.push(r); - cxCommandOutput.payload = resultArray; - break; - case 'CxProject': - r = Object.assign( new CxProject(),resultObject); - resultArray.push(r); - cxCommandOutput.payload = resultArray; - break; - default: - resultArray.push(resultObject); - cxCommandOutput.payload = resultArray; - } + output_string+=data; + } + }); + cp.stdout.on('close', (data: any) => { + console.log("fim",output_string); + logger.info(`${output_string.toString().trim()}`); + if (isJsonString(output_string.toString())) { + let resultObject = JSON.parse(output_string.toString().split('\n')[0]); + // Some cli outputs have array format, must be checked + if (resultObject instanceof Array) { + // Check if there is a specific type for the output and make conversions + switch(output){ + case 'CxScan': + let r = resultObject.map((member)=>{return Object.assign( new CxScan(),member);}) ; + cxCommandOutput.payload = r; + break; + case 'CxProject': + r = resultObject.map((member)=>{return Object.assign( new CxProject(),member);}) ; + cxCommandOutput.payload = r; + break; + default: + logger.info(JSON.stringify(resultObject)); + cxCommandOutput.payload = resultObject; + } + } else { + let resultArray: any [] = []; + // Check if there is a specific type for the output and make conversions + switch(output){ + case 'CxScan': + let r = Object.assign( new CxScan(),resultObject); + resultArray.push(r); + cxCommandOutput.payload = resultArray; + break; + case 'CxProject': + r = Object.assign( new CxProject(),resultObject); + resultArray.push(r); + cxCommandOutput.payload = resultArray; + break; + default: + resultArray.push(resultObject); + cxCommandOutput.payload = resultArray; } } } }); }); } - executeResultsCommands(pathToExecutable: string, commands: string[]): Promise { return new Promise(function (resolve, reject) { let stderr = ''; From 680f25b756db3de67d3fa65b96bef4410292efae Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 11:56:39 +0000 Subject: [PATCH 10/28] fix formatting --- src/main/wrapper/CxWrapper.ts | 15 ---------- src/main/wrapper/ExecutionService.ts | 6 ++-- src/main/wrapper/loggerConfig.ts | 4 +-- src/tests/AuthTest.test.ts | 13 ++++---- src/tests/ProjectTest.test.ts | 20 +++++-------- src/tests/ResultTest.test.ts | 23 ++++++-------- src/tests/ScanTest.test.ts | 45 ++++++++++------------------ 7 files changed, 42 insertions(+), 84 deletions(-) diff --git a/src/main/wrapper/CxWrapper.ts b/src/main/wrapper/CxWrapper.ts index d080c900..82c3ebce 100644 --- a/src/main/wrapper/CxWrapper.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -4,12 +4,9 @@ import {CxConstants} from "./CxConstants"; import {ExecutionService} from "./ExecutionService"; import {CxCommandOutput} from "./CxCommandOutput"; import { logger } from "./loggerConfig"; - import * as fs from "fs" import * as os from "os"; - - type ParamTypeMap = Map; export class CxWrapper { @@ -32,7 +29,6 @@ export class CxWrapper { logger.info("Did not receive ClientId/Secret or ApiKey from cli arguments"); } let executablePath: string; - if (cxScanConfig.pathToExecutable) { this.pathToExecutable = cxScanConfig.pathToExecutable; } else if (process.platform === 'win32') { @@ -47,11 +43,9 @@ export class CxWrapper { this.pathToExecutable = executablePath; fs.chmodSync(this.pathToExecutable, 0o777); } - if (cxScanConfig.baseUri) { this.baseUri = cxScanConfig.baseUri; } - if (cxScanConfig.tenant) { this.tenant = cxScanConfig.tenant; } @@ -106,7 +100,6 @@ export class CxWrapper { } } }); - const exec = new ExecutionService(); return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.SCAN_TYPE); } @@ -121,7 +114,6 @@ export class CxWrapper { async scanShow(id: string): Promise { const commands: string[] = [CxConstants.CMD_SCAN, CxConstants.SUB_CMD_SHOW, CxConstants.SCAN_ID, id]; commands.push(...this.initializeCommands(true)); - const exec = new ExecutionService(); return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.SCAN_TYPE); } @@ -130,7 +122,6 @@ export class CxWrapper { const validated_filters = this.filterArguments(filters); const commands: string[] = [CxConstants.CMD_SCAN, "list"].concat(validated_filters); commands.push(...this.initializeCommands(true)); - const exec = new ExecutionService(); return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.SCAN_TYPE); } @@ -139,7 +130,6 @@ export class CxWrapper { const validated_filters = this.filterArguments(filters); const commands: string[] = [CxConstants.CMD_PROJECT, "list"].concat(validated_filters); commands.push(...this.initializeCommands(true)); - const exec = new ExecutionService(); return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.PROJECT_TYPE); } @@ -149,7 +139,6 @@ export class CxWrapper { const validated_filters = this.filterArguments(CxConstants.BRANCH_NAME + filters) const commands: string[] = [CxConstants.CMD_PROJECT , CxConstants.SUB_CMD_BRANCHES, CxConstants.PROJECT_ID, projectId].concat(validated_filters); commands.push(...this.initializeCommands(false)); - const exec = new ExecutionService(); return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.PROJECT_TYPE); } @@ -157,7 +146,6 @@ export class CxWrapper { async projectShow(projectId: string): Promise { const commands: string[] = [CxConstants.CMD_PROJECT, CxConstants.SUB_CMD_SHOW, CxConstants.PROJECT_ID,projectId]; commands.push(...this.initializeCommands(true)); - const exec = new ExecutionService(); return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.PROJECT_TYPE); } @@ -184,14 +172,12 @@ export class CxWrapper { async getResults(scanId: string, resultType:string, outputFileName: string, outputFilePath: string) { const commands = this.createResultCommand(scanId, resultType, outputFileName, outputFilePath) - const exec = new ExecutionService(); return await exec.executeCommands(this.pathToExecutable, commands); } createResultCommand(scanId: string, reportFormat: string, outputFileName: string, outputPath: string): string[] { const commands: string[] = [CxConstants.CMD_RESULT, CxConstants.SCAN_ID, scanId,CxConstants.REPORT_FORMAT , reportFormat]; - if (outputFileName) { commands.push(CxConstants.OUTPUT_NAME); commands.push(outputFileName); @@ -201,7 +187,6 @@ export class CxWrapper { commands.push(outputPath); } commands.push(...this.initializeCommands(false)); - return commands; } diff --git a/src/main/wrapper/ExecutionService.ts b/src/main/wrapper/ExecutionService.ts index fdace127..12307603 100644 --- a/src/main/wrapper/ExecutionService.ts +++ b/src/main/wrapper/ExecutionService.ts @@ -53,8 +53,8 @@ export class ExecutionService { } }); cp.stdout.on('close', (data: any) => { - console.log("fim",output_string); 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]); // Some cli outputs have array format, must be checked @@ -96,6 +96,7 @@ export class ExecutionService { }); }); } + executeResultsCommands(pathToExecutable: string, commands: string[]): Promise { return new Promise(function (resolve, reject) { let stderr = ''; @@ -120,7 +121,6 @@ export class ExecutionService { } async executeResultsCommandsFile(scanId: string, resultType: string, fileExtension: string,commands: string[], pathToExecutable: string,fileName:string): Promise { - const filePath = path.join(os.tmpdir(), fileName + fileExtension) let read = fs.readFileSync(filePath,'utf8'); let cxCommandOutput = new CxCommandOutput(); @@ -136,7 +136,7 @@ export class ExecutionService { cxCommandOutput.status = "Error in the json file." } } - // in case of html output + // In case of html output else{ let html_arrray:any = [] html_arrray.push(read) diff --git a/src/main/wrapper/loggerConfig.ts b/src/main/wrapper/loggerConfig.ts index 9668b7e9..a52a2fde 100644 --- a/src/main/wrapper/loggerConfig.ts +++ b/src/main/wrapper/loggerConfig.ts @@ -1,6 +1,6 @@ import { configure, getLogger } from 'log4js'; -// appenders +// Appenders configure({ appenders: { console: { type: 'stdout', layout: { type: "messagePassThrough" } }, @@ -10,5 +10,5 @@ categories: { } }); -// fetch logger and export +// Fetch logger and export export const logger = getLogger(); \ No newline at end of file diff --git a/src/tests/AuthTest.test.ts b/src/tests/AuthTest.test.ts index 947d7126..032a0278 100644 --- a/src/tests/AuthTest.test.ts +++ b/src/tests/AuthTest.test.ts @@ -3,26 +3,23 @@ import {CxCommandOutput} from "../main/wrapper/CxCommandOutput"; import {CxScanConfig} from "../main/scan/CxScanConfig"; import {BaseTest} from "./BaseTest"; - describe("Authentication validation",() => { - let cxScanConfig = new BaseTest(); + const cxScanConfig = new BaseTest(); it('Result authentication successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const data = await auth.authValidate(); - const cxCommandOutput: CxCommandOutput = data + const cxCommandOutput: CxCommandOutput = await auth.authValidate(); expect(cxCommandOutput.exitCode).toBe(0); }); + it('Result authentication failed case', async () => { - let cxScanConfig_fail = new CxScanConfig(); + const cxScanConfig_fail = new CxScanConfig(); cxScanConfig_fail.baseUri = "error"; cxScanConfig_fail.clientId = "error"; cxScanConfig_fail.clientSecret = "error"; cxScanConfig_fail.tenant = process.env["CX_TENANT"]; cxScanConfig_fail.apiKey = "error"; - const auth = new CxWrapper(cxScanConfig_fail); - const data = await auth.authValidate(); - const cxCommandOutput: CxCommandOutput = data; + const cxCommandOutput: CxCommandOutput = await auth.authValidate(); expect(cxCommandOutput.exitCode).toBe(1); }); }); \ No newline at end of file diff --git a/src/tests/ProjectTest.test.ts b/src/tests/ProjectTest.test.ts index b02a14d2..dd475956 100644 --- a/src/tests/ProjectTest.test.ts +++ b/src/tests/ProjectTest.test.ts @@ -4,8 +4,8 @@ import {BaseTest} from "./BaseTest"; import {CxParamType} from "../main/wrapper/CxParamType"; describe("ProjectList cases",() => { - let cxScanConfig = new BaseTest(); - + const cxScanConfig = new BaseTest(); + let params = new Map(); it('ProjectList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); const data = await auth.projectList(""); @@ -14,32 +14,28 @@ describe("ProjectList cases",() => { }); it('ProjectShow Successful case',async () =>{ - const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); params.set(CxParamType.BRANCH, "master"); - - const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanCreate(params); + let auth = new CxWrapper(cxScanConfig); + let data = await auth.scanCreate(params); let cxCommandOutput: CxCommandOutput = data; - const ScanObject = cxCommandOutput.payload.pop(); + 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); }); it('ProjectBranches Successful case',async () =>{ - const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); params.set(CxParamType.BRANCH, "master"); - - const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanCreate(params); + let auth = new CxWrapper(cxScanConfig); + let data = await auth.scanCreate(params); let cxCommandOutput: CxCommandOutput = data; - const ScanObject = cxCommandOutput.payload.pop(); + 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); diff --git a/src/tests/ResultTest.test.ts b/src/tests/ResultTest.test.ts index 6f9a9527..76230205 100644 --- a/src/tests/ResultTest.test.ts +++ b/src/tests/ResultTest.test.ts @@ -3,44 +3,39 @@ import {CxCommandOutput} from "../main/wrapper/CxCommandOutput"; import {BaseTest} from "./BaseTest"; import * as fs from "fs"; - describe("Results cases",() => { - let cxScanConfig = new BaseTest(); + const cxScanConfig = new BaseTest(); it('Result Test Successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanList(""); - const cxCommandOutput: CxCommandOutput = data + const cxCommandOutput: CxCommandOutput = await auth.scanList(""); let sampleId = cxCommandOutput.payload.pop().ID; - await auth.getResults(sampleId,"json","jsonList", ".") + await auth.getResults(sampleId,"json","jsonList", "."); const file = await fileExists("./jsonList.json"); expect(file).toBe(true); }); it('Result List Successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanList(""); - const cxCommandOutput: CxCommandOutput = data + const cxCommandOutput: CxCommandOutput = await auth.scanList(""); let sampleId = cxCommandOutput.payload.pop().ID; - const written = await auth.getResultsList(sampleId) + const written = await auth.getResultsList(sampleId); expect(written.status).toEqual(""); }); it('Result summary html file generation successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanList(""); - const cxCommandOutput: CxCommandOutput = data + const cxCommandOutput: CxCommandOutput = await auth.scanList(""); let sampleId = cxCommandOutput.payload.pop().ID; - await auth.getResults(sampleId,"summaryHTML","test", ".") + await auth.getResults(sampleId,"summaryHTML","test", "."); const file = await fileExists("./test.html"); expect(file).toBe(true); }); it('Result summary html string successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanList(""); - const cxCommandOutput: CxCommandOutput = data + const cxCommandOutput: CxCommandOutput = await auth.scanList(""); let sampleId = cxCommandOutput.payload.pop().ID; - const written = await auth.getResultsSummary(sampleId) + const written = await auth.getResultsSummary(sampleId); expect(written.payload.length).toBeGreaterThan(0); }); diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 65abb788..7cded457 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -4,80 +4,65 @@ import {CxParamType} from "../main/wrapper/CxParamType"; import {BaseTest} from "./BaseTest"; describe("ScanCreate cases",() => { - let cxScanConfig = new BaseTest(); + let params = new Map(); + const cxScanConfig = new BaseTest(); it('ScanCreate Successful case wait mode', async () => { - const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); params.set(CxParamType.BRANCH, "master"); - const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanCreate(params); - const cxCommandOutput: CxCommandOutput = data; - const ScanObject = cxCommandOutput.payload.pop(); - const scanShowObject = await auth.scanShow(ScanObject.ID); + const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); + const scanObject = cxCommandOutput.payload.pop(); + const scanShowObject = await auth.scanShow(scanObject.ID); console.log(" Json object from successful wait mode case: " + JSON.stringify(scanShowObject)); expect(scanShowObject.payload.pop().Status).toEqual("Completed"); }) it('ScanCreate Successful case with Branch', async () => { - const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); params.set(CxParamType.BRANCH, "master"); - const auth = new CxWrapper(cxScanConfig); - - const data = await auth.scanCreate(params); - const cxCommandOutput: CxCommandOutput = data; - const ScanObject = cxCommandOutput.payload.pop(); - const scanShowObject = await auth.scanShow(ScanObject.ID); + const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); + const scanObject = cxCommandOutput.payload.pop(); + const scanShowObject = await auth.scanShow(scanObject.ID); console.log(" Json object from successful wait mode case with branch: " +JSON.stringify(scanShowObject)); expect(scanShowObject.payload.pop().Status).toEqual("Completed"); }) it('ScanCreate Failure case', async () => { - const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); params.set(CxParamType.S, "./src"); params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); params.set(CxParamType.BRANCH, "master"); - const auth = new CxWrapper(cxScanConfig); - - const data = await auth.scanCreate(params); - const cxCommandOutput: CxCommandOutput = data; - const ScanObject = cxCommandOutput.payload.pop(); - const scanShowObject = await auth.scanShow(ScanObject.ID); + const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); + const scanObject = cxCommandOutput.payload.pop(); + const scanShowObject = await auth.scanShow(scanObject.ID); console.log(" Json object from failure case: " + JSON.stringify(scanShowObject)); expect(scanShowObject.payload.pop().Status).toEqual("Failed"); }) it('ScanCreate Successful case no wait mode', async () => { - const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-nowait"); params.set(CxParamType.S, "./src"); params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); params.set(CxParamType.ADDITIONAL_PARAMETERS, "--async"); params.set(CxParamType.BRANCH, "master"); - const auth = new CxWrapper(cxScanConfig); - - const data = await auth.scanCreate(params); - const cxCommandOutput: CxCommandOutput = data; - const ScanObject = cxCommandOutput.payload.pop(); - const scanShowObject = await auth.scanShow(ScanObject.ID); + const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); + const scanObject = cxCommandOutput.payload.pop(); + const scanShowObject = await auth.scanShow(scanObject.ID); console.log(" Json object from successful no wait mode case: " + JSON.stringify(scanShowObject)) expect(scanShowObject.payload.pop().Status).toEqual("Running") }) it('ScanList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanList(""); - const cxCommandOutput: CxCommandOutput = data; + const cxCommandOutput: CxCommandOutput = await auth.scanList(""); expect(cxCommandOutput.payload.length).toBeGreaterThan(0); }); }); \ No newline at end of file From 3341c817013699936ee16f75c8839b12d4c8c004 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 13:37:22 +0000 Subject: [PATCH 11/28] fix formatting --- src/tests/ScanTest.test.ts | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 7cded457..613edcf7 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -6,18 +6,6 @@ import {BaseTest} from "./BaseTest"; describe("ScanCreate cases",() => { let params = new Map(); const cxScanConfig = new BaseTest(); - it('ScanCreate Successful case wait mode', async () => { - params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); - params.set(CxParamType.S, "./src"); - params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); - params.set(CxParamType.BRANCH, "master"); - const auth = new CxWrapper(cxScanConfig); - const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); - const scanObject = cxCommandOutput.payload.pop(); - const scanShowObject = await auth.scanShow(scanObject.ID); - console.log(" Json object from successful wait mode case: " + JSON.stringify(scanShowObject)); - expect(scanShowObject.payload.pop().Status).toEqual("Completed"); - }) it('ScanCreate Successful case with Branch', async () => { params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); @@ -60,6 +48,19 @@ describe("ScanCreate cases",() => { expect(scanShowObject.payload.pop().Status).toEqual("Running") }) + it('ScanCreate Successful case wait mode', async () => { + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); + params.set(CxParamType.S, "./src"); + params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); + params.set(CxParamType.BRANCH, "master"); + const auth = new CxWrapper(cxScanConfig); + const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); + const scanObject = cxCommandOutput.payload.pop(); + const scanShowObject = await auth.scanShow(scanObject.ID); + console.log(" Json object from successful wait mode case: " + JSON.stringify(scanShowObject)); + expect(scanShowObject.payload.pop().Status).toEqual("Completed"); + }) + it('ScanList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); const cxCommandOutput: CxCommandOutput = await auth.scanList(""); From b7cc362da85a6cecf0daa2ba0f3438883134181c Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 14:39:25 +0000 Subject: [PATCH 12/28] fix formatting --- src/tests/ScanTest.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 613edcf7..f1ea8beb 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -8,6 +8,7 @@ describe("ScanCreate cases",() => { const cxScanConfig = new BaseTest(); it('ScanCreate Successful case with Branch', async () => { + params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); From abc974f2204772bec9af33887189fdd4eda15c4c Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 15:04:05 +0000 Subject: [PATCH 13/28] fix formatting --- src/tests/ProjectTest.test.ts | 3 ++- src/tests/ScanTest.test.ts | 44 ++++++++++++++++++----------------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/tests/ProjectTest.test.ts b/src/tests/ProjectTest.test.ts index dd475956..55bff9ee 100644 --- a/src/tests/ProjectTest.test.ts +++ b/src/tests/ProjectTest.test.ts @@ -5,7 +5,6 @@ import {CxParamType} from "../main/wrapper/CxParamType"; describe("ProjectList cases",() => { const cxScanConfig = new BaseTest(); - let params = new Map(); it('ProjectList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); const data = await auth.projectList(""); @@ -14,6 +13,7 @@ describe("ProjectList cases",() => { }); it('ProjectShow Successful case',async () =>{ + let params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); @@ -28,6 +28,7 @@ describe("ProjectList cases",() => { }); it('ProjectBranches Successful case',async () =>{ + let params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index f1ea8beb..25e4b7ab 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -4,11 +4,30 @@ import {CxParamType} from "../main/wrapper/CxParamType"; import {BaseTest} from "./BaseTest"; describe("ScanCreate cases",() => { - let params = new Map(); const cxScanConfig = new BaseTest(); + it('ScanList Successful case', async () => { + const auth = new CxWrapper(cxScanConfig); + const cxCommandOutput: CxCommandOutput = await auth.scanList(""); + expect(cxCommandOutput.payload.length).toBeGreaterThan(0); + }); + + it('ScanCreate Successful case wait mode', async () => { + let params = new Map(); + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); + params.set(CxParamType.S, "./src"); + params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); + params.set(CxParamType.BRANCH, "master"); + const auth = new CxWrapper(cxScanConfig); + const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); + const scanObject = cxCommandOutput.payload.pop(); + const scanShowObject = await auth.scanShow(scanObject.ID); + console.log(" Json object from successful wait mode case: " + JSON.stringify(scanShowObject)); + expect(scanShowObject.payload.pop().Status).toEqual("Completed"); + }) + it('ScanCreate Successful case with Branch', async () => { - params = new Map(); + let params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); @@ -23,6 +42,7 @@ describe("ScanCreate cases",() => { }) it('ScanCreate Failure case', async () => { + let params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); params.set(CxParamType.S, "./src"); params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); @@ -36,6 +56,7 @@ describe("ScanCreate cases",() => { }) it('ScanCreate Successful case no wait mode', async () => { + let params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-nowait"); params.set(CxParamType.S, "./src"); params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); @@ -48,23 +69,4 @@ describe("ScanCreate cases",() => { console.log(" Json object from successful no wait mode case: " + JSON.stringify(scanShowObject)) expect(scanShowObject.payload.pop().Status).toEqual("Running") }) - - it('ScanCreate Successful case wait mode', async () => { - params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); - params.set(CxParamType.S, "./src"); - params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); - params.set(CxParamType.BRANCH, "master"); - const auth = new CxWrapper(cxScanConfig); - const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); - const scanObject = cxCommandOutput.payload.pop(); - const scanShowObject = await auth.scanShow(scanObject.ID); - console.log(" Json object from successful wait mode case: " + JSON.stringify(scanShowObject)); - expect(scanShowObject.payload.pop().Status).toEqual("Completed"); - }) - - it('ScanList Successful case', async () => { - const auth = new CxWrapper(cxScanConfig); - const cxCommandOutput: CxCommandOutput = await auth.scanList(""); - expect(cxCommandOutput.payload.length).toBeGreaterThan(0); - }); }); \ No newline at end of file From c745ea8b92b831843adc77221a7c1297bdc3eaf0 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 15:25:47 +0000 Subject: [PATCH 14/28] fix formatting --- src/tests/ScanTest.test.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 25e4b7ab..a4a65441 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -6,6 +6,9 @@ import {BaseTest} from "./BaseTest"; describe("ScanCreate cases",() => { const cxScanConfig = new BaseTest(); + it('ScanList Successful case', async () => { + }); + it('ScanList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); const cxCommandOutput: CxCommandOutput = await auth.scanList(""); From 234056f5cb2143e5c585846bfe96c158082ffd58 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 15:36:40 +0000 Subject: [PATCH 15/28] fix formatting --- src/tests/ScanTest.test.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index a4a65441..98e75e79 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -4,10 +4,7 @@ import {CxParamType} from "../main/wrapper/CxParamType"; import {BaseTest} from "./BaseTest"; describe("ScanCreate cases",() => { - const cxScanConfig = new BaseTest(); - - it('ScanList Successful case', async () => { - }); + let cxScanConfig = new BaseTest(); it('ScanList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); @@ -16,7 +13,7 @@ describe("ScanCreate cases",() => { }); it('ScanCreate Successful case wait mode', async () => { - let params = new Map(); + const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); @@ -30,7 +27,7 @@ describe("ScanCreate cases",() => { }) it('ScanCreate Successful case with Branch', async () => { - let params = new Map(); + const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); @@ -45,7 +42,7 @@ describe("ScanCreate cases",() => { }) it('ScanCreate Failure case', async () => { - let params = new Map(); + const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); params.set(CxParamType.S, "./src"); params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); @@ -59,7 +56,7 @@ describe("ScanCreate cases",() => { }) it('ScanCreate Successful case no wait mode', async () => { - let params = new Map(); + const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-nowait"); params.set(CxParamType.S, "./src"); params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); From 822e9af804793e90a9ab95d2ea9dac4f89f8e1d1 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 15:44:28 +0000 Subject: [PATCH 16/28] fix tests --- src/tests/ResultTest.test.ts | 2 +- src/tests/ScanTest.test.ts | 34 +++++++++++++++++----------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/tests/ResultTest.test.ts b/src/tests/ResultTest.test.ts index 76230205..29645aeb 100644 --- a/src/tests/ResultTest.test.ts +++ b/src/tests/ResultTest.test.ts @@ -4,7 +4,7 @@ import {BaseTest} from "./BaseTest"; import * as fs from "fs"; describe("Results cases",() => { - const cxScanConfig = new BaseTest(); + let cxScanConfig = new BaseTest(); it('Result Test Successful case', async () => { const auth = new CxWrapper(cxScanConfig); const cxCommandOutput: CxCommandOutput = await auth.scanList(""); diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 98e75e79..9a9e0f27 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -6,12 +6,6 @@ import {BaseTest} from "./BaseTest"; describe("ScanCreate cases",() => { let cxScanConfig = new BaseTest(); - it('ScanList Successful case', async () => { - const auth = new CxWrapper(cxScanConfig); - const cxCommandOutput: CxCommandOutput = await auth.scanList(""); - expect(cxCommandOutput.payload.length).toBeGreaterThan(0); - }); - it('ScanCreate Successful case wait mode', async () => { const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); @@ -26,33 +20,39 @@ describe("ScanCreate cases",() => { expect(scanShowObject.payload.pop().Status).toEqual("Completed"); }) - it('ScanCreate Successful case with Branch', async () => { + it('ScanCreate Failure case', async () => { const params = new Map(); - params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); params.set(CxParamType.S, "./src"); - params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); + params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); params.set(CxParamType.BRANCH, "master"); const auth = new CxWrapper(cxScanConfig); const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); const scanObject = cxCommandOutput.payload.pop(); const scanShowObject = await auth.scanShow(scanObject.ID); - console.log(" Json object from successful wait mode case with branch: " +JSON.stringify(scanShowObject)); - expect(scanShowObject.payload.pop().Status).toEqual("Completed"); - + console.log(" Json object from failure case: " + JSON.stringify(scanShowObject)); + expect(scanShowObject.payload.pop().Status).toEqual("Failed"); }) - it('ScanCreate Failure case', async () => { + it('ScanList Successful case', async () => { + const auth = new CxWrapper(cxScanConfig); + const cxCommandOutput: CxCommandOutput = await auth.scanList(""); + expect(cxCommandOutput.payload.length).toBeGreaterThan(0); + }); + + it('ScanCreate Successful case with Branch', async () => { const params = new Map(); - params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); params.set(CxParamType.S, "./src"); - params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); + params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); params.set(CxParamType.BRANCH, "master"); const auth = new CxWrapper(cxScanConfig); const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); const scanObject = cxCommandOutput.payload.pop(); const scanShowObject = await auth.scanShow(scanObject.ID); - console.log(" Json object from failure case: " + JSON.stringify(scanShowObject)); - expect(scanShowObject.payload.pop().Status).toEqual("Failed"); + console.log(" Json object from successful wait mode case with branch: " +JSON.stringify(scanShowObject)); + expect(scanShowObject.payload.pop().Status).toEqual("Completed"); + }) it('ScanCreate Successful case no wait mode', async () => { From 00e2fd21beabc9ee1b8ca11090f742344c406f28 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 16:27:50 +0000 Subject: [PATCH 17/28] fix tests increase timeout --- jest.setup.js | 2 +- src/tests/ProjectTest.test.ts | 3 +-- src/tests/ScanTest.test.ts | 10 +++------- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/jest.setup.js b/jest.setup.js index 214833b9..852be1b4 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -1 +1 @@ -jest.setTimeout(1000000); // in milliseconds +jest.setTimeout(3600000);// in milliseconds diff --git a/src/tests/ProjectTest.test.ts b/src/tests/ProjectTest.test.ts index 55bff9ee..063f5f61 100644 --- a/src/tests/ProjectTest.test.ts +++ b/src/tests/ProjectTest.test.ts @@ -5,6 +5,7 @@ import {CxParamType} from "../main/wrapper/CxParamType"; describe("ProjectList cases",() => { const cxScanConfig = new BaseTest(); + const params = new Map(); it('ProjectList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); const data = await auth.projectList(""); @@ -13,7 +14,6 @@ describe("ProjectList cases",() => { }); it('ProjectShow Successful case',async () =>{ - let params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); @@ -28,7 +28,6 @@ describe("ProjectList cases",() => { }); it('ProjectBranches Successful case',async () =>{ - let params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 9a9e0f27..0962ac96 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -5,9 +5,8 @@ import {BaseTest} from "./BaseTest"; describe("ScanCreate cases",() => { let cxScanConfig = new BaseTest(); - + const params = new Map(); it('ScanCreate Successful case wait mode', async () => { - const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); @@ -21,7 +20,6 @@ describe("ScanCreate cases",() => { }) it('ScanCreate Failure case', async () => { - const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); params.set(CxParamType.S, "./src"); params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); @@ -41,7 +39,6 @@ describe("ScanCreate cases",() => { }); it('ScanCreate Successful case with Branch', async () => { - const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); @@ -56,7 +53,6 @@ describe("ScanCreate cases",() => { }) it('ScanCreate Successful case no wait mode', async () => { - const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-nowait"); params.set(CxParamType.S, "./src"); params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); @@ -66,7 +62,7 @@ describe("ScanCreate cases",() => { const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); const scanObject = cxCommandOutput.payload.pop(); const scanShowObject = await auth.scanShow(scanObject.ID); - console.log(" Json object from successful no wait mode case: " + JSON.stringify(scanShowObject)) - expect(scanShowObject.payload.pop().Status).toEqual("Running") + console.log(" Json object from successful no wait mode case: " + JSON.stringify(scanShowObject)); + expect(scanShowObject.payload.pop().Status).toEqual("Running"); }) }); \ No newline at end of file From eb83445749f6d82df9858ced359229bf22fe134e Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 16:33:45 +0000 Subject: [PATCH 18/28] fix tests increase timeout --- src/tests/ProjectTest.test.ts | 3 ++- src/tests/ScanTest.test.ts | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/tests/ProjectTest.test.ts b/src/tests/ProjectTest.test.ts index 063f5f61..c1b3f936 100644 --- a/src/tests/ProjectTest.test.ts +++ b/src/tests/ProjectTest.test.ts @@ -5,7 +5,6 @@ import {CxParamType} from "../main/wrapper/CxParamType"; describe("ProjectList cases",() => { const cxScanConfig = new BaseTest(); - const params = new Map(); it('ProjectList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); const data = await auth.projectList(""); @@ -14,6 +13,7 @@ describe("ProjectList cases",() => { }); it('ProjectShow Successful case',async () =>{ + const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); @@ -28,6 +28,7 @@ describe("ProjectList cases",() => { }); it('ProjectBranches Successful case',async () =>{ + const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 0962ac96..8dba135e 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -5,8 +5,8 @@ import {BaseTest} from "./BaseTest"; describe("ScanCreate cases",() => { let cxScanConfig = new BaseTest(); - const params = new Map(); it('ScanCreate Successful case wait mode', async () => { + const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); @@ -20,6 +20,7 @@ describe("ScanCreate cases",() => { }) it('ScanCreate Failure case', async () => { + const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); params.set(CxParamType.S, "./src"); params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); @@ -39,6 +40,7 @@ describe("ScanCreate cases",() => { }); it('ScanCreate Successful case with Branch', async () => { + const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); @@ -53,6 +55,7 @@ describe("ScanCreate cases",() => { }) it('ScanCreate Successful case no wait mode', async () => { + const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-nowait"); params.set(CxParamType.S, "./src"); params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); From 568ed1baad33dff4cfe31723bbd2f33fda41daac Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 16:38:38 +0000 Subject: [PATCH 19/28] fix tests increase timeout --- src/tests/ScanTest.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 8dba135e..53f57ae5 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -12,7 +12,8 @@ describe("ScanCreate cases",() => { params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); params.set(CxParamType.BRANCH, "master"); const auth = new CxWrapper(cxScanConfig); - const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); + const data = await auth.scanCreate(params); + const cxCommandOutput: CxCommandOutput = data; const scanObject = cxCommandOutput.payload.pop(); const scanShowObject = await auth.scanShow(scanObject.ID); console.log(" Json object from successful wait mode case: " + JSON.stringify(scanShowObject)); From 2f486fa2ea82a5fc4cab62551e99ba07af3a67de Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 17:08:37 +0000 Subject: [PATCH 20/28] fix tests increase timeout --- src/tests/ScanTest.test.ts | 55 +++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 53f57ae5..851b443e 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -11,6 +11,7 @@ describe("ScanCreate cases",() => { params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); params.set(CxParamType.BRANCH, "master"); + const auth = new CxWrapper(cxScanConfig); const data = await auth.scanCreate(params); const cxCommandOutput: CxCommandOutput = data; @@ -20,39 +21,39 @@ describe("ScanCreate cases",() => { expect(scanShowObject.payload.pop().Status).toEqual("Completed"); }) - it('ScanCreate Failure case', async () => { + it('ScanCreate Successful case with Branch', async () => { const params = new Map(); - params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); params.set(CxParamType.S, "./src"); - params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); + params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); params.set(CxParamType.BRANCH, "master"); + const auth = new CxWrapper(cxScanConfig); - const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); + + const data = await auth.scanCreate(params); + const cxCommandOutput: CxCommandOutput = data; const scanObject = cxCommandOutput.payload.pop(); const scanShowObject = await auth.scanShow(scanObject.ID); - console.log(" Json object from failure case: " + JSON.stringify(scanShowObject)); - expect(scanShowObject.payload.pop().Status).toEqual("Failed"); - }) + console.log(" Json object from successful wait mode case with branch: " +JSON.stringify(scanShowObject)); + expect(scanShowObject.payload.pop().Status).toEqual("Completed"); - it('ScanList Successful case', async () => { - const auth = new CxWrapper(cxScanConfig); - const cxCommandOutput: CxCommandOutput = await auth.scanList(""); - expect(cxCommandOutput.payload.length).toBeGreaterThan(0); - }); + }) - it('ScanCreate Successful case with Branch', async () => { + it('ScanCreate Failure case', async () => { const params = new Map(); - params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); params.set(CxParamType.S, "./src"); - params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); + params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); params.set(CxParamType.BRANCH, "master"); + const auth = new CxWrapper(cxScanConfig); - const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); + + const data = await auth.scanCreate(params); + const cxCommandOutput: CxCommandOutput = data; const scanObject = cxCommandOutput.payload.pop(); const scanShowObject = await auth.scanShow(scanObject.ID); - console.log(" Json object from successful wait mode case with branch: " +JSON.stringify(scanShowObject)); - expect(scanShowObject.payload.pop().Status).toEqual("Completed"); - + console.log(" Json object from failure case: " + JSON.stringify(scanShowObject)); + expect(scanShowObject.payload.pop().Status).toEqual("Failed"); }) it('ScanCreate Successful case no wait mode', async () => { @@ -62,11 +63,21 @@ describe("ScanCreate cases",() => { params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); params.set(CxParamType.ADDITIONAL_PARAMETERS, "--async"); params.set(CxParamType.BRANCH, "master"); + const auth = new CxWrapper(cxScanConfig); - const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); + + const data = await auth.scanCreate(params); + const cxCommandOutput: CxCommandOutput = data; const scanObject = cxCommandOutput.payload.pop(); const scanShowObject = await auth.scanShow(scanObject.ID); - console.log(" Json object from successful no wait mode case: " + JSON.stringify(scanShowObject)); - expect(scanShowObject.payload.pop().Status).toEqual("Running"); + console.log(" Json object from successful no wait mode case: " + JSON.stringify(scanShowObject)) + expect(scanShowObject.payload.pop().Status).toEqual("Running") }) + + it('ScanList Successful case', async () => { + const auth = new CxWrapper(cxScanConfig); + const data = await auth.scanList(""); + const cxCommandOutput: CxCommandOutput = data; + expect(cxCommandOutput.payload.length).toBeGreaterThan(0); + }); }); \ No newline at end of file From 26d796336927749431d4a7736419b6cde6ca11ca Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 17:15:01 +0000 Subject: [PATCH 21/28] fix tests increase timeout --- src/tests/ScanTest.test.ts | 54 +++++++++++++++----------------------- 1 file changed, 21 insertions(+), 33 deletions(-) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 851b443e..26ce35be 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -5,13 +5,17 @@ import {BaseTest} from "./BaseTest"; describe("ScanCreate cases",() => { let cxScanConfig = new BaseTest(); + it('ScanList Successful case', async () => { + const auth = new CxWrapper(cxScanConfig); + const cxCommandOutput: CxCommandOutput = await auth.scanList(""); + expect(cxCommandOutput.payload.length).toBeGreaterThan(0); + }); it('ScanCreate Successful case wait mode', async () => { const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); params.set(CxParamType.S, "./src"); params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); params.set(CxParamType.BRANCH, "master"); - const auth = new CxWrapper(cxScanConfig); const data = await auth.scanCreate(params); const cxCommandOutput: CxCommandOutput = data; @@ -21,39 +25,33 @@ describe("ScanCreate cases",() => { expect(scanShowObject.payload.pop().Status).toEqual("Completed"); }) - it('ScanCreate Successful case with Branch', async () => { + it('ScanCreate Failure case', async () => { const params = new Map(); - params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); params.set(CxParamType.S, "./src"); - params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); + params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); params.set(CxParamType.BRANCH, "master"); - const auth = new CxWrapper(cxScanConfig); - - const data = await auth.scanCreate(params); - const cxCommandOutput: CxCommandOutput = data; + const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); const scanObject = cxCommandOutput.payload.pop(); const scanShowObject = await auth.scanShow(scanObject.ID); - console.log(" Json object from successful wait mode case with branch: " +JSON.stringify(scanShowObject)); - expect(scanShowObject.payload.pop().Status).toEqual("Completed"); - + console.log(" Json object from failure case: " + JSON.stringify(scanShowObject)); + expect(scanShowObject.payload.pop().Status).toEqual("Failed"); }) - it('ScanCreate Failure case', async () => { + it('ScanCreate Successful case with Branch', async () => { const params = new Map(); - params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-failure"); + params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success-branch"); params.set(CxParamType.S, "./src"); - params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); + params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); params.set(CxParamType.BRANCH, "master"); - const auth = new CxWrapper(cxScanConfig); - - const data = await auth.scanCreate(params); - const cxCommandOutput: CxCommandOutput = data; + const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); const scanObject = cxCommandOutput.payload.pop(); const scanShowObject = await auth.scanShow(scanObject.ID); - console.log(" Json object from failure case: " + JSON.stringify(scanShowObject)); - expect(scanShowObject.payload.pop().Status).toEqual("Failed"); + console.log(" Json object from successful wait mode case with branch: " +JSON.stringify(scanShowObject)); + expect(scanShowObject.payload.pop().Status).toEqual("Completed"); + }) it('ScanCreate Successful case no wait mode', async () => { @@ -63,21 +61,11 @@ describe("ScanCreate cases",() => { params.set(CxParamType.SAST_PRESET_NAME, "Checkmarx Default Fake"); params.set(CxParamType.ADDITIONAL_PARAMETERS, "--async"); params.set(CxParamType.BRANCH, "master"); - const auth = new CxWrapper(cxScanConfig); - - const data = await auth.scanCreate(params); - const cxCommandOutput: CxCommandOutput = data; + const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); const scanObject = cxCommandOutput.payload.pop(); const scanShowObject = await auth.scanShow(scanObject.ID); - console.log(" Json object from successful no wait mode case: " + JSON.stringify(scanShowObject)) - expect(scanShowObject.payload.pop().Status).toEqual("Running") + console.log(" Json object from successful no wait mode case: " + JSON.stringify(scanShowObject)); + expect(scanShowObject.payload.pop().Status).toEqual("Running"); }) - - it('ScanList Successful case', async () => { - const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanList(""); - const cxCommandOutput: CxCommandOutput = data; - expect(cxCommandOutput.payload.length).toBeGreaterThan(0); - }); }); \ No newline at end of file From b46f365c2872301c398ca7c71438c10317809d59 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 17:21:24 +0000 Subject: [PATCH 22/28] fix tests increase timeout --- src/tests/ScanTest.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 26ce35be..1d1f665b 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -7,7 +7,8 @@ describe("ScanCreate cases",() => { let cxScanConfig = new BaseTest(); it('ScanList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const cxCommandOutput: CxCommandOutput = await auth.scanList(""); + let cxCommandOutput: CxCommandOutput = await auth.scanList(""); + cxCommandOutput = await auth.scanList(""); expect(cxCommandOutput.payload.length).toBeGreaterThan(0); }); it('ScanCreate Successful case wait mode', async () => { From fabf120789b5c8f5f3a3075ecff115e4191d3247 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 17:38:31 +0000 Subject: [PATCH 23/28] fix tests increase timeout --- src/tests/ScanTest.test.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 1d1f665b..e3fed760 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -7,10 +7,11 @@ describe("ScanCreate cases",() => { let cxScanConfig = new BaseTest(); it('ScanList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); - let cxCommandOutput: CxCommandOutput = await auth.scanList(""); - cxCommandOutput = await auth.scanList(""); - expect(cxCommandOutput.payload.length).toBeGreaterThan(0); + auth.scanList("").then((res)=>{ + expect(res.payload.length).toBeGreaterThan(0); + }); }); + it('ScanCreate Successful case wait mode', async () => { const params = new Map(); params.set(CxParamType.PROJECT_NAME, "ast-cli-javascript-integration-success"); @@ -18,8 +19,7 @@ describe("ScanCreate cases",() => { params.set(CxParamType.FILTER, "*.ts,!**/node_modules/**/*"); params.set(CxParamType.BRANCH, "master"); const auth = new CxWrapper(cxScanConfig); - const data = await auth.scanCreate(params); - const cxCommandOutput: CxCommandOutput = data; + const cxCommandOutput: CxCommandOutput = await auth.scanCreate(params); const scanObject = cxCommandOutput.payload.pop(); const scanShowObject = await auth.scanShow(scanObject.ID); console.log(" Json object from successful wait mode case: " + JSON.stringify(scanShowObject)); From 8b046dd0aa9a3bb4827dae313b534560b90e2807 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 17:43:14 +0000 Subject: [PATCH 24/28] fix tests increase timeout --- src/tests/ScanTest.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index e3fed760..978d34b2 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -7,9 +7,9 @@ describe("ScanCreate cases",() => { let cxScanConfig = new BaseTest(); it('ScanList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); - auth.scanList("").then((res)=>{ - expect(res.payload.length).toBeGreaterThan(0); - }); + const cxCommandOutput: CxCommandOutput = await auth.scanList(""); + console.log(" Json object from scanList successful case: " + JSON.stringify(CxCommandOutput)); + expect(cxCommandOutput.payload.length).toBeGreaterThan(0); }); it('ScanCreate Successful case wait mode', async () => { From 0f9330c12f88ac8bbc11a1f9d8b020bd9cd3fd5d Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 17:50:38 +0000 Subject: [PATCH 25/28] fix tests increase timeout --- src/tests/ScanTest.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 978d34b2..d2dd30eb 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -7,8 +7,8 @@ describe("ScanCreate cases",() => { let cxScanConfig = new BaseTest(); it('ScanList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const cxCommandOutput: CxCommandOutput = await auth.scanList(""); - console.log(" Json object from scanList successful case: " + JSON.stringify(CxCommandOutput)); + const cxCommandOutput: CxCommandOutput = await auth.scanList("limit=25"); + console.log(" Json object from scanList successful case: " + JSON.stringify(cxCommandOutput)); expect(cxCommandOutput.payload.length).toBeGreaterThan(0); }); From e84e576f845e814aa8b216a0e75cac61e2c45f45 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Thu, 11 Nov 2021 17:53:35 +0000 Subject: [PATCH 26/28] fix tests increase timeout --- src/tests/ScanTest.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index d2dd30eb..69d6c78b 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -7,9 +7,9 @@ describe("ScanCreate cases",() => { let cxScanConfig = new BaseTest(); it('ScanList Successful case', async () => { const auth = new CxWrapper(cxScanConfig); - const cxCommandOutput: CxCommandOutput = await auth.scanList("limit=25"); + const cxCommandOutput: CxCommandOutput = await auth.scanList(""); console.log(" Json object from scanList successful case: " + JSON.stringify(cxCommandOutput)); - expect(cxCommandOutput.payload.length).toBeGreaterThan(0); + expect(cxCommandOutput.exitCode).toBe(0); }); it('ScanCreate Successful case wait mode', async () => { From 21dee336c939760b40321dbefad4c68b633706c5 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Fri, 12 Nov 2021 16:49:37 +0000 Subject: [PATCH 27/28] fix some structure issues --- src/main/scan/CxScanConfig.ts | 8 ---- src/main/wrapper/CxConfig.ts | 8 ++++ src/main/wrapper/CxWrapper.ts | 79 ++++++++++++++++------------------- src/tests/AuthTest.test.ts | 4 +- 4 files changed, 47 insertions(+), 52 deletions(-) delete mode 100644 src/main/scan/CxScanConfig.ts create mode 100644 src/main/wrapper/CxConfig.ts diff --git a/src/main/scan/CxScanConfig.ts b/src/main/scan/CxScanConfig.ts deleted file mode 100644 index 48216071..00000000 --- a/src/main/scan/CxScanConfig.ts +++ /dev/null @@ -1,8 +0,0 @@ -export class CxScanConfig { - baseUri: string = ""; - pathToExecutable: string = ""; - clientId: string = " "; - clientSecret: string = " "; - apiKey: string = " "; - tenant:string =" "; -} \ No newline at end of file diff --git a/src/main/wrapper/CxConfig.ts b/src/main/wrapper/CxConfig.ts new file mode 100644 index 00000000..12a0f925 --- /dev/null +++ b/src/main/wrapper/CxConfig.ts @@ -0,0 +1,8 @@ +export class CxConfig { + baseUri: string = undefined; + pathToExecutable: string = undefined; + clientId: string = undefined; + clientSecret: string = undefined; + apiKey: string = undefined; + tenant:string =undefined; +} \ No newline at end of file diff --git a/src/main/wrapper/CxWrapper.ts b/src/main/wrapper/CxWrapper.ts index 82c3ebce..73ea76f1 100644 --- a/src/main/wrapper/CxWrapper.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -1,4 +1,4 @@ -import {CxScanConfig} from "../scan/CxScanConfig"; +import {CxConfig} from "./CxConfig"; import {CxParamType} from "./CxParamType"; import {CxConstants} from "./CxConstants"; import {ExecutionService} from "./ExecutionService"; @@ -10,68 +10,63 @@ import * as os from "os"; type ParamTypeMap = Map; export class CxWrapper { - baseUri: string = ""; - clientId: string = ""; - clientSecret: string = ""; - apiKey: string = ""; - pathToExecutable: string; - tenant: string; - - constructor(cxScanConfig: CxScanConfig) { + config: CxConfig = new CxConfig(); + + constructor(cxScanConfig: CxConfig) { let path = require("path"); if (cxScanConfig.clientId && cxScanConfig.clientSecret) { logger.info("Received clientId and clientSecret"); - this.clientId = cxScanConfig.clientId; - this.clientSecret = cxScanConfig.clientSecret; + this.config.clientId = cxScanConfig.clientId; + this.config.clientSecret = cxScanConfig.clientSecret; } else if (cxScanConfig.apiKey) { - this.apiKey = cxScanConfig.apiKey; + this.config.apiKey = cxScanConfig.apiKey; } else { logger.info("Did not receive ClientId/Secret or ApiKey from cli arguments"); } let executablePath: string; if (cxScanConfig.pathToExecutable) { - this.pathToExecutable = cxScanConfig.pathToExecutable; + this.config.pathToExecutable = cxScanConfig.pathToExecutable; } else if (process.platform === 'win32') { executablePath = path.join(__dirname, '/resources/cx.exe'); - this.pathToExecutable = executablePath; + this.config.pathToExecutable = executablePath; } else if (process.platform === 'darwin') { executablePath = path.join(__dirname, '/resources/cx-mac'); - this.pathToExecutable = executablePath; - fs.chmodSync(this.pathToExecutable, 0o777); + this.config.pathToExecutable = executablePath; + fs.chmodSync(this.config.pathToExecutable, 0o777); } else { executablePath = path.join(__dirname, '/resources/cx-linux'); - this.pathToExecutable = executablePath; - fs.chmodSync(this.pathToExecutable, 0o777); + this.config.pathToExecutable = executablePath; + fs.chmodSync(this.config.pathToExecutable, 0o777); } if (cxScanConfig.baseUri) { - this.baseUri = cxScanConfig.baseUri; + this.config.baseUri = cxScanConfig.baseUri; } if (cxScanConfig.tenant) { - this.tenant = cxScanConfig.tenant; + this.config.tenant = cxScanConfig.tenant; } } initializeCommands(formatRequired: boolean): string[] { const list: string[] = []; - if (this.clientId) { + if (this.config.clientId) { list.push(CxConstants.CLIENT_ID); - list.push(this.clientId); + list.push(this.config.clientId); } - if (this.clientSecret) { + if (this.config.clientSecret) { list.push(CxConstants.CLIENT_SECRET); - list.push(this.clientSecret); + list.push(this.config.clientSecret); } - if (this.apiKey) { + if (this.config.apiKey) { list.push(CxConstants.API_KEY); - list.push(this.apiKey); + list.push(this.config.apiKey); } - if (this.baseUri) { + if (this.config.baseUri) { list.push(CxConstants.BASE_URI); - list.push(this.baseUri); + list.push(this.config.baseUri); } - if (this.tenant) { + if (this.config.tenant) { list.push(CxConstants.TENANT); - list.push(this.tenant); + list.push(this.config.tenant); } if (formatRequired) { list.push(CxConstants.FORMAT); @@ -101,21 +96,21 @@ export class CxWrapper { } }); const exec = new ExecutionService(); - return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.SCAN_TYPE); + return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.SCAN_TYPE); } async authValidate(): Promise { const commands: string[] = [CxConstants.CMD_AUTH, CxConstants.SUB_CMD_VALIDATE]; commands.push(...this.initializeCommands(false)); let exec = new ExecutionService(); - return await exec.executeCommands(this.pathToExecutable, commands); + return await exec.executeCommands(this.config.pathToExecutable, commands); } async scanShow(id: string): Promise { const commands: string[] = [CxConstants.CMD_SCAN, CxConstants.SUB_CMD_SHOW, CxConstants.SCAN_ID, id]; commands.push(...this.initializeCommands(true)); const exec = new ExecutionService(); - return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.SCAN_TYPE); + return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.SCAN_TYPE); } async scanList(filters:string): Promise { @@ -123,7 +118,7 @@ export class CxWrapper { const commands: string[] = [CxConstants.CMD_SCAN, "list"].concat(validated_filters); commands.push(...this.initializeCommands(true)); const exec = new ExecutionService(); - return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.SCAN_TYPE); + return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.SCAN_TYPE); } async projectList(filters:string): Promise { @@ -131,7 +126,7 @@ export class CxWrapper { const commands: string[] = [CxConstants.CMD_PROJECT, "list"].concat(validated_filters); commands.push(...this.initializeCommands(true)); const exec = new ExecutionService(); - return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.PROJECT_TYPE); + return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.PROJECT_TYPE); } async projectBranches(projectId: string, filters: string): Promise { @@ -140,14 +135,14 @@ export class CxWrapper { const commands: string[] = [CxConstants.CMD_PROJECT , CxConstants.SUB_CMD_BRANCHES, CxConstants.PROJECT_ID, projectId].concat(validated_filters); commands.push(...this.initializeCommands(false)); const exec = new ExecutionService(); - return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.PROJECT_TYPE); + return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.PROJECT_TYPE); } async projectShow(projectId: string): Promise { const commands: string[] = [CxConstants.CMD_PROJECT, CxConstants.SUB_CMD_SHOW, CxConstants.PROJECT_ID,projectId]; commands.push(...this.initializeCommands(true)); const exec = new ExecutionService(); - return await exec.executeCommands(this.pathToExecutable, commands, CxConstants.PROJECT_TYPE); + return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.PROJECT_TYPE); } async getResultsList(scanId: string) { @@ -155,9 +150,9 @@ export class CxWrapper { const fileName = new Date().getTime().toString(); const commands = this.createResultCommand(scanId, CxConstants.FORMAT_JSON, fileName, os.tmpdir()) // Executes the command and creates a result file - await exec.executeResultsCommands(this.pathToExecutable, commands) + await exec.executeResultsCommands(this.config.pathToExecutable, commands) // Reads the result file and retrieves the results - return exec.executeResultsCommandsFile(scanId, CxConstants.FORMAT_JSON, CxConstants.FORMAT_JSON_FILE, commands,this.pathToExecutable,fileName); + return exec.executeResultsCommandsFile(scanId, CxConstants.FORMAT_JSON, CxConstants.FORMAT_JSON_FILE, commands,this.config.pathToExecutable,fileName); } async getResultsSummary(scanId: string): Promise { @@ -165,15 +160,15 @@ export class CxWrapper { const fileName = new Date().getTime().toString(); const commands = this.createResultCommand(scanId, CxConstants.FORMAT_HTML_CLI, fileName, os.tmpdir()); // Executes the command and creates a result file - await exec.executeResultsCommands(this.pathToExecutable, commands); + await exec.executeResultsCommands(this.config.pathToExecutable, commands); // Reads the result file and retrieves the results - return exec.executeResultsCommandsFile(scanId, CxConstants.FORMAT_HTML, CxConstants.FORMAT_HTML_FILE, commands,this.pathToExecutable,fileName); + return exec.executeResultsCommandsFile(scanId, CxConstants.FORMAT_HTML, CxConstants.FORMAT_HTML_FILE, commands,this.config.pathToExecutable,fileName); } async getResults(scanId: string, resultType:string, outputFileName: string, outputFilePath: string) { const commands = this.createResultCommand(scanId, resultType, outputFileName, outputFilePath) const exec = new ExecutionService(); - return await exec.executeCommands(this.pathToExecutable, commands); + return await exec.executeCommands(this.config.pathToExecutable, commands); } createResultCommand(scanId: string, reportFormat: string, outputFileName: string, outputPath: string): string[] { diff --git a/src/tests/AuthTest.test.ts b/src/tests/AuthTest.test.ts index 032a0278..f5f78e20 100644 --- a/src/tests/AuthTest.test.ts +++ b/src/tests/AuthTest.test.ts @@ -1,6 +1,6 @@ import {CxWrapper} from '../main/wrapper/CxWrapper'; import {CxCommandOutput} from "../main/wrapper/CxCommandOutput"; -import {CxScanConfig} from "../main/scan/CxScanConfig"; +import {CxConfig} from "../main/wrapper/CxConfig"; import {BaseTest} from "./BaseTest"; describe("Authentication validation",() => { @@ -12,7 +12,7 @@ describe("Authentication validation",() => { }); it('Result authentication failed case', async () => { - const cxScanConfig_fail = new CxScanConfig(); + const cxScanConfig_fail = new CxConfig(); cxScanConfig_fail.baseUri = "error"; cxScanConfig_fail.clientId = "error"; cxScanConfig_fail.clientSecret = "error"; From c683faee46d800ab183ca1f65eaed0e062a849d3 Mon Sep 17 00:00:00 2001 From: tiagobcx Date: Fri, 12 Nov 2021 17:05:56 +0000 Subject: [PATCH 28/28] fix some structure issues --- src/main/wrapper/CxConfig.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/wrapper/CxConfig.ts b/src/main/wrapper/CxConfig.ts index 12a0f925..853d82e4 100644 --- a/src/main/wrapper/CxConfig.ts +++ b/src/main/wrapper/CxConfig.ts @@ -1,8 +1,8 @@ export class CxConfig { - baseUri: string = undefined; - pathToExecutable: string = undefined; - clientId: string = undefined; - clientSecret: string = undefined; - apiKey: string = undefined; - tenant:string =undefined; + baseUri: string = ""; + pathToExecutable: string = ""; + clientId: string = ""; + clientSecret: string = ""; + apiKey: string = ""; + tenant:string =""; } \ No newline at end of file