81 lines
2.1 KiB
Go
81 lines
2.1 KiB
Go
package proxy
|
|
|
|
import (
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/gofiber/fiber/v3"
|
|
"github.com/valyala/fasthttp"
|
|
|
|
"github.com/any-hub/any-hub/internal/cache"
|
|
"github.com/any-hub/any-hub/internal/config"
|
|
"github.com/any-hub/any-hub/internal/proxy/hooks"
|
|
"github.com/any-hub/any-hub/internal/server"
|
|
)
|
|
|
|
func TestResolveUpstreamPrefersHook(t *testing.T) {
|
|
app := fiber.New()
|
|
defer app.Shutdown()
|
|
|
|
ctx := app.AcquireCtx(new(fasthttp.RequestCtx))
|
|
defer app.ReleaseCtx(ctx)
|
|
ctx.Request().SetRequestURI("/original/path?from=req")
|
|
|
|
base, _ := url.Parse("https://up.example")
|
|
route := &server.HubRoute{
|
|
Config: config.HubConfig{
|
|
Name: "demo",
|
|
Type: "custom",
|
|
},
|
|
UpstreamURL: base,
|
|
}
|
|
hook := &hookState{
|
|
ctx: &hooks.RequestContext{},
|
|
def: hooks.Hooks{
|
|
NormalizePath: func(_ *hooks.RequestContext, clean string, rawQuery []byte) (string, []byte) {
|
|
return clean, rawQuery
|
|
},
|
|
ResolveUpstream: func(_ *hooks.RequestContext, upstream string, clean string, rawQuery []byte) string {
|
|
return upstream + "/hooked"
|
|
},
|
|
},
|
|
hasHooks: true,
|
|
clean: "/ignored",
|
|
rawQuery: []byte("ignored=1"),
|
|
}
|
|
|
|
target := resolveUpstreamURL(route, base, ctx, hook)
|
|
if target.String() != "https://up.example/hooked" {
|
|
t.Fatalf("expected hook override, got %s", target.String())
|
|
}
|
|
}
|
|
|
|
func TestCachePolicyHookOverrides(t *testing.T) {
|
|
route := &server.HubRoute{
|
|
Config: config.HubConfig{
|
|
Name: "demo",
|
|
Type: "npm",
|
|
},
|
|
}
|
|
locator := cacheLocatorForTest("demo", "/a.tgz")
|
|
hook := hooks.Hooks{
|
|
CachePolicy: func(_ *hooks.RequestContext, _ string, current hooks.CachePolicy) hooks.CachePolicy {
|
|
current.AllowCache = false
|
|
current.RequireRevalidate = false
|
|
return current
|
|
},
|
|
}
|
|
ctx := &hooks.RequestContext{Method: fiber.MethodGet}
|
|
policy := determineCachePolicyWithHook(route, locator, fiber.MethodGet, hook, true, ctx)
|
|
if policy.allowCache {
|
|
t.Fatalf("expected hook to disable cache")
|
|
}
|
|
if policy.requireRevalidate {
|
|
t.Fatalf("expected hook to disable revalidate")
|
|
}
|
|
}
|
|
|
|
func cacheLocatorForTest(hub, path string) cache.Locator {
|
|
return cache.Locator{HubName: hub, Path: path}
|
|
}
|