mirror of
https://github.com/yusing/godoxy.git
synced 2026-04-23 01:08:47 +02:00
more flexible domain matching
This commit is contained in:
120
internal/entrypoint/entrypoint_test.go
Normal file
120
internal/entrypoint/entrypoint_test.go
Normal file
@@ -0,0 +1,120 @@
|
||||
package entrypoint
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/yusing/go-proxy/internal/route"
|
||||
"github.com/yusing/go-proxy/internal/route/routes"
|
||||
. "github.com/yusing/go-proxy/internal/utils/testing"
|
||||
)
|
||||
|
||||
var r route.HTTPRoute
|
||||
|
||||
func run(t *testing.T, match []string, noMatch []string) {
|
||||
t.Helper()
|
||||
t.Cleanup(routes.TestClear)
|
||||
t.Cleanup(func() {
|
||||
SetFindRouteDomains(nil)
|
||||
})
|
||||
|
||||
for _, test := range match {
|
||||
t.Run(test, func(t *testing.T) {
|
||||
found, err := findRouteFunc(test)
|
||||
ExpectNoError(t, err)
|
||||
ExpectTrue(t, found == &r)
|
||||
})
|
||||
}
|
||||
|
||||
for _, test := range noMatch {
|
||||
t.Run(test, func(t *testing.T) {
|
||||
_, err := findRouteFunc(test)
|
||||
ExpectError(t, ErrNoSuchRoute, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestFindRouteAnyDomain(t *testing.T) {
|
||||
routes.SetHTTPRoute("app1", &r)
|
||||
|
||||
tests := []string{
|
||||
"app1.com",
|
||||
"app1.domain.com",
|
||||
"app1.sub.domain.com",
|
||||
}
|
||||
testsNoMatch := []string{
|
||||
"sub.app1.com",
|
||||
"app2.com",
|
||||
"app2.domain.com",
|
||||
"app2.sub.domain.com",
|
||||
}
|
||||
|
||||
run(t, tests, testsNoMatch)
|
||||
}
|
||||
|
||||
func TestFindRouteExactHostMatch(t *testing.T) {
|
||||
tests := []string{
|
||||
"app2.com",
|
||||
"app2.domain.com",
|
||||
"app2.sub.domain.com",
|
||||
}
|
||||
testsNoMatch := []string{
|
||||
"sub.app2.com",
|
||||
"app1.com",
|
||||
"app1.domain.com",
|
||||
"app1.sub.domain.com",
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
routes.SetHTTPRoute(test, &r)
|
||||
}
|
||||
|
||||
run(t, tests, testsNoMatch)
|
||||
}
|
||||
|
||||
func TestFindRouteByDomains(t *testing.T) {
|
||||
SetFindRouteDomains([]string{
|
||||
".domain.com",
|
||||
".sub.domain.com",
|
||||
})
|
||||
|
||||
routes.SetHTTPRoute("app1", &r)
|
||||
|
||||
tests := []string{
|
||||
"app1.domain.com",
|
||||
"app1.sub.domain.com",
|
||||
}
|
||||
testsNoMatch := []string{
|
||||
"sub.app1.com",
|
||||
"app1.com",
|
||||
"app1.domain.co",
|
||||
"app1.domain.com.hk",
|
||||
"app1.sub.domain.co",
|
||||
"app2.domain.com",
|
||||
"app2.sub.domain.com",
|
||||
}
|
||||
|
||||
run(t, tests, testsNoMatch)
|
||||
}
|
||||
|
||||
func TestFindRouteByDomainsExactMatch(t *testing.T) {
|
||||
SetFindRouteDomains([]string{
|
||||
".domain.com",
|
||||
".sub.domain.com",
|
||||
})
|
||||
|
||||
routes.SetHTTPRoute("app1.foo.bar", &r)
|
||||
|
||||
tests := []string{
|
||||
"app1.foo.bar", // exact match
|
||||
"app1.foo.bar.domain.com",
|
||||
"app1.foo.bar.sub.domain.com",
|
||||
}
|
||||
testsNoMatch := []string{
|
||||
"sub.app1.foo.bar",
|
||||
"sub.app1.foo.bar.com",
|
||||
"app1.domain.com",
|
||||
"app1.sub.domain.com",
|
||||
}
|
||||
|
||||
run(t, tests, testsNoMatch)
|
||||
}
|
||||
Reference in New Issue
Block a user