Skip to content

Commit 3eafb35

Browse files
committed
Added error checks to test
1 parent 278eb3c commit 3eafb35

File tree

3 files changed

+43
-8
lines changed

3 files changed

+43
-8
lines changed

errors.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func (e *ValidationError) Is(err error) bool {
8787
case ErrTokenUnverifiable:
8888
return e.Errors&ValidationErrorUnverifiable != 0
8989
case ErrTokenSignatureInvalid:
90-
return e.Errors&ValidationErrorUnverifiable != 0
90+
return e.Errors&ValidationErrorSignatureInvalid != 0
9191
case ErrTokenExpired:
9292
return e.Errors&ValidationErrorExpired != 0
9393
case ErrTokenNotValidYet:

example_test.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -95,15 +95,10 @@ func ExampleParseWithClaims_customClaimsType() {
9595

9696
// An example of parsing the error types using bitfield checks
9797
func ExampleParse_errorChecking() {
98-
var (
99-
token *jwt.Token
100-
err error
101-
)
102-
10398
// Token from another example. This token is expired
104-
tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJleHAiOjE1MDAwLCJpc3MiOiJ0ZXN0In0.HE7fK0xOQwFEr4WDgRWj4teRPZ6i3GLwD5YCm6Pwu_c"
99+
var tokenString = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJleHAiOjE1MDAwLCJpc3MiOiJ0ZXN0In0.HE7fK0xOQwFEr4WDgRWj4teRPZ6i3GLwD5YCm6Pwu_c"
105100

106-
token, err = jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
101+
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
107102
return []byte("AllYourBase"), nil
108103
})
109104

parser_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)