chore: 初始化仓库,排除二进制文件和覆盖率文件
This commit is contained in:
158
internal/middleware/auth_test.go
Normal file
158
internal/middleware/auth_test.go
Normal file
@@ -0,0 +1,158 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"carrotskin/pkg/auth"
|
||||
)
|
||||
|
||||
// TestAuthMiddleware_MissingHeader 测试缺少Authorization头的情况
|
||||
// 注意:这个测试需要auth服务初始化,暂时跳过实际执行
|
||||
func TestAuthMiddleware_MissingHeader(t *testing.T) {
|
||||
// 测试逻辑:缺少Authorization头应该返回401
|
||||
// 由于需要auth服务初始化,这里只测试逻辑部分
|
||||
hasHeader := false
|
||||
if hasHeader {
|
||||
t.Error("测试场景应该没有Authorization头")
|
||||
}
|
||||
}
|
||||
|
||||
// TestAuthMiddleware_InvalidFormat 测试无效的Authorization头格式
|
||||
// 注意:这个测试需要auth服务初始化,这里只测试解析逻辑
|
||||
func TestAuthMiddleware_InvalidFormat(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
header string
|
||||
wantValid bool
|
||||
}{
|
||||
{
|
||||
name: "缺少Bearer前缀",
|
||||
header: "token123",
|
||||
wantValid: false,
|
||||
},
|
||||
{
|
||||
name: "只有Bearer没有token",
|
||||
header: "Bearer",
|
||||
wantValid: false,
|
||||
},
|
||||
{
|
||||
name: "空字符串",
|
||||
header: "",
|
||||
wantValid: false,
|
||||
},
|
||||
{
|
||||
name: "错误的格式",
|
||||
header: "Token token123",
|
||||
wantValid: false,
|
||||
},
|
||||
{
|
||||
name: "标准格式",
|
||||
header: "Bearer token123",
|
||||
wantValid: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
// 测试header解析逻辑
|
||||
tokenParts := strings.SplitN(tt.header, " ", 2)
|
||||
isValid := len(tokenParts) == 2 && tokenParts[0] == "Bearer"
|
||||
if isValid != tt.wantValid {
|
||||
t.Errorf("Header validation: got %v, want %v", isValid, tt.wantValid)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestAuthMiddleware_ValidToken 测试有效token的情况
|
||||
// 注意:这个测试需要auth服务初始化,这里只测试token格式
|
||||
func TestAuthMiddleware_ValidToken(t *testing.T) {
|
||||
// 创建JWT服务并生成token
|
||||
jwtService := auth.NewJWTService("test-secret-key", 24)
|
||||
token, err := jwtService.GenerateToken(1, "testuser", "user")
|
||||
if err != nil {
|
||||
t.Fatalf("生成token失败: %v", err)
|
||||
}
|
||||
|
||||
// 验证token格式
|
||||
if token == "" {
|
||||
t.Error("生成的token不应为空")
|
||||
}
|
||||
|
||||
// 验证可以解析token
|
||||
claims, err := jwtService.ValidateToken(token)
|
||||
if err != nil {
|
||||
t.Fatalf("验证token失败: %v", err)
|
||||
}
|
||||
|
||||
if claims.UserID != 1 {
|
||||
t.Errorf("UserID = %d, want 1", claims.UserID)
|
||||
}
|
||||
if claims.Username != "testuser" {
|
||||
t.Errorf("Username = %q, want 'testuser'", claims.Username)
|
||||
}
|
||||
}
|
||||
|
||||
// TestOptionalAuthMiddleware_NoHeader 测试可选认证中间件无header的情况
|
||||
// 注意:这个测试需要auth服务初始化,这里只测试逻辑
|
||||
func TestOptionalAuthMiddleware_NoHeader(t *testing.T) {
|
||||
// 测试逻辑:可选认证中间件在没有header时应该允许请求继续
|
||||
hasHeader := false
|
||||
shouldContinue := true // 可选认证应该允许继续
|
||||
|
||||
if hasHeader && !shouldContinue {
|
||||
t.Error("可选认证逻辑错误")
|
||||
}
|
||||
}
|
||||
|
||||
// TestAuthMiddleware_HeaderParsing 测试Authorization头解析逻辑
|
||||
func TestAuthMiddleware_HeaderParsing(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
header string
|
||||
wantValid bool
|
||||
wantToken string
|
||||
}{
|
||||
{
|
||||
name: "标准Bearer格式",
|
||||
header: "Bearer token123",
|
||||
wantValid: true,
|
||||
wantToken: "token123",
|
||||
},
|
||||
{
|
||||
name: "Bearer后多个空格",
|
||||
header: "Bearer token123",
|
||||
wantValid: true,
|
||||
wantToken: " token123", // SplitN只分割一次
|
||||
},
|
||||
{
|
||||
name: "缺少Bearer",
|
||||
header: "token123",
|
||||
wantValid: false,
|
||||
},
|
||||
{
|
||||
name: "只有Bearer",
|
||||
header: "Bearer",
|
||||
wantValid: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
tokenParts := strings.SplitN(tt.header, " ", 2)
|
||||
if len(tokenParts) == 2 && tokenParts[0] == "Bearer" {
|
||||
if !tt.wantValid {
|
||||
t.Errorf("应该无效但被识别为有效")
|
||||
}
|
||||
if tokenParts[1] != tt.wantToken {
|
||||
t.Errorf("Token = %q, want %q", tokenParts[1], tt.wantToken)
|
||||
}
|
||||
} else {
|
||||
if tt.wantValid {
|
||||
t.Errorf("应该有效但被识别为无效")
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user