66 lines
1.8 KiB
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)
|
|
}
|
|
}
|