magellan/pkg/secrets/localstore_test.go

151 lines
3.7 KiB
Go

package secrets
import (
"encoding/hex"
"os"
"testing"
)
func TestNewLocalSecretStore(t *testing.T) {
masterKey, err := GenerateMasterKey()
if err != nil {
t.Fatalf("Failed to generate master key: %v", err)
}
filename := "test_secrets.json"
defer os.Remove(filename)
store, err := NewLocalSecretStore(masterKey, filename, true)
if err != nil {
t.Fatalf("Failed to create LocalSecretStore: %v", err)
}
if store.filename != filename {
t.Errorf("Expected filename %s, got %s", filename, store.filename)
}
if hex.EncodeToString(store.masterKey) != masterKey {
t.Errorf("Expected master key %s, got %s", masterKey, hex.EncodeToString(store.masterKey))
}
}
func TestGenerateMasterKey(t *testing.T) {
key, err := GenerateMasterKey()
if err != nil {
t.Fatalf("Failed to generate master key: %v", err)
}
if len(key) != 64 { // 32 bytes in hex representation
t.Errorf("Expected key length 64, got %d", len(key))
}
}
func TestStoreAndGetSecretByID(t *testing.T) {
masterKey, err := GenerateMasterKey()
if err != nil {
t.Fatalf("Failed to generate master key: %v", err)
}
filename := "test_secrets.json"
defer os.Remove(filename)
store, err := NewLocalSecretStore(masterKey, filename, true)
if err != nil {
t.Fatalf("Failed to create LocalSecretStore: %v", err)
}
secretID := "test_secret"
secretValue := "my_secret_value"
err = store.StoreSecretByID(secretID, secretValue)
if err != nil {
t.Fatalf("Failed to store secret: %v", err)
}
retrievedSecret, err := store.GetSecretByID(secretID)
if err != nil {
t.Fatalf("Failed to get secret: %v", err)
}
if retrievedSecret != secretValue {
t.Errorf("Expected secret value %s, got %s", secretValue, retrievedSecret)
}
}
func TestStoreAndGetSecretJSON(t *testing.T) {
masterKey, err := GenerateMasterKey()
if err != nil {
t.Fatalf("Failed to generate master key: %v", err)
}
filename := "test_secrets.json"
defer os.Remove(filename)
store, err := NewLocalSecretStore(masterKey, filename, true)
if err != nil {
t.Fatalf("Failed to create LocalSecretStore: %v", err)
}
secretID := "json_creds"
jsonSecret := `{"username":"testUser","password":"testPass"}`
if err := store.StoreSecretByID(secretID, jsonSecret); err != nil {
t.Fatalf("Failed to store JSON secret: %v", err)
}
retrieved, err := store.GetSecretByID(secretID)
if err != nil {
t.Fatalf("Failed to get JSON secret by ID: %v", err)
}
if retrieved != jsonSecret {
t.Errorf("Expected %s, got %s", jsonSecret, retrieved)
}
}
func TestListSecrets(t *testing.T) {
masterKey, err := GenerateMasterKey()
if err != nil {
t.Fatalf("Failed to generate master key: %v", err)
}
filename := "test_secrets.json"
defer os.Remove(filename)
store, err := NewLocalSecretStore(masterKey, filename, true)
if err != nil {
t.Fatalf("Failed to create LocalSecretStore: %v", err)
}
secretID1 := "test_secret_1"
secretValue1 := "my_secret_value_1"
secretID2 := "test_secret_2"
secretValue2 := "my_secret_value_2"
err = store.StoreSecretByID(secretID1, secretValue1)
if err != nil {
t.Fatalf("Failed to store secret: %v", err)
}
err = store.StoreSecretByID(secretID2, secretValue2)
if err != nil {
t.Fatalf("Failed to store secret: %v", err)
}
secrets, err := store.ListSecrets()
if err != nil {
t.Fatalf("Failed to list secrets: %v", err)
}
if len(secrets) != 2 {
t.Errorf("Expected 2 secrets, got %d", len(secrets))
}
if secrets[secretID1] != store.Secrets[secretID1] {
t.Errorf("Expected secret value %s, got %s", store.Secrets[secretID1], secrets[secretID1])
}
if secrets[secretID2] != store.Secrets[secretID2] {
t.Errorf("Expected secret value %s, got %s", store.Secrets[secretID2], secrets[secretID2])
}
}