68 lines
2.4 KiB
Go
68 lines
2.4 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestEndpointConfiguration(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "config.yaml")
|
|
if err := os.WriteFile(path, []byte("endpoints:\n liveness:\n enabled: false\n readiness:\n path: /readyz\n responseMode: raw\n openapi:\n enabled: false\n"), 0600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
cfg, err := DecodeFile(path, Default())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if cfg.Endpoints.Liveness.Enabled || cfg.Endpoints.OpenAPI.Enabled || !cfg.Endpoints.Readiness.Enabled || cfg.Endpoints.Readiness.ResponseMode != "raw" {
|
|
t.Fatal(cfg.Endpoints)
|
|
}
|
|
refs := configFile(t, "yaml", "endpoints:\n readiness:\n path: ${TEST_ENDPOINTS_READINESS_PATH}\n openapi:\n enabled: ${TEST_ENDPOINTS_OPENAPI_ENABLED}\n")
|
|
t.Setenv("TEST_ENDPOINTS_READINESS_PATH", "/internal/ready")
|
|
t.Setenv("TEST_ENDPOINTS_OPENAPI_ENABLED", "true")
|
|
cfg, err = LoadProject(refs, cfg)
|
|
if err != nil || cfg.Endpoints.Readiness.Path != "/internal/ready" || !cfg.Endpoints.OpenAPI.Enabled {
|
|
t.Fatal(cfg.Endpoints, err)
|
|
}
|
|
t.Setenv("TEST_ENDPOINTS_OPENAPI_ENABLED", "invalid")
|
|
if _, err = LoadProject(refs, cfg); err == nil {
|
|
t.Fatal("invalid bool accepted")
|
|
}
|
|
}
|
|
|
|
func TestEndpointRouteConflicts(t *testing.T) {
|
|
for _, route := range []EndpointRoute{{"GET", "/health/ready"}, {"get", "/health/:name"}, {"GET", "/health/*rest"}, {"GET", "/*rest"}} {
|
|
cfg := DefaultEndpoints()
|
|
if err := cfg.ValidateRoutes(route); err == nil {
|
|
t.Fatal("overlap accepted", route)
|
|
}
|
|
cfg.Readiness.Enabled = false
|
|
cfg.Liveness.Enabled = false
|
|
cfg.OpenAPI.Enabled = false
|
|
if err := cfg.ValidateRoutes(route); err != nil {
|
|
t.Fatal("disabled endpoint reserves path", err)
|
|
}
|
|
}
|
|
if err := DefaultEndpoints().ValidateRoutes(EndpointRoute{"POST", "/health/ready"}, EndpointRoute{"GET", "/other/*rest"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, path := range []string{"", "ready", "//ready", "/a/../ready", "/:ready", "/ready?x=1", "/a%2fb", "/ready\n"} {
|
|
cfg := DefaultEndpoints()
|
|
cfg.Readiness.Path = path
|
|
if err := cfg.Validate(); err == nil {
|
|
t.Fatal("invalid path", path)
|
|
}
|
|
}
|
|
cfg := DefaultEndpoints()
|
|
cfg.Readiness.Path = cfg.Liveness.Path
|
|
if err := cfg.Validate(); err == nil {
|
|
t.Fatal("duplicate endpoints accepted")
|
|
}
|
|
cfg = DefaultEndpoints()
|
|
cfg.Readiness.ResponseMode = "unknown"
|
|
if err := cfg.Validate(); err == nil {
|
|
t.Fatal("invalid mode accepted")
|
|
}
|
|
}
|