jwt/jwt_test.go

79 lines
2.5 KiB
Go
Raw Normal View History

2012-04-18 03:49:21 +04:00
package jwt
import (
2012-04-18 23:18:31 +04:00
"bytes"
2012-04-18 23:35:16 +04:00
"fmt"
2012-04-18 23:59:37 +04:00
"io"
2012-04-18 23:35:16 +04:00
"net/http"
2012-04-18 23:59:37 +04:00
"os"
"reflect"
"testing"
2012-04-18 03:49:21 +04:00
)
2012-04-18 23:59:37 +04:00
var jwtTestData = []struct {
name string
2012-04-18 23:18:31 +04:00
tokenString string
2012-04-18 23:59:37 +04:00
claims map[string]interface{}
valid bool
2012-04-18 23:18:31 +04:00
}{
{
2012-04-18 23:35:16 +04:00
"basic",
2012-04-18 23:18:31 +04:00
"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.FhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg",
map[string]interface{}{"foo": "bar"},
true,
},
{
2012-04-18 23:35:16 +04:00
"basic invalid",
2012-04-18 23:18:31 +04:00
"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.EhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg",
map[string]interface{}{"foo": "bar"},
false,
},
}
2012-04-18 03:49:21 +04:00
2012-04-18 23:18:31 +04:00
func TestJWT(t *testing.T) {
file, _ := os.Open("test/sample_key.pub")
buf := new(bytes.Buffer)
io.Copy(buf, file)
key := buf.Bytes()
file.Close()
2012-04-18 23:59:37 +04:00
2012-04-18 23:18:31 +04:00
for _, data := range jwtTestData {
2012-04-18 23:59:37 +04:00
token, err := Parse(data.tokenString, func(t *Token) ([]byte, error) { return key, nil })
2012-04-18 23:18:31 +04:00
if !reflect.DeepEqual(data.claims, token.Claims) {
t.Errorf("[%v] Claims mismatch. Expecting: %v Got: %v", data.name, data.claims, token.Claims)
}
if data.valid && err != nil {
t.Errorf("[%v] Error while verifying token: %v", data.name, err)
}
if !data.valid && err == nil {
t.Errorf("[%v] Invalid token passed validation", data.name)
}
}
2012-04-18 03:49:21 +04:00
}
2012-04-18 23:35:16 +04:00
func TestParseRequest(t *testing.T) {
file, _ := os.Open("test/sample_key.pub")
buf := new(bytes.Buffer)
io.Copy(buf, file)
key := buf.Bytes()
file.Close()
2012-04-18 23:59:37 +04:00
2012-04-18 23:35:16 +04:00
// Bearer token request
for _, data := range jwtTestData {
r, _ := http.NewRequest("GET", "/", nil)
r.Header.Set("Authorization", fmt.Sprintf("Bearer %v", data.tokenString))
2012-04-18 23:59:37 +04:00
token, err := ParseFromRequest(r, func(t *Token) ([]byte, error) { return key, nil })
2012-04-18 23:35:16 +04:00
if !reflect.DeepEqual(data.claims, token.Claims) {
t.Errorf("[%v] Claims mismatch. Expecting: %v Got: %v", data.name, data.claims, token.Claims)
}
if data.valid && err != nil {
t.Errorf("[%v] Error while verifying token: %v", data.name, err)
}
if !data.valid && err == nil {
t.Errorf("[%v] Invalid token passed validation", data.name)
}
}
2012-04-18 23:59:37 +04:00
}