@@ -52,6 +52,7 @@ var jwtTestData = []struct {
5252 claims jwt.Claims
5353 valid bool
5454 errors uint32
55+ err []error
5556 parser * jwt.Parser
5657 signingMethod jwt.SigningMethod // The method to sign the JWT token for test purpose
5758}{
@@ -63,6 +64,7 @@ var jwtTestData = []struct {
6364 true ,
6465 0 ,
6566 nil ,
67+ nil ,
6668 jwt .SigningMethodRS256 ,
6769 },
6870 {
@@ -72,6 +74,7 @@ var jwtTestData = []struct {
7274 jwt.MapClaims {"foo" : "bar" , "exp" : float64 (time .Now ().Unix () - 100 )},
7375 false ,
7476 jwt .ValidationErrorExpired ,
77+ []error {jwt .ErrTokenExpired },
7578 nil ,
7679 jwt .SigningMethodRS256 ,
7780 },
@@ -82,6 +85,7 @@ var jwtTestData = []struct {
8285 jwt.MapClaims {"foo" : "bar" , "nbf" : float64 (time .Now ().Unix () + 100 )},
8386 false ,
8487 jwt .ValidationErrorNotValidYet ,
88+ []error {jwt .ErrTokenNotValidYet },
8589 nil ,
8690 jwt .SigningMethodRS256 ,
8791 },
@@ -92,6 +96,7 @@ var jwtTestData = []struct {
9296 jwt.MapClaims {"foo" : "bar" , "nbf" : float64 (time .Now ().Unix () + 100 ), "exp" : float64 (time .Now ().Unix () - 100 )},
9397 false ,
9498 jwt .ValidationErrorNotValidYet | jwt .ValidationErrorExpired ,
99+ []error {jwt .ErrTokenNotValidYet },
95100 nil ,
96101 jwt .SigningMethodRS256 ,
97102 },
@@ -102,6 +107,7 @@ var jwtTestData = []struct {
102107 jwt.MapClaims {"foo" : "bar" },
103108 false ,
104109 jwt .ValidationErrorSignatureInvalid ,
110+ []error {jwt .ErrTokenSignatureInvalid , rsa .ErrVerification },
105111 nil ,
106112 jwt .SigningMethodRS256 ,
107113 },
@@ -112,6 +118,7 @@ var jwtTestData = []struct {
112118 jwt.MapClaims {"foo" : "bar" },
113119 false ,
114120 jwt .ValidationErrorUnverifiable ,
121+ []error {jwt .ErrTokenUnverifiable },
115122 nil ,
116123 jwt .SigningMethodRS256 ,
117124 },
@@ -122,6 +129,7 @@ var jwtTestData = []struct {
122129 jwt.MapClaims {"foo" : "bar" },
123130 false ,
124131 jwt .ValidationErrorSignatureInvalid ,
132+ []error {jwt .ErrTokenSignatureInvalid },
125133 nil ,
126134 jwt .SigningMethodRS256 ,
127135 },
@@ -132,6 +140,7 @@ var jwtTestData = []struct {
132140 jwt.MapClaims {"foo" : "bar" },
133141 false ,
134142 jwt .ValidationErrorUnverifiable ,
143+ []error {jwt .ErrTokenUnverifiable , errKeyFuncError },
135144 nil ,
136145 jwt .SigningMethodRS256 ,
137146 },
@@ -142,6 +151,7 @@ var jwtTestData = []struct {
142151 jwt.MapClaims {"foo" : "bar" },
143152 false ,
144153 jwt .ValidationErrorSignatureInvalid ,
154+ []error {jwt .ErrTokenSignatureInvalid },
145155 & jwt.Parser {ValidMethods : []string {"HS256" }},
146156 jwt .SigningMethodRS256 ,
147157 },
@@ -152,6 +162,7 @@ var jwtTestData = []struct {
152162 jwt.MapClaims {"foo" : "bar" },
153163 true ,
154164 0 ,
165+ nil ,
155166 & jwt.Parser {ValidMethods : []string {"RS256" , "HS256" }},
156167 jwt .SigningMethodRS256 ,
157168 },
@@ -162,6 +173,7 @@ var jwtTestData = []struct {
162173 jwt.MapClaims {"foo" : "bar" },
163174 false ,
164175 jwt .ValidationErrorSignatureInvalid ,
176+ []error {jwt .ErrTokenSignatureInvalid },
165177 & jwt.Parser {ValidMethods : []string {"RS256" , "HS256" }},
166178 jwt .SigningMethodES256 ,
167179 },
@@ -172,6 +184,7 @@ var jwtTestData = []struct {
172184 jwt.MapClaims {"foo" : "bar" },
173185 true ,
174186 0 ,
187+ nil ,
175188 & jwt.Parser {ValidMethods : []string {"HS256" , "ES256" }},
176189 jwt .SigningMethodES256 ,
177190 },
@@ -182,6 +195,7 @@ var jwtTestData = []struct {
182195 jwt.MapClaims {"foo" : json .Number ("123.4" )},
183196 true ,
184197 0 ,
198+ nil ,
185199 & jwt.Parser {UseJSONNumber : true },
186200 jwt .SigningMethodRS256 ,
187201 },
@@ -194,6 +208,7 @@ var jwtTestData = []struct {
194208 },
195209 true ,
196210 0 ,
211+ nil ,
197212 & jwt.Parser {UseJSONNumber : true },
198213 jwt .SigningMethodRS256 ,
199214 },
@@ -204,6 +219,7 @@ var jwtTestData = []struct {
204219 jwt.MapClaims {"foo" : "bar" , "exp" : json .Number (fmt .Sprintf ("%v" , time .Now ().Unix ()- 100 ))},
205220 false ,
206221 jwt .ValidationErrorExpired ,
222+ []error {jwt .ErrTokenExpired },
207223 & jwt.Parser {UseJSONNumber : true },
208224 jwt .SigningMethodRS256 ,
209225 },
@@ -214,6 +230,7 @@ var jwtTestData = []struct {
214230 jwt.MapClaims {"foo" : "bar" , "nbf" : json .Number (fmt .Sprintf ("%v" , time .Now ().Unix ()+ 100 ))},
215231 false ,
216232 jwt .ValidationErrorNotValidYet ,
233+ []error {jwt .ErrTokenNotValidYet },
217234 & jwt.Parser {UseJSONNumber : true },
218235 jwt .SigningMethodRS256 ,
219236 },
@@ -224,6 +241,7 @@ var jwtTestData = []struct {
224241 jwt.MapClaims {"foo" : "bar" , "nbf" : json .Number (fmt .Sprintf ("%v" , time .Now ().Unix ()+ 100 )), "exp" : json .Number (fmt .Sprintf ("%v" , time .Now ().Unix ()- 100 ))},
225242 false ,
226243 jwt .ValidationErrorNotValidYet | jwt .ValidationErrorExpired ,
244+ []error {jwt .ErrTokenNotValidYet },
227245 & jwt.Parser {UseJSONNumber : true },
228246 jwt .SigningMethodRS256 ,
229247 },
@@ -234,6 +252,7 @@ var jwtTestData = []struct {
234252 jwt.MapClaims {"foo" : "bar" , "nbf" : json .Number (fmt .Sprintf ("%v" , time .Now ().Unix ()+ 100 ))},
235253 true ,
236254 0 ,
255+ nil ,
237256 & jwt.Parser {UseJSONNumber : true , SkipClaimsValidation : true },
238257 jwt .SigningMethodRS256 ,
239258 },
@@ -246,6 +265,7 @@ var jwtTestData = []struct {
246265 },
247266 true ,
248267 0 ,
268+ nil ,
249269 & jwt.Parser {UseJSONNumber : true },
250270 jwt .SigningMethodRS256 ,
251271 },
@@ -258,6 +278,7 @@ var jwtTestData = []struct {
258278 },
259279 true ,
260280 0 ,
281+ nil ,
261282 & jwt.Parser {UseJSONNumber : true },
262283 jwt .SigningMethodRS256 ,
263284 },
@@ -270,6 +291,7 @@ var jwtTestData = []struct {
270291 },
271292 true ,
272293 0 ,
294+ nil ,
273295 & jwt.Parser {UseJSONNumber : true },
274296 jwt .SigningMethodRS256 ,
275297 },
@@ -282,6 +304,7 @@ var jwtTestData = []struct {
282304 },
283305 false ,
284306 jwt .ValidationErrorMalformed ,
307+ []error {jwt .ErrTokenMalformed },
285308 & jwt.Parser {UseJSONNumber : true },
286309 jwt .SigningMethodRS256 ,
287310 },
@@ -294,6 +317,7 @@ var jwtTestData = []struct {
294317 },
295318 false ,
296319 jwt .ValidationErrorMalformed ,
320+ []error {jwt .ErrTokenMalformed },
297321 & jwt.Parser {UseJSONNumber : true },
298322 jwt .SigningMethodRS256 ,
299323 },
@@ -375,6 +399,22 @@ func TestParser_Parse(t *testing.T) {
375399 }
376400 }
377401 }
402+
403+ if data .err != nil {
404+ if err == nil {
405+ t .Errorf ("[%v] Expecting error(s). Didn't get one." , data .name )
406+ } else {
407+ var all = false
408+ for _ , e := range data .err {
409+ all = errors .Is (err , e )
410+ }
411+
412+ if ! all {
413+ t .Errorf ("[%v] Errors don't match expectation. %v should contain all of %v" , data .name , err , data .err )
414+ }
415+ }
416+ }
417+
378418 if data .valid {
379419 if token .Signature == "" {
380420 t .Errorf ("[%v] Signature is left unpopulated after parsing" , data .name )
0 commit comments