You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.1 KiB
44 lines
1.1 KiB
package secretstore
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestFileReaderObservesOtherProcessUpdatesAndFailsClosed(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "secrets.json")
|
|
reader := FileReader{Path: path}
|
|
writer, err := Open(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
key := "running/email/password"
|
|
if _, ok := reader.Get(key); ok {
|
|
t.Fatal("unexpected initial secret")
|
|
}
|
|
for _, value := range []string{"first-app-password", "rotated-app-password"} {
|
|
if err := writer.Set(key, []byte(value)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got, ok := reader.Get(key)
|
|
if !ok || string(got) != value {
|
|
t.Fatal("reader did not observe current snapshot")
|
|
}
|
|
}
|
|
if err := writer.Delete(key); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, ok := reader.Get(key); ok {
|
|
t.Fatal("deleted secret remained available")
|
|
}
|
|
if err := writer.Set(key, []byte("temporary")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(path, []byte("invalid JSON"), 0600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, ok := reader.Get(key); ok {
|
|
t.Fatal("invalid snapshot reused stale secret")
|
|
}
|
|
}
|
|
|