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("Just a moment...")) })) 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, "目标可达") }