From 03f69dd394286dd6e23540f2c9297daa3483dd64 Mon Sep 17 00:00:00 2001 From: yangjianbo Date: Fri, 20 Feb 2026 14:42:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(proxy):=20=E5=B0=86401/405=E8=B4=A8?= =?UTF-8?q?=E9=87=8F=E6=A3=80=E6=B5=8B=E7=BB=93=E6=9E=9C=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=B8=BA=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/service/admin_service.go | 9 +++++-- .../admin_service_proxy_quality_test.go | 24 ++++++++++++++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/backend/internal/service/admin_service.go b/backend/internal/service/admin_service.go index 715949a7..8614f24a 100644 --- a/backend/internal/service/admin_service.go +++ b/backend/internal/service/admin_service.go @@ -1908,8 +1908,13 @@ func runProxyQualityTarget(ctx context.Context, client *http.Client, target prox } if _, ok := target.AllowedStatuses[resp.StatusCode]; ok { - item.Status = "pass" - item.Message = fmt.Sprintf("HTTP %d", resp.StatusCode) + if resp.StatusCode >= http.StatusOK && resp.StatusCode < http.StatusMultipleChoices { + item.Status = "pass" + item.Message = fmt.Sprintf("HTTP %d", resp.StatusCode) + } else { + item.Status = "warn" + item.Message = fmt.Sprintf("HTTP %d(目标可达,但鉴权或方法受限)", resp.StatusCode) + } return item } diff --git a/backend/internal/service/admin_service_proxy_quality_test.go b/backend/internal/service/admin_service_proxy_quality_test.go index bd6a19a8..5a43cd9c 100644 --- a/backend/internal/service/admin_service_proxy_quality_test.go +++ b/backend/internal/service/admin_service_proxy_quality_test.go @@ -52,6 +52,27 @@ func TestRunProxyQualityTarget_SoraChallenge(t *testing.T) { } 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"}`)) @@ -68,6 +89,7 @@ func TestRunProxyQualityTarget_AllowedStatusPass(t *testing.T) { } item := runProxyQualityTarget(context.Background(), server.Client(), target) - require.Equal(t, "pass", item.Status) + require.Equal(t, "warn", item.Status) require.Equal(t, http.StatusUnauthorized, item.HTTPStatus) + require.Contains(t, item.Message, "目标可达") }