From 1ffa1fabf3fc5382b2d8c0138dd1a26769565d87 Mon Sep 17 00:00:00 2001 From: hannesrudolph Date: Tue, 5 Aug 2025 09:23:49 -0700 Subject: [PATCH] fix: address PR review feedback - Add public getter method getMultiInstanceConfig() to GlobalStateQueueStorage to fix encapsulation issue - Update QueuedTelemetryClient to use the new getter method instead of accessing private property - Add mock for QueuedTelemetryClient in CloudService tests to fix failing unit tests - All tests now passing on both Ubuntu and Windows platforms --- .../cloud/src/__tests__/CloudService.test.ts | 27 +++++++++++++++++++ .../src/queue/GlobalStateQueueStorage.ts | 7 +++++ .../cloud/src/queue/QueuedTelemetryClient.ts | 8 +++--- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/packages/cloud/src/__tests__/CloudService.test.ts b/packages/cloud/src/__tests__/CloudService.test.ts index fd3ae9b9c0..9d1d7d05cf 100644 --- a/packages/cloud/src/__tests__/CloudService.test.ts +++ b/packages/cloud/src/__tests__/CloudService.test.ts @@ -34,6 +34,33 @@ vi.mock("../ShareService") vi.mock("../TelemetryClient") +vi.mock("../queue", () => ({ + QueuedTelemetryClient: vi.fn().mockImplementation(() => ({ + capture: vi.fn().mockResolvedValue(undefined), + processQueue: vi.fn().mockResolvedValue(0), + getQueueStatus: vi.fn().mockResolvedValue({ + queueSize: 0, + oldestEventAge: undefined, + processingState: "idle", + lastProcessedAt: undefined, + lastError: undefined, + storageStats: { + sizeInBytes: 0, + sizeInMB: 0, + utilizationPercent: 0, + eventCount: 0, + }, + }), + getLockStats: vi.fn().mockResolvedValue({ + hasLock: false, + lockHolder: undefined, + lockAge: undefined, + isExpired: undefined, + }), + shutdown: vi.fn().mockResolvedValue(undefined), + })), +})) + describe("CloudService", () => { let mockContext: vscode.ExtensionContext let mockAuthService: { diff --git a/packages/cloud/src/queue/GlobalStateQueueStorage.ts b/packages/cloud/src/queue/GlobalStateQueueStorage.ts index 5cd5782c74..7954e11721 100644 --- a/packages/cloud/src/queue/GlobalStateQueueStorage.ts +++ b/packages/cloud/src/queue/GlobalStateQueueStorage.ts @@ -371,4 +371,11 @@ export class GlobalStateQueueStorage implements QueueStorage { hostname: this.hostname, } } + + /** + * Get multi-instance configuration + */ + getMultiInstanceConfig(): Required { + return this.multiInstanceConfig + } } diff --git a/packages/cloud/src/queue/QueuedTelemetryClient.ts b/packages/cloud/src/queue/QueuedTelemetryClient.ts index e61e2e87bc..53b0e36d0c 100644 --- a/packages/cloud/src/queue/QueuedTelemetryClient.ts +++ b/packages/cloud/src/queue/QueuedTelemetryClient.ts @@ -58,7 +58,8 @@ export class QueuedTelemetryClient extends BaseTelemetryClient { * Set up periodic queue processing for leader mode */ private setupPeriodicProcessing(): void { - const interval = this.storage["multiInstanceConfig"].lockCheckIntervalMs || 5000 + const config = this.storage.getMultiInstanceConfig() + const interval = config.lockCheckIntervalMs || 5000 this.processingInterval = setInterval(async () => { try { @@ -111,13 +112,14 @@ export class QueuedTelemetryClient extends BaseTelemetryClient { > { const status = await this.queue.getStatus() const instanceInfo = this.storage.getInstanceInfo() + const config = this.storage.getMultiInstanceConfig() return { ...status, instanceInfo: { ...instanceInfo, - multiInstanceEnabled: this.storage["multiInstanceConfig"].enabled, - multiInstanceMode: this.storage["multiInstanceConfig"].mode, + multiInstanceEnabled: config.enabled, + multiInstanceMode: config.mode, }, } }