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