diff options
| author | Bryan Morgan <[email protected]> | 2025-06-24 18:48:55 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-06-24 22:48:55 +0000 |
| commit | e356949d3fb600abd1a993949300a6c3e0008621 (patch) | |
| tree | d6c32b08bc47e2f3c2d8f6f27e890c1af3ade480 /packages/core/src/utils/testUtils.ts | |
| parent | 4bf18da2b08e145d2f4c91f2331347bf8568aed3 (diff) | |
[JUNE 25] Permanent failover to Flash model for OAuth users after persistent 429 errors (#1376)
Co-authored-by: Scott Densmore <[email protected]>
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(); +} |
