package handler import ( "net/http/httptest" "testing" "github.com/gin-gonic/gin" ) func TestResolveVisitorIPAndRegion(t *testing.T) { gin.SetMode(gin.TestMode) // 内网 IP w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = httptest.NewRequest("GET", "/", nil) c.Request.RemoteAddr = "192.168.1.105:12345" ip := resolveVisitorIP(c) if ip != "192.168.1.105" { t.Fatalf("内网 IP 解析错误: %s", ip) } if region := resolveVisitorRegion(c, ip); region != "内网" { t.Fatalf("内网地区应为内网, got %s", region) } // CF 国家头 c2, _ := gin.CreateTestContext(httptest.NewRecorder()) c2.Request = httptest.NewRequest("GET", "/", nil) c2.Request.Header.Set("CF-Connecting-IP", "8.8.8.8") c2.Request.Header.Set("CF-IPCountry", "US") ip2 := resolveVisitorIP(c2) if ip2 != "8.8.8.8" { t.Fatalf("CF IP 解析错误: %s", ip2) } if region := resolveVisitorRegion(c2, ip2); region != "美国" { t.Fatalf("期望美国, got %s", region) } if summarizeUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X) Chrome/120.0.0.0") != "Chrome / macOS" { t.Fatalf("UA 摘要错误") } }