qnc-server-tob/common/jwt/jwtx_test.go
2025-06-07 15:53:54 +08:00

111 lines
2.8 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 jwtx
import (
"fmt"
"testing"
"time"
)
func TestGenerateAndParseJwtToken(t *testing.T) {
// 测试参数
userId := int64(39)
secret := "WUvoIwL-FK0qnlxhvxR9tV6SjfOpeJMpKmY2QvT99lA"
expireTime := int64(2592000) // 1小时过期
// 生成token
token, err := GenerateJwtToken(userId, secret, expireTime)
if err != nil {
t.Fatalf("生成JWT令牌失败: %v", err)
}
if token == "" {
t.Fatal("生成的JWT令牌为空")
}
fmt.Println(token)
// 解析token
parsedUserId, err := ParseJwtToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NTA5MjYyNTgsImlhdCI6MTc0ODMzNDI1OCwidXNlcklkIjoxNDN9.V4qV3dAjE6G-xm0KmB6QHCVhy2SmRDGAWcvl32hLNmI", secret)
if err != nil {
t.Fatalf("解析JWT令牌失败: %v", err)
}
fmt.Printf("解析出的userId: %d\n", parsedUserId)
// 验证解析出的userId是否正确
// if parsedUserId != userId {
// t.Errorf("解析出的userId不匹配: 期望 %d, 实际 %d", userId, parsedUserId)
// }
}
func TestTokenExpiration(t *testing.T) {
// 测试参数
userId := int64(10086)
secret := "test_secret_key"
expireTime := int64(1) // 1秒过期
// 生成token
token, err := GenerateJwtToken(userId, secret, expireTime)
if err != nil {
t.Fatalf("生成JWT令牌失败: %v", err)
}
// 等待令牌过期
time.Sleep(2 * time.Second)
// 解析已过期token
_, err = ParseJwtToken(token, secret)
if err == nil {
t.Error("期望令牌过期错误,但没有发生错误")
}
}
func TestInvalidToken(t *testing.T) {
secret := "test_secret_key"
// 测试无效token
invalidToken := "invalid.token.string"
_, err := ParseJwtToken(invalidToken, secret)
if err == nil {
t.Error("期望无效令牌错误,但没有发生错误")
}
// 测试密钥不匹配
userId := int64(10086)
expireTime := int64(3600)
token, _ := GenerateJwtToken(userId, "original_secret", expireTime)
_, err = ParseJwtToken(token, "wrong_secret")
if err == nil {
t.Error("期望密钥不匹配错误,但没有发生错误")
}
}
func TestUserIdTypes(t *testing.T) {
cases := []struct {
name string
setupFn func() (string, string, int64)
expected int64
}{
{
name: "正常int64类型",
setupFn: func() (string, string, int64) {
userId := int64(10086)
secret := "test_secret"
expireTime := int64(3600)
token, _ := GenerateJwtToken(userId, secret, expireTime)
return token, secret, userId
},
expected: 10086,
},
// 其他类型在实际场景中通过手动修改token内容测试这里省略
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
token, secret, expected := tc.setupFn()
userId, err := ParseJwtToken(token, secret)
if err != nil {
t.Fatalf("解析失败: %v", err)
}
if userId != expected {
t.Errorf("用户ID不匹配: 期望 %d, 实际 %d", expected, userId)
}
})
}
}