package config import ( "testing" "time" ) func TestRuntimeDefaultsAndBoundedOverrides(t *testing.T) { base := map[string]string{"ORBIT_MYSQL_DSN": "private-dsn"} get := func(k string) string { return base[k] } c, err := FromEnv(get) if err != nil || c.WorkflowTickInterval != time.Second || c.ScheduleTickInterval != time.Second || c.RecoveryTickInterval != 2*time.Second || c.RuntimeBatchLimit != 100 || c.ShutdownTimeout != 10*time.Second || c.WorkerConnectionLimit != 128 || c.EventConnectionLimit != 128 || c.DispatchWorkers != 4 || c.DispatchCapacity != 128 { t.Fatalf("unexpected runtime defaults: %+v err=%v", c, err) } base["ORBIT_WORKFLOW_TICK_INTERVAL"] = "250ms" base["ORBIT_SCHEDULE_TICK_INTERVAL"] = "1500ms" base["ORBIT_RECOVERY_TICK_INTERVAL"] = "1m" base["ORBIT_RUNTIME_BATCH_LIMIT"] = "37" base["ORBIT_SHUTDOWN_TIMEOUT"] = "45s" base["ORBIT_WORKER_CONNECTION_LIMIT"] = "512" base["ORBIT_EVENT_CONNECTION_LIMIT"] = "256" base["ORBIT_DISPATCH_WORKERS"] = "16" base["ORBIT_DISPATCH_CAPACITY"] = "2048" c, err = FromEnv(get) if err != nil || c.WorkflowTickInterval != 250*time.Millisecond || c.ScheduleTickInterval != 1500*time.Millisecond || c.RecoveryTickInterval != time.Minute || c.RuntimeBatchLimit != 37 || c.ShutdownTimeout != 45*time.Second || c.WorkerConnectionLimit != 512 || c.EventConnectionLimit != 256 || c.DispatchWorkers != 16 || c.DispatchCapacity != 2048 { t.Fatalf("valid runtime override rejected: %+v err=%v", c, err) } for key, value := range map[string]string{ "ORBIT_WORKFLOW_TICK_INTERVAL": "99ms", "ORBIT_SCHEDULE_TICK_INTERVAL": "2m", "ORBIT_RECOVERY_TICK_INTERVAL": "not-a-duration", "ORBIT_RUNTIME_BATCH_LIMIT": "101", "ORBIT_SHUTDOWN_TIMEOUT": "500ms", "ORBIT_WORKER_CONNECTION_LIMIT": "0", "ORBIT_EVENT_CONNECTION_LIMIT": "4097", "ORBIT_DISPATCH_WORKERS": "257", "ORBIT_DISPATCH_CAPACITY": "65537", } { base[key] = value if _, err := FromEnv(get); err == nil { t.Fatalf("invalid runtime override accepted: %s=%s", key, value) } delete(base, key) } } func TestMetricsAddressIsExplicitAndValidated(t *testing.T) { base := map[string]string{"ORBIT_MYSQL_DSN": "private-dsn"} get := func(k string) string { return base[k] } c, err := FromEnv(get) if err != nil || c.MetricsAddr != "" { t.Fatal("metrics must be disabled by default", err) } for _, addr := range []string{"127.0.0.1:0", "[::1]:9090", "0.0.0.0:9090"} { base["ORBIT_METRICS_ADDR"] = addr c, err = FromEnv(get) if err != nil || c.MetricsAddr != addr { t.Fatal("valid explicit address rejected", addr, err) } } for _, addr := range []string{"bad", ":secret", "127.0.0.1:-1", ":65536", "http://127.0.0.1:9000"} { base["ORBIT_METRICS_ADDR"] = addr if _, err = FromEnv(get); err == nil { t.Fatal("invalid address accepted", addr) } } }