214 lines
3.9 KiB
Go
214 lines
3.9 KiB
Go
// Copyright (C) 2018 Marius Schellenberger
|
|
|
|
package jwt
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
var claims = Claims{
|
|
"sub": "1234567890",
|
|
"name": "John Doe",
|
|
"admin": true,
|
|
"fizz": "buzz",
|
|
}
|
|
|
|
func TestValidate(t *testing.T) {
|
|
jwt, err := New(time.Second, NewMemBlacklist(), nil)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
token := NewToken(claims.Copy(), nil)
|
|
err = jwt.Sign(token)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
_, err = DecodeToken("")
|
|
if err == nil {
|
|
t.Error(errors.New("token is empty"))
|
|
}
|
|
nt, err := DecodeToken(token.String())
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
err = jwt.Verify(nt)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
time.Sleep(time.Second * 2)
|
|
err = jwt.Verify(nt)
|
|
if err == nil {
|
|
t.Error(errors.New("token should be expired"))
|
|
}
|
|
|
|
err = jwt.Invalidate(nt)
|
|
if err == nil {
|
|
t.Error(errors.New("token is expired"))
|
|
}
|
|
|
|
nt.Claims.Delete(ExpClaim)
|
|
err = jwt.Sign(nt)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
err = jwt.Verify(nt)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
err = jwt.Invalidate(nt)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
err = jwt.Invalidate(nt)
|
|
if err == nil {
|
|
t.Error(errors.New("double invalidate"))
|
|
}
|
|
|
|
err = jwt.Verify(nt)
|
|
if err == nil {
|
|
t.Error(errors.New("token should be blacklisted"))
|
|
}
|
|
err = jwt.Stop()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
// should not panic
|
|
err = jwt.Stop()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
func TestNoBlacklist(t *testing.T) {
|
|
jwt, err := New(time.Second, nil, nil)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
token := NewToken(claims.Copy(), nil)
|
|
err = jwt.Sign(token)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
_, err = DecodeToken("")
|
|
if err == nil {
|
|
t.Error(errors.New("token is empty"))
|
|
}
|
|
nt, err := DecodeToken(token.String())
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
err = jwt.Verify(nt)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
time.Sleep(time.Second * 2)
|
|
err = jwt.Verify(nt)
|
|
if err == nil {
|
|
t.Error(errors.New("token should be expired"))
|
|
}
|
|
|
|
err = jwt.Invalidate(nt)
|
|
if err == nil {
|
|
t.Error(errors.New("blacklisting should be disabled"))
|
|
}
|
|
}
|
|
|
|
func TestEmptySecretReader(t *testing.T) {
|
|
_, err := New(time.Second, nil, new(bytes.Buffer))
|
|
if err == nil {
|
|
t.Error(errors.New("error should be secret reader error"))
|
|
}
|
|
}
|
|
|
|
func TestInvalidSecretReader(t *testing.T) {
|
|
_, err := New(time.Second, nil, bytes.NewBufferString("123"))
|
|
if err != ErrInvalidKeySize {
|
|
t.Error(errors.New("error should be invalid key size"))
|
|
}
|
|
}
|
|
|
|
func BenchmarkDecodeToken(b *testing.B) {
|
|
jwt, _ := New(0, nil, nil)
|
|
t := NewToken(claims.Copy(), nil)
|
|
jwt.Sign(t)
|
|
token := t.String()
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
DecodeToken(token)
|
|
}
|
|
}
|
|
|
|
func BenchmarkNew(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
New(0, nil, nil)
|
|
}
|
|
}
|
|
|
|
func BenchmarkNewWithBlacklist(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
New(0, NewMemBlacklist(), nil)
|
|
}
|
|
}
|
|
|
|
func BenchmarkSignHS256(b *testing.B) {
|
|
jwt, _ := New(0, nil, nil)
|
|
t := NewToken(claims.Copy(), nil)
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
jwt.Sign(t)
|
|
}
|
|
}
|
|
|
|
func BenchmarkSignHS384(b *testing.B) {
|
|
jwt, _ := New(0, nil, nil)
|
|
t := NewToken(claims.Copy(), NewHS384())
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
jwt.Sign(t)
|
|
}
|
|
}
|
|
|
|
func BenchmarkSignHS512(b *testing.B) {
|
|
jwt, _ := New(0, nil, nil)
|
|
t := NewToken(claims.Copy(), NewHS512())
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
jwt.Sign(t)
|
|
}
|
|
}
|
|
|
|
func BenchmarkVerifyHS256(b *testing.B) {
|
|
jwt, _ := New(0, nil, nil)
|
|
t := NewToken(claims.Copy(), nil)
|
|
jwt.Sign(t)
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
jwt.Verify(t)
|
|
}
|
|
}
|
|
|
|
func BenchmarkVerifyHS384(b *testing.B) {
|
|
jwt, _ := New(0, nil, nil)
|
|
t := NewToken(claims.Copy(), NewHS384())
|
|
jwt.Sign(t)
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
jwt.Verify(t)
|
|
}
|
|
}
|
|
|
|
func BenchmarkVerifyHS512(b *testing.B) {
|
|
jwt, _ := New(0, nil, nil)
|
|
t := NewToken(claims.Copy(), NewHS512())
|
|
jwt.Sign(t)
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
jwt.Verify(t)
|
|
}
|
|
}
|