summaryrefslogtreecommitdiff
path: root/packages/core/src/utils/testUtils.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/core/src/utils/testUtils.ts')
-rw-r--r--packages/core/src/utils/testUtils.ts87
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();
+}