3.5 KiB
3.5 KiB
Testing
Özet: Fiber v3 test framework'ü ile mock upstream sunucuları kullanarak proxy mantığının test edilmesi. Transform katmanı unit testleri internal/transform, entegrasyon testleri tests/ paketinde.
Kütüphaneler: Go testing, net/http/httptest, Fiber v3 test (app.Test()), encoding/json
Bağlantılar: OpenAIHandler, AnthropicHandler, BifrostTransform, ProxyEngine, Index
Test Stratejisi
mockUpstream(t, status, body)—httptest.Serverile sabit yanıt dönen test sunucusunewTestApp(cfg)— OpenAI handler bağlı Fiber test uygulaması (DB'siz)newAnthropicTestApp(cfg)— Anthropic handler bağlı Fiber test uygulaması (DB'siz)- Gerçek upstream'e ihtiyaç yok, mock sunucu kullanılır
app.Test(req, fiber.TestConfig{Timeout: -1})ile Fiber native HTTP test
Transform Unit Testleri (internal/transform)
Anthropic → OpenAI (AnthropicToBifrost)
| Test | Açıklama |
|---|---|
TestAnthropicToBifrost_Basic |
Temel dönüşüm, model prefix + max_tokens + messages |
TestAnthropicToBifrost_WithSystem |
system alanının messages[0]'a eklenmesi |
TestAnthropicToBifrost_ModelPrefix |
6 model için prefix tahmini (claude→Anthropic/, deepseek→DeepSeek/, vb.) |
TestAnthropicToBifrost_StreamPassthrough |
stream: true korunur |
TestAnthropicToBifrost_InvalidJSON |
Geçersiz JSON → hata döner |
OpenAI → Anthropic (BifrostToAnthropic)
| Test | Açıklama |
|---|---|
TestBifrostToAnthropic_Basic |
Temel dönüşüm, content/text/stop_reason kontrolü |
TestBifrostToAnthropic_EmptyFinishReason |
Boş finish_reason → end_turn |
TestBifrostToAnthropic_MultipleChoices |
2 choice'ın 2 content block'a dönüşümü |
TestBifrostToAnthropic_InvalidJSON |
Geçersiz JSON → hata döner |
Entegrasyon Testleri (tests/anthropic_test.go, tests/openai_test.go)
| Test | Açıklama |
|---|---|
TestAnthropicProxy_Success |
Full Bifrost döngüsü: Anthropic→OpenAI→forward→OpenAI→Anthropic |
TestAnthropicProxy_InvalidFormatPassthrough |
Geçersiz Anthropic formatı → raw passthrough |
TestAnthropicProxy_UpstreamError |
Upstream kapalı → 502 Bad Gateway |
TestAnthropicProxy_ModelsList |
GET /anthropic/v1/models → DeepSeek model listesi |
TestAnthropicProxy_EmptyBody |
Boş body → varsayılan "ready" yanıtı |
TestAnthropicProxy_HEAD |
HEAD → 404 |
TestAnthropicProxy_xApiKeyConversion |
x-api-key header'ının Authorization: Bearer'a dönüşümü |
TestAnthropicProxy_DefaultModelInjection |
İstekte model yoksa OPENAI_MODEL enjekte edilir (zaten "/" var, prefix eklenmez) |
TestAnthropicProxy_DefaultModelInjection_NopWhenModelExists |
İstekte model varsa OPENAI_MODEL override etmez |
TestAnthropicProxy_TransformErrorFallsbackToPassthrough |
Upstream yanıtı bozuksa raw passthrough |
TestOpenAIProxy_Success |
OpenAI handler başarılı proxy |
TestOpenAIProxy_DefaultModelInjection |
OpenAI handler'da model yoksa enjekte |
TestOpenAIProxy_DefaultModelInjection_ExistingModel |
OpenAI handler'da var olan model korunur |
TestOpenAIProxy_UpstreamError |
OpenAI handler upstream hatasında 502 |
Çalıştırma
# Tüm testler
go test ./tests/ -v
# Sadece transform unit testleri
go test ./internal/transform/ -v
Notlar
- Tüm testler DB'siz çalışır (
db = nil) — loglama katmanı test edilmez - Fiber v3'ün
app.Test()metodu ile entegre test - Mock upstream her test için ayrı
httptest.Serveroluşturur (izolasyon)