ananke/internal/cluster/orchestrator_autorepair_service_test.go
2026-07-07 18:29:51 -03:00

65 lines
2.2 KiB
Go

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