84 lines
1.7 KiB
Go
84 lines
1.7 KiB
Go
package data
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestUserRegisterAndCheck(t *testing.T) {
|
|
user := &User{}
|
|
login := &Login{
|
|
User: "testuser",
|
|
Password: "testpassword",
|
|
}
|
|
|
|
err := user.Register(login)
|
|
if err != nil {
|
|
t.Fatalf("Failed to register user: %v", err)
|
|
}
|
|
|
|
if user.ID == "" {
|
|
t.Error("Expected user ID to be set, got empty string")
|
|
}
|
|
if user.User != "testuser" {
|
|
t.Errorf("Expected username 'testuser', got '%s'", user.User)
|
|
}
|
|
if len(user.Password) == 0 {
|
|
t.Error("Expected password to be hashed and set, got empty slice")
|
|
}
|
|
if len(user.Salt) == 0 {
|
|
t.Error("Expected salt to be set, got empty slice")
|
|
}
|
|
|
|
correctLogin := &Login{
|
|
User: "testuser",
|
|
Password: "testpassword",
|
|
}
|
|
if !user.Check(correctLogin) {
|
|
t.Error("Check failed for correct password")
|
|
}
|
|
|
|
incorrectLogin := &Login{
|
|
User: "testuser",
|
|
Password: "wrongpassword",
|
|
}
|
|
if user.Check(incorrectLogin) {
|
|
t.Error("Check passed for incorrect password")
|
|
}
|
|
|
|
wrongUserLogin := &Login{
|
|
User: "wronguser",
|
|
Password: "testpassword",
|
|
}
|
|
if user.Check(wrongUserLogin) {
|
|
t.Error("Check passed for incorrect username")
|
|
}
|
|
}
|
|
|
|
func TestSalt(t *testing.T) {
|
|
salt, err := Salt()
|
|
if err != nil {
|
|
t.Fatalf("Failed to generate salt: %v", err)
|
|
}
|
|
|
|
if len(salt) != saltLength {
|
|
t.Errorf("Expected salt length %d, got %d", saltLength, len(salt))
|
|
}
|
|
|
|
salt2, err := Salt()
|
|
if err != nil {
|
|
t.Fatalf("Failed to generate second salt: %v", err)
|
|
}
|
|
|
|
// Check that salts are different (extremely unlikely to be the same)
|
|
different := false
|
|
for i := 0; i < len(salt); i++ {
|
|
if salt[i] != salt2[i] {
|
|
different = true
|
|
break
|
|
}
|
|
}
|
|
if !different {
|
|
t.Error("Expected different salts, got identical values")
|
|
}
|
|
}
|