65 lines
2.2 KiB
Go
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)
|
|
}
|
|
}
|