Projeto bot pontos
This commit is contained in:
83
backend/internal/adapters/crypto/crypto_test.go
Normal file
83
backend/internal/adapters/crypto/crypto_test.go
Normal file
@@ -0,0 +1,83 @@
|
||||
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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user