package settings import ( "encoding/base64" "testing" "time" ) func TestNodesAndNodeKeysRoundTrip(t *testing.T) { dir := t.TempDir() keyBytes := make([]byte, 32) for index := range keyBytes { keyBytes[index] = byte(index + 3) } t.Setenv(ConfigKeyEnvVar, base64.StdEncoding.EncodeToString(keyBytes)) store := NodeStore{ Nodes: []Node{ { ID: "aaaaaaaa-bbbb-4ccc-8ddd-eeeeeeeeeeee", Kind: NodeKindContainer, Name: "ct1", HostIP: "127.0.0.1", Username: "clustercanvas", GroupName: AdministratorsGroupName, PublicKey: "ssh-ed25519 AAAA", KeyAlgo: "ed25519", CreatedAt: time.Now().UTC(), }, }, } if err := SaveNodes(dir, store); err != nil { t.Fatalf("SaveNodes: %v", err) } loaded, err := LoadNodes(dir) if err != nil { t.Fatalf("LoadNodes: %v", err) } if len(loaded.Nodes) != 1 || loaded.Nodes[0].Name != "ct1" { t.Fatalf("loaded = %+v", loaded) } keyStore := NodeKeyStore{ Keys: []NodeKeyEntry{ { NodeID: loaded.Nodes[0].ID, PrivateKey: "-----BEGIN OPENSSH PRIVATE KEY-----\ntest\n-----END OPENSSH PRIVATE KEY-----\n", Algorithm: "ed25519", KDFRounds: 100, }, }, } if err := SaveNodeKeys(dir, keyStore, keyBytes); err != nil { t.Fatalf("SaveNodeKeys: %v", err) } loadedKeys, err := LoadNodeKeys(dir, keyBytes) if err != nil { t.Fatalf("LoadNodeKeys: %v", err) } if len(loadedKeys.Keys) != 1 || loadedKeys.Keys[0].KDFRounds != 100 { t.Fatalf("keys = %+v", loadedKeys) } } func TestLoadNodesOrEmptyMissing(t *testing.T) { store, err := LoadNodesOrEmpty(t.TempDir()) if err != nil { t.Fatalf("LoadNodesOrEmpty: %v", err) } if len(store.Nodes) != 0 { t.Fatalf("expected empty, got %d", len(store.Nodes)) } }