Files

59 lines
1.2 KiB
Go

package secrets
import (
"encoding/json"
"os"
"path/filepath"
"strings"
"testing"
)
func TestEncryptedRoundTrip(t *testing.T) {
dir := t.TempDir()
s := New(dir)
if err := s.Init(); err != nil {
t.Fatal(err)
}
if err := s.Put("repo", "restic-password", "correct horse battery staple"); err != nil {
t.Fatal(err)
}
plain, err := s.Get("repo")
if err != nil {
t.Fatal(err)
}
if plain != "correct horse battery staple" {
t.Fatalf("unexpected plaintext %q", plain)
}
raw, err := os.ReadFile(filepath.Join(dir, "repo.json"))
if err != nil {
t.Fatal(err)
}
if strings.Contains(string(raw), plain) {
t.Fatal("plaintext stored on disk")
}
}
func TestCiphertextBoundToIdentity(t *testing.T) {
dir := t.TempDir()
s := New(dir)
if err := s.Init(); err != nil {
t.Fatal(err)
}
if err := s.Put("one", "password", "secret"); err != nil {
t.Fatal(err)
}
b, _ := os.ReadFile(filepath.Join(dir, "one.json"))
var record Record
if err := json.Unmarshal(b, &record); err != nil {
t.Fatal(err)
}
record.ID = "two"
b, _ = json.Marshal(record)
if err := os.WriteFile(filepath.Join(dir, "two.json"), b, 0600); err != nil {
t.Fatal(err)
}
if _, err := s.Get("two"); err == nil {
t.Fatal("renamed secret record decrypted")
}
}