Files
EdgeCommon/pkg/serverconfigs/http_rewrite_rule_test.go

129 lines
2.5 KiB
Go
Raw Normal View History

2020-09-28 16:25:49 +08:00
package serverconfigs
import (
"github.com/iwind/TeaGo/assert"
"testing"
"time"
)
func TestHTTPRewriteRule(t *testing.T) {
a := assert.NewAssertion(t).Quiet()
rule := HTTPRewriteRule{
Pattern: "/(hello)/(world)",
Replace: "/${1}/${2}",
}
a.IsNil(rule.Init())
{
2020-09-29 17:23:11 +08:00
replace, _, b := rule.MatchRequest("/hello/worl", func(source string) string {
2020-09-28 16:25:49 +08:00
return source
})
a.IsFalse(b)
2020-09-29 17:23:11 +08:00
a.Log("url:", replace)
2020-09-28 16:25:49 +08:00
}
{
2020-09-29 17:23:11 +08:00
replace, _, b := rule.MatchRequest("/hello/world", func(source string) string {
2020-09-28 16:25:49 +08:00
return source
})
a.IsTrue(b)
2020-09-29 17:23:11 +08:00
a.Log("url:", replace)
2020-09-28 16:25:49 +08:00
}
{
r := HTTPRewriteRule{}
r.Replace = "http://127.0.0.1${0}"
r.Pattern = ".*"
err := r.Init()
if err != nil {
t.Fatal(err)
}
2020-09-29 17:23:11 +08:00
u, _, b := r.MatchRequest("/hello", func(source string) string {
2020-09-28 16:25:49 +08:00
return source
})
a.Log(b)
a.Log(u)
}
}
func TestRewriteRule_NamedMatch(t *testing.T) {
r := &HTTPRewriteRule{}
r.Replace = "http://127.0.0.1/${1}/${last}/${ni}"
r.Pattern = "/(\\w+)/(?P<last>\\w+)/(?P<ni>\\w+)"
err := r.Init()
if err != nil {
t.Fatal(err)
}
before := time.Now()
count := 100
for i := 0; i < count; i++ {
2020-09-29 17:23:11 +08:00
s, _, b := r.MatchRequest("/hello/world/ni", func(source string) string {
2020-09-28 16:25:49 +08:00
return source
})
if i == 0 {
if b {
t.Log("matched:", s)
} else {
t.Log("not matched")
}
}
}
t.Log(float64(count) / (time.Since(before).Seconds()))
}
func TestRewriteRule_CaseInsensitive(t *testing.T) {
a := assert.NewAssertion(t)
r := &HTTPRewriteRule{}
r.Replace = "http://127.0.0.1${0}"
r.Pattern = "(?i)/index.php"
err := r.Init()
if err != nil {
t.Fatal(err)
}
2020-09-29 17:23:11 +08:00
_, _, ok := r.MatchRequest("/index.php", func(source string) string {
2020-09-28 16:25:49 +08:00
return source
})
a.IsTrue(ok)
2020-09-29 17:23:11 +08:00
_, _, ok = r.MatchRequest("/INDEX.php", func(source string) string {
2020-09-28 16:25:49 +08:00
return source
})
a.IsTrue(ok)
}
func TestRewriteRule_Slashes(t *testing.T) {
a := assert.NewAssertion(t)
r := &HTTPRewriteRule{}
r.Replace = "http://127.0.0.1/${0}"
r.Pattern = "(?i)/index.php"
err := r.Init()
if err != nil {
t.Fatal(err)
}
2020-09-29 17:23:11 +08:00
replace, _, ok := r.MatchRequest("/index.php", func(source string) string {
2020-09-28 16:25:49 +08:00
return source
})
a.IsTrue(ok)
t.Log(replace)
}
func TestRewriteRuleProxy(t *testing.T) {
a := assert.NewAssertion(t).Quiet()
rule := &HTTPRewriteRule{
Pattern: "/(hello)/(world)",
2020-09-29 17:23:11 +08:00
Replace: "/${1}/${2}",
2020-09-28 16:25:49 +08:00
}
a.IsNil(rule.Init())
2020-09-29 17:23:11 +08:00
replace, _, b := rule.MatchRequest("/hello/world", func(source string) string {
2020-09-28 16:25:49 +08:00
return source
})
a.IsTrue(b)
a.IsTrue(replace == "/hello/world")
}