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) } }