mirror of
https://github.com/yusing/godoxy.git
synced 2026-01-15 06:43:35 +01:00
- Added logic to strip the trailing :port from the host when searching for routes. - Updated findRouteByDomains function to ensure consistent host formatting. - Added related tests
175 lines
3.1 KiB
Go
175 lines
3.1 KiB
Go
package entrypoint_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
. "github.com/yusing/godoxy/internal/entrypoint"
|
|
"github.com/yusing/godoxy/internal/route"
|
|
"github.com/yusing/godoxy/internal/route/routes"
|
|
|
|
expect "github.com/yusing/goutils/testing"
|
|
)
|
|
|
|
var ep = NewEntrypoint()
|
|
|
|
func addRoute(alias string) {
|
|
routes.HTTP.Add(&route.ReveseProxyRoute{
|
|
Route: &route.Route{
|
|
Alias: alias,
|
|
Port: route.Port{
|
|
Proxy: 80,
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
func run(t *testing.T, match []string, noMatch []string) {
|
|
t.Helper()
|
|
t.Cleanup(routes.Clear)
|
|
t.Cleanup(func() { ep.SetFindRouteDomains(nil) })
|
|
|
|
for _, test := range match {
|
|
t.Run(test, func(t *testing.T) {
|
|
found := ep.FindRoute(test)
|
|
expect.NotNil(t, found)
|
|
})
|
|
}
|
|
|
|
for _, test := range noMatch {
|
|
t.Run(test, func(t *testing.T) {
|
|
found := ep.FindRoute(test)
|
|
expect.Nil(t, found)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestFindRouteAnyDomain(t *testing.T) {
|
|
addRoute("app1")
|
|
|
|
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 {
|
|
addRoute(test)
|
|
}
|
|
|
|
run(t, tests, testsNoMatch)
|
|
}
|
|
|
|
func TestFindRouteByDomains(t *testing.T) {
|
|
ep.SetFindRouteDomains([]string{
|
|
".domain.com",
|
|
".sub.domain.com",
|
|
})
|
|
|
|
addRoute("app1")
|
|
|
|
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) {
|
|
ep.SetFindRouteDomains([]string{
|
|
".domain.com",
|
|
".sub.domain.com",
|
|
})
|
|
|
|
addRoute("app1.foo.bar")
|
|
|
|
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)
|
|
}
|
|
|
|
func TestFindRouteWithPort(t *testing.T) {
|
|
t.Run("AnyDomain", func(t *testing.T) {
|
|
addRoute("app1")
|
|
addRoute("app2.com")
|
|
|
|
tests := []string{
|
|
"app1:8080",
|
|
"app1.domain.com:8080",
|
|
"app2.com:8080",
|
|
}
|
|
testsNoMatch := []string{
|
|
"app11",
|
|
"app2.co",
|
|
"app2.co:8080",
|
|
}
|
|
run(t, tests, testsNoMatch)
|
|
})
|
|
|
|
t.Run("ByDomains", func(t *testing.T) {
|
|
ep.SetFindRouteDomains([]string{
|
|
".domain.com",
|
|
})
|
|
addRoute("app1")
|
|
addRoute("app2")
|
|
addRoute("app3.domain.com")
|
|
|
|
tests := []string{
|
|
"app1.domain.com:8080",
|
|
"app2:8080", // exact match fallback
|
|
"app3.domain.com:8080",
|
|
}
|
|
testsNoMatch := []string{
|
|
"app11",
|
|
"app1.domain.co",
|
|
"app1.domain.co:8080",
|
|
"app2.co",
|
|
"app2.co:8080",
|
|
"app3.domain.co",
|
|
"app3.domain.co:8080",
|
|
}
|
|
run(t, tests, testsNoMatch)
|
|
})
|
|
}
|