feat: read managed database passwords from secrets
All checks were successful
Build and Push Image / docker-build-and-push (push) Successful in 6m12s
Test and Release PawSQL / test (push) Successful in 49s
Test and Release PawSQL / release (push) Successful in 9s

This commit is contained in:
2026-09-16 15:04:37 -04:00
parent 7d7133d6cc
commit 3a631f18f6
12 changed files with 120 additions and 38 deletions

View File

@@ -1,6 +1,13 @@
package postgres
import "testing"
import (
"os"
"path/filepath"
"strings"
"testing"
config "cloud.campbellwireless.net/git/barkstack/barkfile-parser/v2"
)
func TestPostgresDataMount(t *testing.T) {
tests := []struct {
@@ -17,3 +24,41 @@ func TestPostgresDataMount(t *testing.T) {
}
}
}
func TestReadSecretUsesPrefixedDockerName(t *testing.T) {
directory := t.TempDir()
path := filepath.Join(directory, config.DockerSecretName("application_password"))
if err := os.WriteFile(path, []byte("correct horse battery staple\n"), 0o600); err != nil {
t.Fatal(err)
}
provisioner := &Provisioner{SecretDirectory: directory}
password, err := provisioner.readSecret("application_password")
if err != nil {
t.Fatal(err)
}
if password != "correct horse battery staple" {
t.Fatalf("password = %q", password)
}
}
func TestReadSecretRejectsUnsafeReference(t *testing.T) {
provisioner := &Provisioner{SecretDirectory: t.TempDir()}
_, err := provisioner.readSecret("../../etc/passwd")
if err == nil || !strings.Contains(err.Error(), "invalid password secret reference") {
t.Fatalf("readSecret() error = %v", err)
}
}
func TestReadSecretRejectsMissingAndEmptySecret(t *testing.T) {
directory := t.TempDir()
provisioner := &Provisioner{SecretDirectory: directory}
if _, err := provisioner.readSecret("missing"); err == nil || !strings.Contains(err.Error(), "barkstack_missing") {
t.Fatalf("missing secret error = %v", err)
}
if err := os.WriteFile(filepath.Join(directory, config.DockerSecretName("empty")), []byte("\n"), 0o600); err != nil {
t.Fatal(err)
}
if _, err := provisioner.readSecret("empty"); err == nil || !strings.Contains(err.Error(), "is empty") {
t.Fatalf("empty secret error = %v", err)
}
}