ananke/internal/cluster/orchestrator_test.go

85 lines
2.1 KiB
Go

package cluster
import (
"log"
"os"
"reflect"
"testing"
"scm.bstein.dev/bstein/hecate/internal/config"
)
func TestParseVaultSealed(t *testing.T) {
sealed, err := parseVaultSealed(`{"initialized":true,"sealed":true}`)
if err != nil {
t.Fatalf("parse sealed=true: %v", err)
}
if !sealed {
t.Fatalf("expected sealed=true")
}
sealed, err = parseVaultSealed(`{"initialized":true,"sealed":false}`)
if err != nil {
t.Fatalf("parse sealed=false: %v", err)
}
if sealed {
t.Fatalf("expected sealed=false")
}
}
func TestParseVaultSealedRejectsEmpty(t *testing.T) {
if _, err := parseVaultSealed(" "); err == nil {
t.Fatalf("expected parse error for empty status payload")
}
}
func TestParseVaultSealedWithKubectlPreamble(t *testing.T) {
raw := "Defaulted container \"vault\" out of: vault, setup-config (init)\n{\"sealed\":true,\"initialized\":true}\n"
sealed, err := parseVaultSealed(raw)
if err != nil {
t.Fatalf("parse with preamble: %v", err)
}
if !sealed {
t.Fatalf("expected sealed=true from payload with preamble")
}
}
func TestFallbackWorkersFromInventoryUsesManagedNodes(t *testing.T) {
orch := &Orchestrator{
cfg: config.Config{
ControlPlanes: []string{"titan-0a", "titan-0b", "titan-0c"},
SSHManagedNodes: []string{
"titan-db",
"titan-0a",
"titan-15",
"titan-17",
},
},
log: log.New(os.Stdout, "", 0),
}
got := orch.fallbackWorkersFromInventory()
want := []string{"titan-15", "titan-17", "titan-db"}
if !reflect.DeepEqual(got, want) {
t.Fatalf("fallback workers mismatch: got=%v want=%v", got, want)
}
}
func TestFallbackWorkersFromInventoryFallsBackToHosts(t *testing.T) {
orch := &Orchestrator{
cfg: config.Config{
ControlPlanes: []string{"titan-0a", "titan-0b", "titan-0c"},
SSHNodeHosts: map[string]string{
"titan-0a": "192.168.22.11",
"titan-22": "192.168.22.22",
"titan-24": "192.168.22.26",
},
},
log: log.New(os.Stdout, "", 0),
}
got := orch.fallbackWorkersFromInventory()
want := []string{"titan-22", "titan-24"}
if !reflect.DeepEqual(got, want) {
t.Fatalf("fallback workers mismatch: got=%v want=%v", got, want)
}
}