| package service |
|
|
| import ( |
| "context" |
| "net/http" |
| "net/http/httptest" |
| "testing" |
|
|
| "github.com/stretchr/testify/require" |
| ) |
|
|
| func TestFinalizeProxyQualityResult_ScoreAndGrade(t *testing.T) { |
| result := &ProxyQualityCheckResult{ |
| PassedCount: 2, |
| WarnCount: 1, |
| FailedCount: 1, |
| ChallengeCount: 1, |
| } |
|
|
| finalizeProxyQualityResult(result) |
|
|
| require.Equal(t, 38, result.Score) |
| require.Equal(t, "F", result.Grade) |
| require.Contains(t, result.Summary, "通过 2 项") |
| require.Contains(t, result.Summary, "告警 1 项") |
| require.Contains(t, result.Summary, "失败 1 项") |
| require.Contains(t, result.Summary, "挑战 1 项") |
| } |
|
|
| func TestRunProxyQualityTarget_SoraChallenge(t *testing.T) { |
| server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { |
| w.Header().Set("Content-Type", "text/html") |
| w.Header().Set("cf-ray", "test-ray-123") |
| w.WriteHeader(http.StatusForbidden) |
| _, _ = w.Write([]byte("<!DOCTYPE html><title>Just a moment...</title><script>window._cf_chl_opt={};</script>")) |
| })) |
| defer server.Close() |
|
|
| target := proxyQualityTarget{ |
| Target: "sora", |
| URL: server.URL, |
| Method: http.MethodGet, |
| AllowedStatuses: map[int]struct{}{ |
| http.StatusUnauthorized: {}, |
| }, |
| } |
|
|
| item := runProxyQualityTarget(context.Background(), server.Client(), target) |
| require.Equal(t, "challenge", item.Status) |
| require.Equal(t, http.StatusForbidden, item.HTTPStatus) |
| require.Equal(t, "test-ray-123", item.CFRay) |
| } |
|
|
| func TestRunProxyQualityTarget_AllowedStatusPass(t *testing.T) { |
| server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { |
| w.WriteHeader(http.StatusOK) |
| _, _ = w.Write([]byte(`{"models":[]}`)) |
| })) |
| defer server.Close() |
|
|
| target := proxyQualityTarget{ |
| Target: "gemini", |
| URL: server.URL, |
| Method: http.MethodGet, |
| AllowedStatuses: map[int]struct{}{ |
| http.StatusOK: {}, |
| }, |
| } |
|
|
| item := runProxyQualityTarget(context.Background(), server.Client(), target) |
| require.Equal(t, "pass", item.Status) |
| require.Equal(t, http.StatusOK, item.HTTPStatus) |
| } |
|
|
| func TestRunProxyQualityTarget_AllowedStatusWarnForUnauthorized(t *testing.T) { |
| server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { |
| w.WriteHeader(http.StatusUnauthorized) |
| _, _ = w.Write([]byte(`{"error":"unauthorized"}`)) |
| })) |
| defer server.Close() |
|
|
| target := proxyQualityTarget{ |
| Target: "openai", |
| URL: server.URL, |
| Method: http.MethodGet, |
| AllowedStatuses: map[int]struct{}{ |
| http.StatusUnauthorized: {}, |
| }, |
| } |
|
|
| item := runProxyQualityTarget(context.Background(), server.Client(), target) |
| require.Equal(t, "warn", item.Status) |
| require.Equal(t, http.StatusUnauthorized, item.HTTPStatus) |
| require.Contains(t, item.Message, "目标可达") |
| } |
|
|