From 8ddedfb83d1cfca978f3387c124dc8ccbb4aa483 Mon Sep 17 00:00:00 2001 From: anjali-deore Date: Thu, 24 Apr 2025 10:44:47 +0530 Subject: [PATCH] added support for engineAPI list --- src/main/wrapper/CxConstants.ts | 3 ++ src/main/wrapper/CxWrapper.ts | 51 +++++++++++++++++++++++++++++++++ src/tests/EngineTest.test.ts | 34 ++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 src/tests/EngineTest.test.ts diff --git a/src/main/wrapper/CxConstants.ts b/src/main/wrapper/CxConstants.ts index 49d7643d..3cc15c8f 100644 --- a/src/main/wrapper/CxConstants.ts +++ b/src/main/wrapper/CxConstants.ts @@ -30,6 +30,8 @@ export enum CxConstants { CMD_PROJECT = "project", SUB_CMD_BRANCHES = "branches", CMD_SCAN = "scan", + CMD_ENGINE="engine", + FLAG_ENGINE_NAME="--engine-name", SUB_CMD_SHOW = "show", SUB_CMD_CANCEL = "cancel", SUB_CMD_LIST = "list", @@ -62,6 +64,7 @@ export enum CxConstants { CMD_SAST_CHAT_RESULT_SOURCE_FILE = "--source-dir", SCAN_INFO_FORMAT = "--scan-info-format", FORMAT = "--format", + OUTPUT_FORMAT="--output-format", FORMAT_JSON = "json", FORMAT_HTML = "html", FORMAT_JSON_FILE = ".json", diff --git a/src/main/wrapper/CxWrapper.ts b/src/main/wrapper/CxWrapper.ts index 228554ea..0aef3658 100644 --- a/src/main/wrapper/CxWrapper.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -94,6 +94,45 @@ export class CxWrapper { return list; } + + initializeCommandsEngine(formatRequired: boolean): string[] { + const list: string[] = []; + if (this.config.clientId) { + list.push(CxConstants.CLIENT_ID); + list.push(this.config.clientId); + } + if (this.config.clientSecret) { + list.push(CxConstants.CLIENT_SECRET); + list.push(this.config.clientSecret); + } + if (this.config.apiKey) { + list.push(CxConstants.API_KEY); + list.push(this.config.apiKey); + } + if (this.config.baseUri) { + list.push(CxConstants.BASE_URI); + list.push(this.config.baseUri); + } + if (this.config.baseAuthUri) { + list.push(CxConstants.BASE_AUTH_URI); + list.push(this.config.baseAuthUri); + } + if (this.config.tenant) { + list.push(CxConstants.TENANT); + list.push(this.config.tenant); + } + if(this.config.additionalParameters){ + this.prepareAdditionalParams(this.config.additionalParameters).forEach(function (param){ + list.push(param) + }) + } + if (formatRequired) { + list.push(CxConstants.OUTPUT_FORMAT); + list.push(CxConstants.FORMAT_JSON); + } + return list; + } + async authValidate(): Promise { const commands: string[] = [CxConstants.CMD_AUTH, CxConstants.SUB_CMD_VALIDATE]; commands.push(...this.initializeCommands(false)); @@ -169,6 +208,18 @@ export class CxWrapper { return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.SCAN_TYPE); } + + async engineList(engineName:string):Promise{ + const commands:string[]=[CxConstants.CMD_ENGINE,"list-api"] + if(engineName!=""){ + commands.push(CxConstants.FLAG_ENGINE_NAME); + commands.push(engineName) + } + commands.push(...this.initializeCommandsEngine(true)); + const exec = new ExecutionService(); + return await exec.executeCommands(this.config.pathToExecutable, commands); + } + async projectList(filters: string): Promise { const validated_filters = this.filterArguments(filters); const commands: string[] = [CxConstants.CMD_PROJECT, "list"].concat(validated_filters); diff --git a/src/tests/EngineTest.test.ts b/src/tests/EngineTest.test.ts new file mode 100644 index 00000000..faea2416 --- /dev/null +++ b/src/tests/EngineTest.test.ts @@ -0,0 +1,34 @@ +import {BaseTest} from "./BaseTest"; +import {CxWrapper} from '../main/wrapper/CxWrapper'; +import {CxCommandOutput} from "../main/wrapper/CxCommandOutput"; + +describe("Engine cases",()=>{ + const cxScanConfig = new BaseTest(); + + it("ALL Engine API List case",async ()=>{ + const auth = new CxWrapper(cxScanConfig); + const engineList: CxCommandOutput = await auth.engineList(""); + expect(engineList.payload.length).toBeGreaterThanOrEqual(0); + expect(engineList.payload.some(engine => engine.EngineName === "SAST")).toBe(true); + expect(engineList.payload.some(engine => engine.EngineName === "SCA")).toBe(true); + expect(engineList.payload.some(engine => engine.EngineName === "DAST")).toBe(true); + }); + + it("SAST Engine API List case",async ()=>{ + const auth = new CxWrapper(cxScanConfig); + const engineList: CxCommandOutput = await auth.engineList("sast"); + expect(engineList.payload.length).toBeGreaterThanOrEqual(0); + expect(engineList.payload.some(engine => engine.EngineName === "SAST")).toBe(true); + expect(engineList.payload.some(engine => engine.EngineName === "SCA")).toBe(false); + expect(engineList.payload.some(engine => engine.EngineName === "DAST")).toBe(false); + }); + + it("SCA Engine API List case",async ()=>{ + const auth = new CxWrapper(cxScanConfig); + const engineList: CxCommandOutput = await auth.engineList("sca"); + expect(engineList.payload.length).toBeGreaterThanOrEqual(0); + expect(engineList.payload.some(engine => engine.EngineName === "SAST")).toBe(false); + expect(engineList.payload[0].EngineName).toBe("SCA"); + expect(engineList.payload.some(engine => engine.EngineName === "DAST")).toBe(false); + }); +}) \ No newline at end of file