Files
barnard/password_file_test.go

66 lines
1.8 KiB
Go

package main
import (
"os"
"path/filepath"
"strings"
"testing"
)
func TestResolvePasswordUsesDirectValue(t *testing.T) {
password, err := resolve_password(" secret ", "")
if err != nil {
t.Fatal(err)
}
if password != " secret " {
t.Fatalf("password = %q; want whitespace preserved", password)
}
}
func TestResolvePasswordReadsProtectedFile(t *testing.T) {
path := filepath.Join(t.TempDir(), "password")
if err := os.WriteFile(path, []byte(" secret value \n"), 0600); err != nil {
t.Fatal(err)
}
password, err := resolve_password("", path)
if err != nil {
t.Fatal(err)
}
if password != " secret value " {
t.Fatalf("password = %q; want surrounding spaces preserved", password)
}
}
func TestResolvePasswordRejectsAmbiguousSources(t *testing.T) {
path := filepath.Join(t.TempDir(), "password")
if err := os.WriteFile(path, []byte("file secret"), 0600); err != nil {
t.Fatal(err)
}
_, err := resolve_password("argument secret", path)
if err == nil || !strings.Contains(err.Error(), "cannot be used together") {
t.Fatalf("resolve_password error = %v", err)
}
}
func TestResolvePasswordRejectsMultipleLines(t *testing.T) {
path := filepath.Join(t.TempDir(), "password")
if err := os.WriteFile(path, []byte("first\nsecond\n"), 0600); err != nil {
t.Fatal(err)
}
_, err := resolve_password("", path)
if err == nil || !strings.Contains(err.Error(), "exactly one line") {
t.Fatalf("resolve_password error = %v", err)
}
}
func TestResolvePasswordRejectsOversizedFile(t *testing.T) {
path := filepath.Join(t.TempDir(), "password")
if err := os.WriteFile(path, []byte(strings.Repeat("x", 4097)), 0600); err != nil {
t.Fatal(err)
}
_, err := resolve_password("", path)
if err == nil || !strings.Contains(err.Error(), "too large") {
t.Fatalf("resolve_password error = %v", err)
}
}