package cluster import ( "context" "errors" "strings" "testing" "time" "scm.bstein.dev/bstein/ananke/internal/config" ) // TestConfiguredServiceBackendRepairContinuesPastNoopEndpoint runs one orchestration or CLI step. // Signature: TestConfiguredServiceBackendRepairContinuesPastNoopEndpoint(t *testing.T). // Why: one unhealthy endpoint without a matching workload must not prevent later // critical services, especially Mailu, from getting their backend repair pass. func TestConfiguredServiceBackendRepairContinuesPastNoopEndpoint(t *testing.T) { cfg := config.Config{ Startup: config.Startup{ CriticalServiceEndpoints: []string{ "orphan/missing-service", "mailu-mailserver/mailu-admin", }, }, } orch := buildOrchestratorWithStubs(t, cfg, nil) scaledMail := false rolledOutMail := false dispatch := func(_ context.Context, _ time.Duration, name string, args ...string) (string, error) { if name != "kubectl" { return "", nil } joined := strings.Join(args, " ") switch { case strings.Contains(joined, "-n orphan get endpoints missing-service"): return "", nil case strings.Contains(joined, "-n orphan scale deployment missing-service --replicas=1"): return "", errors.New("not found") case strings.Contains(joined, "-n orphan scale statefulset missing-service --replicas=1"): return "", errors.New("not found") case strings.Contains(joined, "-n mailu-mailserver get endpoints mailu-admin"): return "", nil case strings.Contains(joined, "-n mailu-mailserver scale deployment mailu-admin --replicas=1"): scaledMail = true return "", nil case strings.Contains(joined, "-n mailu-mailserver rollout status deployment/mailu-admin"): rolledOutMail = true return "", nil case strings.Contains(joined, "-n mailu-mailserver scale statefulset mailu-admin --replicas=1"): return "", errors.New("not found") default: return "", nil } } orch.SetCommandOverrides(dispatch, dispatch) if _, err := orch.healUnreadyConfiguredServiceBackends(context.Background()); err != nil { t.Fatalf("healUnreadyConfiguredServiceBackends failed: %v", err) } if !scaledMail || !rolledOutMail { t.Fatalf("expected later mail endpoint to be repaired, scaled=%v rolledOut=%v", scaledMail, rolledOutMail) } }