89 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package jwt
 | 
						|
 | 
						|
import (
 | 
						|
	"github.com/astaxie/beego"
 | 
						|
	"net/http"
 | 
						|
	"net/http/httptest"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func testRequest(method, path string) (*httptest.ResponseRecorder, *http.Request) {
 | 
						|
	request, _ := http.NewRequest(method, path, nil)
 | 
						|
	recorder := httptest.NewRecorder()
 | 
						|
 | 
						|
	return recorder, request
 | 
						|
}
 | 
						|
 | 
						|
func Test_IssueTokenAction(t *testing.T) {
 | 
						|
	url := "/v1/jwt/issue-token"
 | 
						|
 | 
						|
	mux := beego.NewControllerRegister()
 | 
						|
 | 
						|
	mux.InsertFilter("*", beego.BeforeRouter, AuthRequest(&Options{
 | 
						|
		PrivateKeyPath: "test/jwt.rsa",
 | 
						|
		PublicKeyPath:  "test/jwt.rsa.pub",
 | 
						|
		WhiteList:      []string{"/v1/jwt/issue-token", "/docs"},
 | 
						|
	}))
 | 
						|
 | 
						|
	mux.Add("/v1/jwt/issue-token", &JwtController{}, "get:IssueToken")
 | 
						|
 | 
						|
	rw, r := testRequest("GET", url)
 | 
						|
	mux.ServeHTTP(rw, r)
 | 
						|
 | 
						|
	if rw.Code != http.StatusOK {
 | 
						|
		t.Errorf("Shoud return 200")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (tc *JwtController) Foo() {
 | 
						|
	tc.Ctx.Output.Body([]byte("ok"))
 | 
						|
}
 | 
						|
 | 
						|
func Test_AuthRequestWithAuthorizationHeader(t *testing.T) {
 | 
						|
 | 
						|
	url := "/foo"
 | 
						|
 | 
						|
	mux := beego.NewControllerRegister()
 | 
						|
 | 
						|
	mux.InsertFilter("*", beego.BeforeRouter, AuthRequest(&Options{
 | 
						|
		PrivateKeyPath: "test/jwt.rsa",
 | 
						|
		PublicKeyPath:  "test/jwt.rsa.pub",
 | 
						|
		WhiteList:      []string{"/v1/jwt/issue-token", "/docs"},
 | 
						|
	}))
 | 
						|
 | 
						|
	mux.Add("/foo", &JwtController{}, "get:Foo")
 | 
						|
	newToken := CreateToken()
 | 
						|
 | 
						|
	rw, r := testRequest("GET", url)
 | 
						|
	r.Header.Add("Authorization", "Bearer "+newToken["token"])
 | 
						|
	mux.ServeHTTP(rw, r)
 | 
						|
 | 
						|
	if rw.Code != http.StatusOK {
 | 
						|
		t.Errorf("Shoud return 200")
 | 
						|
	}
 | 
						|
	if rw.Body.String() != "ok" {
 | 
						|
		t.Errorf("Should output ok")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_AuthRequestWithoutAuthorizationHeader(t *testing.T) {
 | 
						|
	url := "/foo"
 | 
						|
 | 
						|
	mux := beego.NewControllerRegister()
 | 
						|
 | 
						|
	mux.InsertFilter("*", beego.BeforeRouter, AuthRequest(&Options{
 | 
						|
		PrivateKeyPath: "test/jwt.rsa",
 | 
						|
		PublicKeyPath:  "test/jwt.rsa.pub",
 | 
						|
		WhiteList:      []string{"/v1/jwt/issue-token", "/docs"},
 | 
						|
	}))
 | 
						|
 | 
						|
	mux.Add("/foo", &JwtController{}, "get:Foo")
 | 
						|
 | 
						|
	rw, r := testRequest("GET", url)
 | 
						|
	mux.ServeHTTP(rw, r)
 | 
						|
 | 
						|
	if rw.Code != http.StatusUnauthorized {
 | 
						|
		t.Errorf("Shoud return 401")
 | 
						|
	}
 | 
						|
}
 |