Files
tianyuan-api-server/apps/user/internal/logic/auth/loginuserlogic_test.go
2025-07-25 15:40:09 +08:00

109 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package authlogic
import (
"crypto/sha256"
"encoding/hex"
"testing"
)
func TestHashPassword(t *testing.T) {
tests := []struct {
name string
password string
want string
}{
{
name: "空密码",
password: "",
want: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
},
{
name: "简单密码",
password: "123456",
want: "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
},
{
name: "复杂密码",
password: "MyP@ssw0rd!",
want: "e493c394a28652900d73f0fc7e6713840b1af0ab1f3fd9c5878d82e5f753c6c1",
},
{
name: "中文字符",
password: "密码123",
want: "5a75e520515bf7695cd356454c4edb05ce925e230acf6c881701b7b8444dcbed",
},
{
name: "特殊字符",
password: "!@#$%^&*()",
want: "95ce789c5c9d18490972709838ca3a9719094bca3ac16332cfec0652b0236141",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := hashPassword(tt.password)
if got != tt.want {
t.Errorf("hashPassword() = %v, want %v", got, tt.want)
}
})
}
}
// 测试hashPassword函数的确定性相同输入总是产生相同输出
func TestHashPasswordDeterministic(t *testing.T) {
password := "testPassword123"
// 多次调用应该产生相同的结果
result1 := hashPassword(password)
result2 := hashPassword(password)
result3 := hashPassword(password)
if result1 != result2 || result2 != result3 {
t.Errorf("hashPassword() 不是确定性的: %v, %v, %v", result1, result2, result3)
}
}
// 测试hashPassword函数的输出格式
func TestHashPasswordFormat(t *testing.T) {
password := "test"
result := hashPassword(password)
// 检查输出是否为64个字符的十六进制字符串
if len(result) != 64 {
t.Errorf("hashPassword() 输出长度不正确: got %d, want 64", len(result))
}
// 检查是否为有效的十六进制字符串
_, err := hex.DecodeString(result)
if err != nil {
t.Errorf("hashPassword() 输出不是有效的十六进制字符串: %v", err)
}
}
// 基准测试
func BenchmarkHashPassword(b *testing.B) {
password := "benchmarkPassword123"
b.ResetTimer()
for i := 0; i < b.N; i++ {
hashPassword(password)
}
}
// 验证我们的实现与标准库的一致性
func TestHashPasswordConsistency(t *testing.T) {
password := "consistencyTest"
// 使用我们的函数
ourResult := hashPassword(password)
// 手动计算SHA256
h := sha256.New()
h.Write([]byte(password))
expectedResult := hex.EncodeToString(h.Sum(nil))
if ourResult != expectedResult {
t.Errorf("hashPassword() 与标准库不一致: got %v, want %v", ourResult, expectedResult)
}
}