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") } }