mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 04:42:33 +02:00

* cleanup code for URL type * fix makefile for trace mode * refactor, merge Entry, RawEntry and Route into one. * Implement fileserver. * refactor: rename HTTPRoute to ReverseProxyRoute to avoid confusion * refactor: move metrics logger to middleware package - fix prometheus metrics for load balanced routes - route will now fail when health monitor fail to start * fix extra output of ls-* commands by defer initializaing stuff, speed up start time * add test for path traversal attack, small fix on FileServer.Start method * rename rule.on.bypass to pass * refactor and fixed map-to-map deserialization * updated route loading logic * schemas: add "add_prefix" option to modify_request middleware * updated route JSONMarshalling --------- Co-authored-by: yusing <yusing@6uo.me>
121 lines
2.2 KiB
Go
121 lines
2.2 KiB
Go
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.ReveseProxyRoute
|
|
ep = NewEntrypoint()
|
|
)
|
|
|
|
func run(t *testing.T, match []string, noMatch []string) {
|
|
t.Helper()
|
|
t.Cleanup(routes.TestClear)
|
|
t.Cleanup(func() { ep.SetFindRouteDomains(nil) })
|
|
|
|
for _, test := range match {
|
|
t.Run(test, func(t *testing.T) {
|
|
found, err := ep.findRouteFunc(test)
|
|
ExpectNoError(t, err)
|
|
ExpectTrue(t, found == &r)
|
|
})
|
|
}
|
|
|
|
for _, test := range noMatch {
|
|
t.Run(test, func(t *testing.T) {
|
|
_, err := ep.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) {
|
|
ep.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) {
|
|
ep.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)
|
|
}
|