grantforge-api / scripts /test_e2e_resilience.py
GrantForge Bot
Deploy to Hugging Face
afd56bc
import os
import sys
# Musimy dodać ścieżkę do sys.path przed importami
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../backend")))
import pytest
import asyncio
from dotenv import load_dotenv
# Wczytujemy zmienne
load_dotenv("../backend/.env")
@pytest.mark.asyncio
async def test_llm_fallback_resilience():
"""
Test weryfikujący poprawność działania llm_router i circuit breakera.
Wymusza błędy kluczy API, aby sprawdzić czy system bez przerw przełącza się na fallback.
"""
# Krok 0: Mock autoryzacji (lub użycie realnego tokenu jeśli to możliwe)
# W testach E2E z appką w pamięci można zmockować `verify_token`.
# Dla uproszczenia ustawiamy klucz na zepsuty.
original_grok_key = os.environ.get("GROK_API_KEY")
os.environ["GROK_API_KEY"] = "INVALID_KEY_FOR_TESTING_FALLBACK"
try:
from core.llm_router import get_llm
from langchain_core.messages import SystemMessage, HumanMessage
# Wymuszamy model Grok
llm = get_llm(task_type="default")
# Zapytanie powinno zawieść na Grok i pójść do Gemini
res = llm.invoke(
[
SystemMessage(content="Jesteś pomocnym asystentem."),
HumanMessage(content="Odpowiedz słowem 'ZROZUMIANO'"),
]
)
assert res.content, "Odpowiedź jest pusta, fallback nie zadziałał!"
print(f"Fallback SUCCESS: Otrzymano odpowiedź: {res.content}")
except Exception as e:
pytest.fail(f"Fallback fail! Złapano wyjątek: {e}")
finally:
if original_grok_key:
os.environ["GROK_API_KEY"] = original_grok_key
else:
del os.environ["GROK_API_KEY"]
if __name__ == "__main__":
asyncio.run(test_llm_fallback_resilience())