// Copyright (C) 2018 Marius Schellenberger package jwt import ( "bytes" "errors" "testing" "time" ) func TestValidate(t *testing.T) { jwt, err := New(time.Second, NewMemBlacklist(), nil) if err != nil { t.Error(err) } token := NewToken(map[string]interface{}{ "sub": "1234567890", "name": "John Doe", "admin": true, "fizz": "buzz", }, 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(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) } } func TestNoBlacklist(t *testing.T) { jwt, err := New(time.Second, nil, nil) if err != nil { t.Error(err) } token := NewToken(map[string]interface{}{ "sub": "1234567890", "name": "John Doe", "admin": true, "fizz": "buzz", }, 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")) } }