Files
ewoooc/tests/test_gemini_fallback_guard.py
OoO a46396ca7f
All checks were successful
CD Pipeline / deploy (push) Successful in 1m6s
[V10.350] 關閉 Gemini 預設備援出站
2026-05-20 20:10:21 +08:00

74 lines
2.5 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Gemini fallback kill-switch contract."""
from services.ai_provider import AIProviderService, AIResponse
from services.gemini_service import GeminiService
def test_gemini_guard_defaults_disabled(monkeypatch):
from services.gemini_guard import get_gemini_api_key, is_gemini_fallback_enabled
monkeypatch.delenv("GEMINI_FALLBACK_ENABLED", raising=False)
monkeypatch.setenv("GEMINI_API_KEY", "test-key")
assert is_gemini_fallback_enabled("test") is False
assert get_gemini_api_key("test") == ""
def test_ai_provider_does_not_call_gemini_when_guard_disabled(monkeypatch):
monkeypatch.delenv("GEMINI_FALLBACK_ENABLED", raising=False)
service = AIProviderService(default_provider="ollama")
failed_ollama = AIResponse(
success=False,
content="",
model="qwen2.5-coder:7b",
provider="ollama",
error="ollama down",
)
def forbidden_fallback():
raise AssertionError("Gemini fallback must be blocked by default")
result = service._gemini_fallback(failed_ollama, forbidden_fallback)
assert result.success is False
assert result.provider == "ollama"
assert "GEMINI_FALLBACK_ENABLED=false" in (result.error or "")
def test_gemini_service_check_connection_is_blocked_by_default(monkeypatch):
monkeypatch.delenv("GEMINI_FALLBACK_ENABLED", raising=False)
monkeypatch.setenv("GEMINI_API_KEY", "test-key")
service = GeminiService()
def forbidden_init():
raise AssertionError("SDK initialization must not run when fallback is disabled")
monkeypatch.setattr(service, "_ensure_initialized", forbidden_init)
result = service.generate("hello")
assert result.success is False
assert "GEMINI_FALLBACK_ENABLED=false" in (result.error or "")
def test_mcp_collector_does_not_initialize_gemini_when_guard_disabled(monkeypatch):
import services.mcp_collector_service as mcp_mod
monkeypatch.delenv("GEMINI_FALLBACK_ENABLED", raising=False)
monkeypatch.setattr(mcp_mod, "GEMINI_API_KEY", "test-key")
service = mcp_mod.MCPCollectorService()
assert service._ensure_init() is False
assert service._genai is None
def test_openclaw_direct_gemini_call_is_blocked_by_default(monkeypatch):
import services.openclaw_strategist_service as svc
monkeypatch.delenv("GEMINI_FALLBACK_ENABLED", raising=False)
monkeypatch.setattr(svc, "GEMINI_API_KEY", "test-key")
assert svc._call_gemini("system", "user", caller="openclaw_qa_gemini_fallback") is None