Files
go-omni/config/endpoints_test.go

67 lines
2.2 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)
}
t.Setenv("TEST_ENDPOINTS_READINESS_PATH", "/internal/ready")
t.Setenv("TEST_ENDPOINTS_OPENAPI_ENABLED", "true")
cfg, err = ApplyEnv(cfg, "TEST_")
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 = ApplyEnv(cfg, "TEST_"); 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")
}
}