lolly/internal/integration/regex_config_test.go
xfy ae0bec6c3b feat(internal): 实现 internal 指令
- 新增 IsInternalRedirect 检测内部重定向请求
- static handler 支持 internal 访问限制
- proxy handler 支持 internal 访问限制
- 支持 X-Accel-Redirect 内部重定向

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-20 18:09:06 +08:00

61 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package integration
import (
"testing"
"github.com/valyala/fasthttp"
"rua.plus/lolly/internal/matcher"
)
func TestRegexConfigCaseSensitive(t *testing.T) {
// 测试 ~ 修饰符case-sensitive
// 创建 regex matcher验证只匹配小写
m, err := matcher.NewRegexMatcher(`\.php$`, nil, 3, false, false)
if err != nil {
t.Fatal(err)
}
if !m.Match("/test.php") {
t.Error("~ modifier should match lowercase .php")
}
if m.Match("/test.PHP") {
t.Error("~ modifier should NOT match uppercase .PHP")
}
}
func TestRegexConfigCaseInsensitive(t *testing.T) {
// 测试 ~* 修饰符case-insensitive
m, err := matcher.NewRegexMatcher(`(?i)\.php$`, nil, 3, true, false)
if err != nil {
t.Fatal(err)
}
if !m.Match("/test.php") {
t.Error("~* modifier should match lowercase .php")
}
if !m.Match("/test.PHP") {
t.Error("~* modifier should match uppercase .PHP")
}
}
func TestPrefixPriorityNotRegex(t *testing.T) {
// 测试 ^~ 修饰符(非正则)
// 需要提供非 nil handler否则 RadixTree 不会存储该节点
dummyHandler := func(ctx *fasthttp.RequestCtx) {}
engine := matcher.NewLocationEngine()
err := engine.AddPrefixPriority("/images", dummyHandler, false)
if err != nil {
t.Fatal(err)
}
result := engine.Match("/images/logo.png")
if result == nil {
t.Error("^~ should match prefix")
}
if result.LocationType == matcher.LocationTypeRegex || result.LocationType == matcher.LocationTypeRegexCaseless {
t.Error("^~ should NOT be treated as regex")
}
if result.LocationType != matcher.LocationTypePrefixPriority {
t.Errorf("^~ should have LocationTypePrefixPriority, got: %s", result.LocationType)
}
}