mirror of
https://github.com/davidallendj/magellan.git
synced 2025-12-20 03:27:03 -07:00
151 lines
3.7 KiB
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])
|
|
}
|
|
}
|