45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
|
|
package handler
|
||
|
|
|
||
|
|
import (
|
||
|
|
"net/http"
|
||
|
|
"net/http/httptest"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/gin-gonic/gin"
|
||
|
|
)
|
||
|
|
|
||
|
|
// TestExtractBearerToken 校验 Bearer token 解析
|
||
|
|
func TestExtractBearerToken(t *testing.T) {
|
||
|
|
gin.SetMode(gin.TestMode)
|
||
|
|
|
||
|
|
tests := []struct {
|
||
|
|
name string
|
||
|
|
auth string
|
||
|
|
wantToken string
|
||
|
|
wantOK bool
|
||
|
|
}{
|
||
|
|
{name: "缺失 header", auth: "", wantOK: false},
|
||
|
|
{name: "错误前缀", auth: "Token abc", wantOK: false},
|
||
|
|
{name: "Bearer 空", auth: "Bearer ", wantOK: false},
|
||
|
|
{name: "有效 Bearer", auth: "Bearer mytoken123", wantToken: "mytoken123", wantOK: true},
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, tt := range tests {
|
||
|
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
|
w := httptest.NewRecorder()
|
||
|
|
c, _ := gin.CreateTestContext(w)
|
||
|
|
c.Request = httptest.NewRequest(http.MethodGet, "/friends", nil)
|
||
|
|
if tt.auth != "" {
|
||
|
|
c.Request.Header.Set("Authorization", tt.auth)
|
||
|
|
}
|
||
|
|
got, ok := extractBearerToken(c)
|
||
|
|
if ok != tt.wantOK {
|
||
|
|
t.Fatalf("ok = %v, want %v", ok, tt.wantOK)
|
||
|
|
}
|
||
|
|
if ok && got != tt.wantToken {
|
||
|
|
t.Errorf("token = %q, want %q", got, tt.wantToken)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|