Skip to content

Commit 0553d9e

Browse files
committed
added "multiple singleton" - one for each different scan configuration and log file path
1 parent 6c37f42 commit 0553d9e

File tree

3 files changed

+14
-9
lines changed

3 files changed

+14
-9
lines changed

src/main/wrapper/CxWrapper.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {Semaphore} from "async-mutex";
1313
type ParamTypeMap = Map<CxParamType, string>;
1414

1515
export class CxWrapper {
16-
private static instance: CxWrapper;
16+
private static instances =new Map<string, CxWrapper>();
1717
private static semaphore = new Semaphore(1); // Semaphore with 1 slot
1818
config: CxConfig;
1919
cxInstaller: CxInstaller;
@@ -51,12 +51,19 @@ export class CxWrapper {
5151

5252
static async getInstance(cxScanConfig: CxConfig, logFilePath: string): Promise<CxWrapper> {
5353
const [_, release] = await this.semaphore.acquire();
54-
if (!CxWrapper.instance) {
55-
CxWrapper.instance = new CxWrapper(cxScanConfig, logFilePath);
54+
let key = this.generateKey(cxScanConfig, logFilePath);
55+
let wrapper = CxWrapper.instances.get(key);
56+
if (!wrapper) {
57+
wrapper = new CxWrapper(cxScanConfig, logFilePath);
58+
CxWrapper.instances.set(key, wrapper);
5659
}
5760
release();
5861

59-
return CxWrapper.instance;
62+
return wrapper;
63+
}
64+
65+
static generateKey(config:CxConfig,logFilePath:string): string {
66+
return `${config.baseUri}${config.baseAuthUri}${config.clientId}${config.clientSecret}${config.apiKey}${config.tenant}${config.additionalParameters}${config.pathToExecutable}${logFilePath}`.toLowerCase();
6067
}
6168

6269
async init(): Promise<void> {

src/main/wrapper/CxWrapperFactory.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,9 @@ import {CxWrapper} from "./CxWrapper";
22
import {CxConfig} from "./CxConfig";
33

44
class CxWrapperFactory {
5-
static async createWrapper(cxScanConfig: CxConfig, logFilePath?: string, type?: string): Promise<CxWrapper> {
5+
static async createWrapper(cxScanConfig: CxConfig, logFilePath?: string): Promise<CxWrapper> {
66
let wrapper: CxWrapper;
77
wrapper = await CxWrapper.getInstance(cxScanConfig, logFilePath);
8-
if (type === 'mock') {
9-
wrapper = wrapper.cloneWithNewConfig(cxScanConfig);
10-
}
118
await wrapper.init();
129
return wrapper;
1310
}

src/tests/AuthTest.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ describe("Authentication validation", () => {
1818
cxScanConfig_fail.clientSecret = "error";
1919
cxScanConfig_fail.tenant = process.env["CX_TENANT"];
2020
cxScanConfig_fail.apiKey = "error";
21-
const auth = await CxWrapperFactory.createWrapper(cxScanConfig_fail, null, 'mock');
21+
let auth = await CxWrapperFactory.createWrapper(cxScanConfig_fail);
22+
auth = auth.cloneWithNewConfig(cxScanConfig_fail);
2223
const cxCommandOutput: CxCommandOutput = await auth.authValidate();
2324
expect(cxCommandOutput.exitCode).toBe(1);
2425
});

0 commit comments

Comments
 (0)