lolly/internal/server/internal_test.go
xfy 7a96db9f05 test(server): 重构并扩展服务器测试
- 拆分 server_extended_test.go 到独立测试文件
- 添加 pprof、purge、vhost、internal 测试

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 08:12:33 +08:00

108 lines
2.4 KiB
Go

// Package server 提供内部重定向功能的测试。
package server
import (
"testing"
"github.com/valyala/fasthttp"
)
func TestSetInternalRedirect(t *testing.T) {
ctx := &fasthttp.RequestCtx{}
targetPath := "/internal/target"
SetInternalRedirect(ctx, targetPath)
// 验证值已设置
v := ctx.UserValue(InternalRedirectKey)
if v == nil {
t.Error("expected user value to be set")
}
if v.(string) != targetPath {
t.Errorf("expected %q, got %q", targetPath, v.(string))
}
}
func TestIsInternalRedirect_True(t *testing.T) {
ctx := &fasthttp.RequestCtx{}
ctx.SetUserValue(InternalRedirectKey, "/target")
if !IsInternalRedirect(ctx) {
t.Error("expected IsInternalRedirect to return true")
}
}
func TestIsInternalRedirect_False(t *testing.T) {
ctx := &fasthttp.RequestCtx{}
if IsInternalRedirect(ctx) {
t.Error("expected IsInternalRedirect to return false")
}
}
func TestGetInternalRedirectPath_Set(t *testing.T) {
ctx := &fasthttp.RequestCtx{}
targetPath := "/internal/new-path"
ctx.SetUserValue(InternalRedirectKey, targetPath)
got := GetInternalRedirectPath(ctx)
if got != targetPath {
t.Errorf("expected %q, got %q", targetPath, got)
}
}
func TestGetInternalRedirectPath_NotSet(t *testing.T) {
ctx := &fasthttp.RequestCtx{}
got := GetInternalRedirectPath(ctx)
if got != "" {
t.Errorf("expected empty string, got %q", got)
}
}
func TestGetInternalRedirectPath_WrongType(t *testing.T) {
ctx := &fasthttp.RequestCtx{}
ctx.SetUserValue(InternalRedirectKey, 12345) // 设置非字符串值
got := GetInternalRedirectPath(ctx)
if got != "" {
t.Errorf("expected empty string for wrong type, got %q", got)
}
}
func TestInternalRedirectKey_Constant(t *testing.T) {
// 验证常量值
expectedKey := "__internal_redirect__"
if InternalRedirectKey != expectedKey {
t.Errorf("expected InternalRedirectKey to be %q, got %q", expectedKey, InternalRedirectKey)
}
}
func TestInternalRedirect_RoundTrip(t *testing.T) {
tests := []string{
"/simple/path",
"/path/with/query?foo=bar",
"/path/with/special%20characters",
"/路径/中文",
"",
}
for _, tt := range tests {
t.Run(tt, func(t *testing.T) {
ctx := &fasthttp.RequestCtx{}
SetInternalRedirect(ctx, tt)
if !IsInternalRedirect(ctx) {
t.Error("expected IsInternalRedirect to return true")
}
got := GetInternalRedirectPath(ctx)
if got != tt {
t.Errorf("expected %q, got %q", tt, got)
}
})
}
}