Files
Beyhan Ogur a408821410 first commit
2026-05-11 15:08:50 +03:00

3.5 KiB
Raw Permalink Blame History

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.Server ile sabit yanıt dönen test sunucusu
  • newTestApp(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_reasonend_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.Server oluşturur (izolasyon)