ccpoad / internal /model /auth_token_test.go
anyalerob's picture
Upload folder using huggingface_hub
2986042 verified
Raw
History Blame Contribute Delete
4.66 kB
package model
import (
"testing"
"time"
)
func TestHashToken(t *testing.T) {
tests := []struct {
name string
token string
want string
}{
{
name: "标准令牌",
token: "sk-ant-1234567890abcdef",
want: "8a6d3b9c7f2e1a5d4c8b7a6f5e4d3c2b1a9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d", // SHA256哈希
},
{
name: "空字符串",
token: "",
want: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", // 空字符串的SHA256
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := HashToken(tt.token)
// 验证是否为64字符的十六进制字符串
if len(got) != 64 {
t.Errorf("HashToken() 返回长度 = %v, 期望 64", len(got))
}
// 每次调用应返回相同的哈希值
got2 := HashToken(tt.token)
if got != got2 {
t.Errorf("HashToken() 不一致: %v != %v", got, got2)
}
})
}
}
func TestAuthToken_IsExpired(t *testing.T) {
now := time.Now().UnixMilli()
past := now - 1000
future := now + 1000
tests := []struct {
name string
expiresAt *int64
want bool
}{
{
name: "永不过期(nil)",
expiresAt: nil,
want: false,
},
{
name: "已过期",
expiresAt: &past,
want: true,
},
{
name: "未过期",
expiresAt: &future,
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
token := &AuthToken{
ExpiresAt: tt.expiresAt,
}
if got := token.IsExpired(); got != tt.want {
t.Errorf("IsExpired() = %v, want %v", got, tt.want)
}
})
}
}
func TestAuthToken_IsValid(t *testing.T) {
now := time.Now().UnixMilli()
past := now - 1000
future := now + 1000
tests := []struct {
name string
isActive bool
expiresAt *int64
want bool
}{
{
name: "有效令牌(启用+未过期)",
isActive: true,
expiresAt: &future,
want: true,
},
{
name: "有效令牌(启用+永不过期)",
isActive: true,
expiresAt: nil,
want: true,
},
{
name: "无效令牌(禁用)",
isActive: false,
expiresAt: &future,
want: false,
},
{
name: "无效令牌(已过期)",
isActive: true,
expiresAt: &past,
want: false,
},
{
name: "无效令牌(禁用+已过期)",
isActive: false,
expiresAt: &past,
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
token := &AuthToken{
IsActive: tt.isActive,
ExpiresAt: tt.expiresAt,
}
if got := token.IsValid(); got != tt.want {
t.Errorf("IsValid() = %v, want %v", got, tt.want)
}
})
}
}
func TestMaskToken(t *testing.T) {
tests := []struct {
name string
token string
want string
}{
{
name: "标准令牌",
token: "sk-ant-1234567890abcdef",
want: "sk-a****cdef",
},
{
name: "短令牌",
token: "short",
want: "****",
},
{
name: "8字符令牌(边界)",
token: "12345678",
want: "****",
},
{
name: "9字符令牌",
token: "123456789",
want: "1234****6789",
},
{
name: "长令牌",
token: "sk-ant-api03-very-long-token-1234567890abcdefghijklmnopqrstuvwxyz",
want: "sk-a****wxyz",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := MaskToken(tt.token); got != tt.want {
t.Errorf("MaskToken() = %v, want %v", got, tt.want)
}
})
}
}
func TestAuthToken_UpdateLastUsed(t *testing.T) {
token := &AuthToken{
ID: 1,
Token: "test-token",
LastUsedAt: nil,
}
// 第一次更新
token.UpdateLastUsed()
if token.LastUsedAt == nil {
t.Fatal("UpdateLastUsed() 未设置 LastUsedAt")
}
firstTime := *token.LastUsedAt
// 第二次更新
token.UpdateLastUsed()
if token.LastUsedAt == nil {
t.Fatal("UpdateLastUsed() LastUsedAt 变为 nil")
}
secondTime := *token.LastUsedAt
// 验证时间已更新
if secondTime <= firstTime {
t.Errorf("UpdateLastUsed() 时间未更新: %v <= %v", secondTime, firstTime)
}
}
func TestHashToken_Consistency(t *testing.T) {
// 验证相同输入总是产生相同输出
token := "sk-ant-test-token-12345" //nolint:gosec // G101: 测试用假凭证
hash1 := HashToken(token)
hash2 := HashToken(token)
hash3 := HashToken(token)
if hash1 != hash2 || hash2 != hash3 {
t.Errorf("HashToken() 不一致: %v, %v, %v", hash1, hash2, hash3)
}
// 验证不同输入产生不同输出
differentToken := "sk-ant-test-token-54321" //nolint:gosec // G101: 测试用假凭证
differentHash := HashToken(differentToken)
if hash1 == differentHash {
t.Errorf("HashToken() 不同输入产生相同哈希值")
}
}