90 lines
2.0 KiB
Go
90 lines
2.0 KiB
Go
package lib
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestKeystoreAndPassword(t *testing.T) {
|
|
// Setup a temporary KEYSPATH
|
|
tmpDir, err := os.MkdirTemp("", "keys_test_")
|
|
if err != nil {
|
|
t.Fatalf("Failed to create temp dir: %v", err)
|
|
}
|
|
defer os.RemoveAll(tmpDir)
|
|
|
|
os.Setenv("KEYSPATH", tmpDir)
|
|
defer os.Unsetenv("KEYSPATH")
|
|
|
|
masterPassword := []byte("super_secret_master_password")
|
|
keyName := "test_key"
|
|
|
|
// 1. Create Keystore
|
|
ks, err := CreateKeystore(keyName, masterPassword)
|
|
if err != nil {
|
|
t.Fatalf("CreateKeystore failed: %v", err)
|
|
}
|
|
|
|
key1, iv1, err := ks.GetRaw()
|
|
if err != nil {
|
|
t.Fatalf("GetRaw failed: %v", err)
|
|
}
|
|
ks.Close()
|
|
|
|
// 2. Load Keystore
|
|
ks2, err := LoadKeystore(keyName, masterPassword)
|
|
if err != nil {
|
|
t.Fatalf("LoadKeystore failed: %v", err)
|
|
}
|
|
|
|
key2, iv2, err := ks2.GetRaw()
|
|
if err != nil {
|
|
t.Fatalf("GetRaw on loaded failed: %v", err)
|
|
}
|
|
|
|
if !bytes.Equal(key1, key2) || !bytes.Equal(iv1, iv2) {
|
|
t.Fatalf("Loaded key/iv does not match created key/iv")
|
|
}
|
|
|
|
// 3. Save Password
|
|
pwdName := "db.mysql.root"
|
|
pwdValue := []byte("123456")
|
|
|
|
err = SavePassword(keyName, pwdName, pwdValue, key2, iv2, "aes-gcm")
|
|
if err != nil {
|
|
t.Fatalf("SavePassword failed: %v", err)
|
|
}
|
|
|
|
// 4. List Passwords
|
|
pwds, err := ListPasswords(keyName)
|
|
if err != nil {
|
|
t.Fatalf("ListPasswords failed: %v", err)
|
|
}
|
|
if len(pwds) != 1 || pwds[0] != pwdName {
|
|
t.Fatalf("ListPasswords returned unexpected results: %v", pwds)
|
|
}
|
|
|
|
// 5. Load Password
|
|
loadedPwd, err := LoadPassword(keyName, pwdName, key2, iv2, "aes-gcm")
|
|
if err != nil {
|
|
t.Fatalf("LoadPassword failed: %v", err)
|
|
}
|
|
if !bytes.Equal(pwdValue, loadedPwd) {
|
|
t.Fatalf("Loaded password does not match. Got: %s, Want: %s", string(loadedPwd), string(pwdValue))
|
|
}
|
|
|
|
// 6. Delete Password
|
|
err = RemovePassword(keyName, pwdName)
|
|
if err != nil {
|
|
t.Fatalf("RemovePassword failed: %v", err)
|
|
}
|
|
|
|
pwds2, _ := ListPasswords(keyName)
|
|
if len(pwds2) != 0 {
|
|
t.Fatalf("Password was not deleted properly")
|
|
}
|
|
|
|
ks2.Close()
|
|
}
|