Files
bot-pontos/backend/internal/adapters/crypto/crypto_test.go
2026-10-23 22:31:02 -03:00

84 lines
2.1 KiB
Go

package crypto
import (
"strings"
"testing"
)
const (
keyA = "chave-de-teste-numero-um-com-32-caracteres!"
keyB = "chave-de-teste-numero-dois-com-32-caracteres"
)
func TestKeyringRoundTrip(t *testing.T) {
k, err := NewKeyring(keyA, 1, "", 0)
if err != nil {
t.Fatal(err)
}
data, version, err := k.Encrypt("senha-pontomais")
if err != nil || version != 1 {
t.Fatalf("Encrypt: version=%d err=%v", version, err)
}
if strings.Contains(string(data), "senha-pontomais") {
t.Fatal("texto cifrado contém a senha em claro")
}
plain, err := k.Decrypt(data, version)
if err != nil || plain != "senha-pontomais" {
t.Fatalf("Decrypt = %q, %v", plain, err)
}
}
func TestKeyringRotation(t *testing.T) {
old, _ := NewKeyring(keyA, 1, "", 0)
data, version, _ := old.Encrypt("segredo")
rotated, err := NewKeyring(keyB, 2, keyA, 1)
if err != nil {
t.Fatal(err)
}
if plain, err := rotated.Decrypt(data, version); err != nil || plain != "segredo" {
t.Fatalf("chave anterior deveria decifrar: %q, %v", plain, err)
}
if _, v, _ := rotated.Encrypt("novo"); v != 2 {
t.Fatalf("novas cifras deveriam usar a versão 2, usaram %d", v)
}
if _, err := rotated.Decrypt(data, 9); err == nil {
t.Fatal("versão desconhecida deveria falhar")
}
}
func TestKeyringRejectsShortKey(t *testing.T) {
if _, err := NewKeyring("curta", 1, "", 0); err == nil {
t.Fatal("chave curta deveria ser recusada")
}
}
func TestPasswordHash(t *testing.T) {
hash, err := HashPassword("senha-forte-do-painel")
if err != nil {
t.Fatal(err)
}
if !VerifyPassword(hash, "senha-forte-do-painel") {
t.Fatal("senha correta deveria conferir")
}
if VerifyPassword(hash, "senha-errada-do-painel") {
t.Fatal("senha errada não deveria conferir")
}
if _, err := HashPassword("curta"); err == nil {
t.Fatal("senha curta deveria ser recusada")
}
}
func TestToken(t *testing.T) {
token, hash, err := NewToken()
if err != nil {
t.Fatal(err)
}
if !ValidTokenFormat(token) || !TokenMatches(token, hash) {
t.Fatal("token gerado deveria ser válido e conferir com o hash")
}
if TokenMatches(token+"x", hash) {
t.Fatal("token alterado não deveria conferir")
}
}