56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package middlewares
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func TestGenerateTokenPair(t *testing.T) {
|
|
InitJWT("test-secret", 15, 24, "test-issuer")
|
|
pair, err := GenerateTokenPair(42, "demo")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
access, err := ParseToken(pair.AccessToken)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
refresh, err := ParseToken(pair.RefreshToken)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if access.TokenType != TokenTypeAccess || refresh.TokenType != TokenTypeRefresh {
|
|
t.Fatalf("unexpected token types: %s, %s", access.TokenType, refresh.TokenType)
|
|
}
|
|
if access.ID == "" || refresh.ID == "" || access.ID == refresh.ID {
|
|
t.Fatal("tokens must have distinct IDs")
|
|
}
|
|
}
|
|
|
|
func TestJWTAuthFailureUsesHTTP200(t *testing.T) {
|
|
Logger = zap.NewNop()
|
|
gin.SetMode(gin.TestMode)
|
|
router := gin.New()
|
|
router.GET("/private", JWTAuth(), func(c *gin.Context) {
|
|
c.Status(http.StatusNoContent)
|
|
})
|
|
recorder := httptest.NewRecorder()
|
|
router.ServeHTTP(recorder, httptest.NewRequest(http.MethodGet, "/private", nil))
|
|
if recorder.Code != http.StatusOK {
|
|
t.Fatalf("HTTP status = %d, want 200", recorder.Code)
|
|
}
|
|
}
|
|
|
|
func TestBearerToken(t *testing.T) {
|
|
if token, err := BearerToken("Bearer abc"); err != nil || token != "abc" {
|
|
t.Fatalf("BearerToken() = %q, %v", token, err)
|
|
}
|
|
if _, err := BearerToken("abc"); err == nil {
|
|
t.Fatal("BearerToken() accepted malformed header")
|
|
}
|
|
}
|