Files
opantoantro/docs/wiki/Testing.md
T
Beyhan Ogur a408821410 first commit
2026-05-11 15:08:50 +03:00

72 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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_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
```bash
# 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)