87 lines
1.9 KiB
Go
87 lines
1.9 KiB
Go
|
|
package auth
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"carrotskin/pkg/config"
|
|||
|
|
"testing"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// TestGetJWTService_NotInitialized 测试未初始化时获取JWT服务
|
|||
|
|
func TestGetJWTService_NotInitialized(t *testing.T) {
|
|||
|
|
_, err := GetJWTService()
|
|||
|
|
if err == nil {
|
|||
|
|
t.Error("未初始化时应该返回错误")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
expectedError := "JWT服务未初始化,请先调用 auth.Init()"
|
|||
|
|
if err.Error() != expectedError {
|
|||
|
|
t.Errorf("错误消息 = %q, want %q", err.Error(), expectedError)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TestMustGetJWTService_Panic 测试MustGetJWTService在未初始化时panic
|
|||
|
|
func TestMustGetJWTService_Panic(t *testing.T) {
|
|||
|
|
defer func() {
|
|||
|
|
if r := recover(); r == nil {
|
|||
|
|
t.Error("MustGetJWTService 应该在未初始化时panic")
|
|||
|
|
}
|
|||
|
|
}()
|
|||
|
|
|
|||
|
|
_ = MustGetJWTService()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TestInit_JWTService 测试JWT服务初始化
|
|||
|
|
func TestInit_JWTService(t *testing.T) {
|
|||
|
|
cfg := config.JWTConfig{
|
|||
|
|
Secret: "test-secret-key",
|
|||
|
|
ExpireHours: 24,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
err := Init(cfg)
|
|||
|
|
if err != nil {
|
|||
|
|
t.Errorf("Init() 错误 = %v, want nil", err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 验证可以获取服务
|
|||
|
|
service, err := GetJWTService()
|
|||
|
|
if err != nil {
|
|||
|
|
t.Errorf("GetJWTService() 错误 = %v, want nil", err)
|
|||
|
|
}
|
|||
|
|
if service == nil {
|
|||
|
|
t.Error("GetJWTService() 返回的服务不应为nil")
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TestInit_JWTService_Once 测试Init只执行一次
|
|||
|
|
func TestInit_JWTService_Once(t *testing.T) {
|
|||
|
|
cfg := config.JWTConfig{
|
|||
|
|
Secret: "test-secret-key-1",
|
|||
|
|
ExpireHours: 24,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 第一次初始化
|
|||
|
|
err1 := Init(cfg)
|
|||
|
|
if err1 != nil {
|
|||
|
|
t.Fatalf("第一次Init() 错误 = %v", err1)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
service1, _ := GetJWTService()
|
|||
|
|
|
|||
|
|
// 第二次初始化(应该不会改变服务)
|
|||
|
|
cfg2 := config.JWTConfig{
|
|||
|
|
Secret: "test-secret-key-2",
|
|||
|
|
ExpireHours: 48,
|
|||
|
|
}
|
|||
|
|
err2 := Init(cfg2)
|
|||
|
|
if err2 != nil {
|
|||
|
|
t.Fatalf("第二次Init() 错误 = %v", err2)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
service2, _ := GetJWTService()
|
|||
|
|
|
|||
|
|
// 验证是同一个实例(sync.Once保证)
|
|||
|
|
if service1 != service2 {
|
|||
|
|
t.Error("Init应该只执行一次,返回同一个实例")
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|