package auth import ( "strings" "testing" ) func TestHashPassword_RoundTrip(t *testing.T) { const pw = "correct horse battery staple" hash, err := HashPassword(pw) if err != nil { t.Fatalf("HashPassword: %v", err) } if !strings.HasPrefix(hash, "$argon2id$v=19$") { t.Fatalf("unexpected PHC prefix: %s", hash) } ok, err := VerifyPassword(hash, pw) if err != nil { t.Fatalf("VerifyPassword: %v", err) } if !ok { t.Fatal("expected password to verify") } } func TestHashPassword_DistinctSalts(t *testing.T) { h1, _ := HashPassword("same") h2, _ := HashPassword("same") if h1 == h2 { t.Fatal("expected distinct hashes for equal passwords (random salt)") } } func TestVerifyPassword_Wrong(t *testing.T) { hash, _ := HashPassword("right") ok, err := VerifyPassword(hash, "wrong") if err != nil { t.Fatalf("VerifyPassword: %v", err) } if ok { t.Fatal("expected wrong password to fail") } } func TestVerifyPassword_Malformed(t *testing.T) { cases := []string{ "", "not-a-hash", "$argon2id$v=19$bad", "$bcrypt$v=19$m=1,t=1,p=1$aaaa$bbbb", } for _, c := range cases { if _, err := VerifyPassword(c, "x"); err == nil { t.Fatalf("expected error for malformed hash %q", c) } } }