diff --git a/tests/unit/native-codex-turn-pin-10379.test.ts b/tests/unit/native-codex-turn-pin-10379.test.ts index df469648b7..cfe719da0a 100644 --- a/tests/unit/native-codex-turn-pin-10379.test.ts +++ b/tests/unit/native-codex-turn-pin-10379.test.ts @@ -20,6 +20,7 @@ const { getCircuitBreaker, resetAllCircuitBreakers } = await import("../../src/shared/utils/circuitBreaker.ts"); const { recordProviderCooldown, clearCooldownState } = await import("../../open-sse/services/providerCooldownTracker.ts"); +const { PROVIDER_PROFILES } = await import("../../open-sse/config/constants.ts"); const { resolveResilienceSettings } = await import("../../src/lib/resilience/settings.ts"); const BODY = { @@ -222,9 +223,13 @@ test("isPinnedTargetModelScopedUnusable distinguishes model lockout from provide false ); - // Reset breaker, test provider cooldown + // Reset breaker, test provider cooldown. Since #12247 the global provider + // cooldown honors the PROVIDER_PROFILES window gate: the provider only counts + // as cooling after providerFailureThreshold failures inside the window. cb.reset(); - recordProviderCooldown("antigravity", undefined, resilienceSettings); + for (let i = 0; i < PROVIDER_PROFILES.oauth.providerFailureThreshold; i++) { + recordProviderCooldown("antigravity", undefined, resilienceSettings); + } assert.equal( await isPinnedTargetModelScopedUnusable({ target, diff --git a/tests/unit/native-codex-turn-pin-model-scoped-fallback.test.ts b/tests/unit/native-codex-turn-pin-model-scoped-fallback.test.ts index 314dd3efdb..595161d64e 100644 --- a/tests/unit/native-codex-turn-pin-model-scoped-fallback.test.ts +++ b/tests/unit/native-codex-turn-pin-model-scoped-fallback.test.ts @@ -19,6 +19,7 @@ const { } = await import("../../open-sse/services/combo/nativeCodexTurnPin.ts"); const { recordProviderCooldown, isProviderInCooldown, clearCooldownState } = await import("../../open-sse/services/providerCooldownTracker.ts"); +const { PROVIDER_PROFILES } = await import("../../open-sse/config/constants.ts"); const { getCircuitBreaker, resetAllCircuitBreakers } = await import("../../src/shared/utils/circuitBreaker.ts"); const { resolveResilienceSettings } = await import("../../src/lib/resilience/settings.ts"); @@ -403,7 +404,11 @@ describe("Native Codex Turn Pin model-scoped fallback", () => { allCombos: null, }); - recordProviderCooldown("antigravity", undefined, settings); + // #12247: the window gate needs providerFailureThreshold failures before + // the whole provider counts as cooling. + for (let i = 0; i < PROVIDER_PROFILES.oauth.providerFailureThreshold; i++) { + recordProviderCooldown("antigravity", undefined, settings); + } assert.equal(isProviderInCooldown("antigravity", undefined, settings), true); const attempted: string[] = [];