diff options
Diffstat (limited to 'packages/core/src/utils/testUtils.ts')
| -rw-r--r-- | packages/core/src/utils/testUtils.ts | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/packages/core/src/utils/testUtils.ts b/packages/core/src/utils/testUtils.ts new file mode 100644 index 00000000..a0010b10 --- /dev/null +++ b/packages/core/src/utils/testUtils.ts @@ -0,0 +1,87 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Testing utilities for simulating 429 errors in unit tests + */ + +let requestCounter = 0; +let simulate429Enabled = false; +let simulate429AfterRequests = 0; +let simulate429ForAuthType: string | undefined; +let fallbackOccurred = false; + +/** + * Check if we should simulate a 429 error for the current request + */ +export function shouldSimulate429(authType?: string): boolean { + if (!simulate429Enabled || fallbackOccurred) { + return false; + } + + // If auth type filter is set, only simulate for that auth type + if (simulate429ForAuthType && authType !== simulate429ForAuthType) { + return false; + } + + requestCounter++; + + // If afterRequests is set, only simulate after that many requests + if (simulate429AfterRequests > 0) { + return requestCounter > simulate429AfterRequests; + } + + // Otherwise, simulate for every request + return true; +} + +/** + * Reset the request counter (useful for tests) + */ +export function resetRequestCounter(): void { + requestCounter = 0; +} + +/** + * Disable 429 simulation after successful fallback + */ +export function disableSimulationAfterFallback(): void { + fallbackOccurred = true; +} + +/** + * Create a simulated 429 error response + */ +export function createSimulated429Error(): Error { + const error = new Error('Rate limit exceeded (simulated)') as Error & { + status: number; + }; + error.status = 429; + return error; +} + +/** + * Reset simulation state when switching auth methods + */ +export function resetSimulationState(): void { + fallbackOccurred = false; + resetRequestCounter(); +} + +/** + * Enable/disable 429 simulation programmatically (for tests) + */ +export function setSimulate429( + enabled: boolean, + afterRequests = 0, + forAuthType?: string, +): void { + simulate429Enabled = enabled; + simulate429AfterRequests = afterRequests; + simulate429ForAuthType = forAuthType; + fallbackOccurred = false; // Reset fallback state when simulation is re-enabled + resetRequestCounter(); +} |
