@@ -52,6 +52,7 @@ var jwtTestData = []struct {
52
52
claims jwt.Claims
53
53
valid bool
54
54
errors uint32
55
+ err []error
55
56
parser * jwt.Parser
56
57
signingMethod jwt.SigningMethod // The method to sign the JWT token for test purpose
57
58
}{
@@ -63,6 +64,7 @@ var jwtTestData = []struct {
63
64
true ,
64
65
0 ,
65
66
nil ,
67
+ nil ,
66
68
jwt .SigningMethodRS256 ,
67
69
},
68
70
{
@@ -72,6 +74,7 @@ var jwtTestData = []struct {
72
74
jwt.MapClaims {"foo" : "bar" , "exp" : float64 (time .Now ().Unix () - 100 )},
73
75
false ,
74
76
jwt .ValidationErrorExpired ,
77
+ []error {jwt .ErrTokenExpired },
75
78
nil ,
76
79
jwt .SigningMethodRS256 ,
77
80
},
@@ -82,6 +85,7 @@ var jwtTestData = []struct {
82
85
jwt.MapClaims {"foo" : "bar" , "nbf" : float64 (time .Now ().Unix () + 100 )},
83
86
false ,
84
87
jwt .ValidationErrorNotValidYet ,
88
+ []error {jwt .ErrTokenNotValidYet },
85
89
nil ,
86
90
jwt .SigningMethodRS256 ,
87
91
},
@@ -92,6 +96,7 @@ var jwtTestData = []struct {
92
96
jwt.MapClaims {"foo" : "bar" , "nbf" : float64 (time .Now ().Unix () + 100 ), "exp" : float64 (time .Now ().Unix () - 100 )},
93
97
false ,
94
98
jwt .ValidationErrorNotValidYet | jwt .ValidationErrorExpired ,
99
+ []error {jwt .ErrTokenNotValidYet },
95
100
nil ,
96
101
jwt .SigningMethodRS256 ,
97
102
},
@@ -102,6 +107,7 @@ var jwtTestData = []struct {
102
107
jwt.MapClaims {"foo" : "bar" },
103
108
false ,
104
109
jwt .ValidationErrorSignatureInvalid ,
110
+ []error {jwt .ErrTokenSignatureInvalid , rsa .ErrVerification },
105
111
nil ,
106
112
jwt .SigningMethodRS256 ,
107
113
},
@@ -112,6 +118,7 @@ var jwtTestData = []struct {
112
118
jwt.MapClaims {"foo" : "bar" },
113
119
false ,
114
120
jwt .ValidationErrorUnverifiable ,
121
+ []error {jwt .ErrTokenUnverifiable },
115
122
nil ,
116
123
jwt .SigningMethodRS256 ,
117
124
},
@@ -122,6 +129,7 @@ var jwtTestData = []struct {
122
129
jwt.MapClaims {"foo" : "bar" },
123
130
false ,
124
131
jwt .ValidationErrorSignatureInvalid ,
132
+ []error {jwt .ErrTokenSignatureInvalid },
125
133
nil ,
126
134
jwt .SigningMethodRS256 ,
127
135
},
@@ -132,6 +140,7 @@ var jwtTestData = []struct {
132
140
jwt.MapClaims {"foo" : "bar" },
133
141
false ,
134
142
jwt .ValidationErrorUnverifiable ,
143
+ []error {jwt .ErrTokenUnverifiable , errKeyFuncError },
135
144
nil ,
136
145
jwt .SigningMethodRS256 ,
137
146
},
@@ -142,6 +151,7 @@ var jwtTestData = []struct {
142
151
jwt.MapClaims {"foo" : "bar" },
143
152
false ,
144
153
jwt .ValidationErrorSignatureInvalid ,
154
+ []error {jwt .ErrTokenSignatureInvalid },
145
155
& jwt.Parser {ValidMethods : []string {"HS256" }},
146
156
jwt .SigningMethodRS256 ,
147
157
},
@@ -152,6 +162,7 @@ var jwtTestData = []struct {
152
162
jwt.MapClaims {"foo" : "bar" },
153
163
true ,
154
164
0 ,
165
+ nil ,
155
166
& jwt.Parser {ValidMethods : []string {"RS256" , "HS256" }},
156
167
jwt .SigningMethodRS256 ,
157
168
},
@@ -162,6 +173,7 @@ var jwtTestData = []struct {
162
173
jwt.MapClaims {"foo" : "bar" },
163
174
false ,
164
175
jwt .ValidationErrorSignatureInvalid ,
176
+ []error {jwt .ErrTokenSignatureInvalid },
165
177
& jwt.Parser {ValidMethods : []string {"RS256" , "HS256" }},
166
178
jwt .SigningMethodES256 ,
167
179
},
@@ -172,6 +184,7 @@ var jwtTestData = []struct {
172
184
jwt.MapClaims {"foo" : "bar" },
173
185
true ,
174
186
0 ,
187
+ nil ,
175
188
& jwt.Parser {ValidMethods : []string {"HS256" , "ES256" }},
176
189
jwt .SigningMethodES256 ,
177
190
},
@@ -182,6 +195,7 @@ var jwtTestData = []struct {
182
195
jwt.MapClaims {"foo" : json .Number ("123.4" )},
183
196
true ,
184
197
0 ,
198
+ nil ,
185
199
& jwt.Parser {UseJSONNumber : true },
186
200
jwt .SigningMethodRS256 ,
187
201
},
@@ -194,6 +208,7 @@ var jwtTestData = []struct {
194
208
},
195
209
true ,
196
210
0 ,
211
+ nil ,
197
212
& jwt.Parser {UseJSONNumber : true },
198
213
jwt .SigningMethodRS256 ,
199
214
},
@@ -204,6 +219,7 @@ var jwtTestData = []struct {
204
219
jwt.MapClaims {"foo" : "bar" , "exp" : json .Number (fmt .Sprintf ("%v" , time .Now ().Unix ()- 100 ))},
205
220
false ,
206
221
jwt .ValidationErrorExpired ,
222
+ []error {jwt .ErrTokenExpired },
207
223
& jwt.Parser {UseJSONNumber : true },
208
224
jwt .SigningMethodRS256 ,
209
225
},
@@ -214,6 +230,7 @@ var jwtTestData = []struct {
214
230
jwt.MapClaims {"foo" : "bar" , "nbf" : json .Number (fmt .Sprintf ("%v" , time .Now ().Unix ()+ 100 ))},
215
231
false ,
216
232
jwt .ValidationErrorNotValidYet ,
233
+ []error {jwt .ErrTokenNotValidYet },
217
234
& jwt.Parser {UseJSONNumber : true },
218
235
jwt .SigningMethodRS256 ,
219
236
},
@@ -224,6 +241,7 @@ var jwtTestData = []struct {
224
241
jwt.MapClaims {"foo" : "bar" , "nbf" : json .Number (fmt .Sprintf ("%v" , time .Now ().Unix ()+ 100 )), "exp" : json .Number (fmt .Sprintf ("%v" , time .Now ().Unix ()- 100 ))},
225
242
false ,
226
243
jwt .ValidationErrorNotValidYet | jwt .ValidationErrorExpired ,
244
+ []error {jwt .ErrTokenNotValidYet },
227
245
& jwt.Parser {UseJSONNumber : true },
228
246
jwt .SigningMethodRS256 ,
229
247
},
@@ -234,6 +252,7 @@ var jwtTestData = []struct {
234
252
jwt.MapClaims {"foo" : "bar" , "nbf" : json .Number (fmt .Sprintf ("%v" , time .Now ().Unix ()+ 100 ))},
235
253
true ,
236
254
0 ,
255
+ nil ,
237
256
& jwt.Parser {UseJSONNumber : true , SkipClaimsValidation : true },
238
257
jwt .SigningMethodRS256 ,
239
258
},
@@ -246,6 +265,7 @@ var jwtTestData = []struct {
246
265
},
247
266
true ,
248
267
0 ,
268
+ nil ,
249
269
& jwt.Parser {UseJSONNumber : true },
250
270
jwt .SigningMethodRS256 ,
251
271
},
@@ -258,6 +278,7 @@ var jwtTestData = []struct {
258
278
},
259
279
true ,
260
280
0 ,
281
+ nil ,
261
282
& jwt.Parser {UseJSONNumber : true },
262
283
jwt .SigningMethodRS256 ,
263
284
},
@@ -270,6 +291,7 @@ var jwtTestData = []struct {
270
291
},
271
292
true ,
272
293
0 ,
294
+ nil ,
273
295
& jwt.Parser {UseJSONNumber : true },
274
296
jwt .SigningMethodRS256 ,
275
297
},
@@ -282,6 +304,7 @@ var jwtTestData = []struct {
282
304
},
283
305
false ,
284
306
jwt .ValidationErrorMalformed ,
307
+ []error {jwt .ErrTokenMalformed },
285
308
& jwt.Parser {UseJSONNumber : true },
286
309
jwt .SigningMethodRS256 ,
287
310
},
@@ -294,6 +317,7 @@ var jwtTestData = []struct {
294
317
},
295
318
false ,
296
319
jwt .ValidationErrorMalformed ,
320
+ []error {jwt .ErrTokenMalformed },
297
321
& jwt.Parser {UseJSONNumber : true },
298
322
jwt .SigningMethodRS256 ,
299
323
},
@@ -375,6 +399,22 @@ func TestParser_Parse(t *testing.T) {
375
399
}
376
400
}
377
401
}
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
+
378
418
if data .valid {
379
419
if token .Signature == "" {
380
420
t .Errorf ("[%v] Signature is left unpopulated after parsing" , data .name )
0 commit comments