test(integration): 添加正则 location 配置集成测试
- 测试 ~ 修饰符大小写敏感匹配 - 测试 ~* 修饰符大小写不敏感匹配 - 测试 ^~ 修饰符非正则前缀优先匹配 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
4b6bc056bc
commit
b0ca037cad
60
internal/integration/regex_config_test.go
Normal file
60
internal/integration/regex_config_test.go
Normal file
@ -0,0 +1,60 @@
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user