(t *testing.T)
| 510 | } |
| 511 | |
| 512 | func TestParser_Parse(t *testing.T) { |
| 513 | // Iterate over test data set and run tests |
| 514 | for _, data := range jwtTestData { |
| 515 | t.Run(data.name, func(t *testing.T) { |
| 516 | // If the token string is blank, use helper function to generate string |
| 517 | if data.tokenString == "" { |
| 518 | data.tokenString = signToken(data.claims, data.signingMethod) |
| 519 | } |
| 520 | |
| 521 | // Parse the token |
| 522 | var token *jwt.Token |
| 523 | var err error |
| 524 | var parser = data.parser |
| 525 | if parser == nil { |
| 526 | parser = jwt.NewParser() |
| 527 | } |
| 528 | // Figure out correct claims type |
| 529 | switch data.claims.(type) { |
| 530 | case jwt.MapClaims: |
| 531 | token, err = parser.ParseWithClaims(data.tokenString, jwt.MapClaims{}, data.keyfunc) |
| 532 | case *jwt.RegisteredClaims: |
| 533 | token, err = parser.ParseWithClaims(data.tokenString, &jwt.RegisteredClaims{}, data.keyfunc) |
| 534 | case *customClaimsWithDifferentTypes: |
| 535 | token, err = parser.ParseWithClaims(data.tokenString, &customClaimsWithDifferentTypes{}, data.keyfunc) |
| 536 | case nil: |
| 537 | token, err = parser.ParseWithClaims(data.tokenString, nil, data.keyfunc) |
| 538 | } |
| 539 | |
| 540 | // Verify result matches expectation |
| 541 | if data.claims != nil && !reflect.DeepEqual(data.claims, token.Claims) { |
| 542 | t.Errorf("[%v] Claims mismatch. Expecting: %v Got: %v", data.name, data.claims, token.Claims) |
| 543 | } |
| 544 | |
| 545 | if data.valid && err != nil { |
| 546 | t.Errorf("[%v] Error while verifying token: %T:%v", data.name, err, err) |
| 547 | } |
| 548 | |
| 549 | if !data.valid && err == nil { |
| 550 | t.Errorf("[%v] Invalid token passed validation", data.name) |
| 551 | } |
| 552 | |
| 553 | // Since the returned token is nil in the ErrTokenMalformed, we |
| 554 | // cannot make the comparison here |
| 555 | if !errors.Is(err, jwt.ErrTokenMalformed) && |
| 556 | ((err == nil && !token.Valid) || (err != nil && token.Valid)) { |
| 557 | t.Errorf("[%v] Inconsistent behavior between returned error and token.Valid", data.name) |
| 558 | } |
| 559 | |
| 560 | if data.err != nil { |
| 561 | if err == nil { |
| 562 | t.Errorf("[%v] Expecting error(s). Didn't get one.", data.name) |
| 563 | } else { |
| 564 | var all = false |
| 565 | for _, e := range data.err { |
| 566 | all = errors.Is(err, e) |
| 567 | } |
| 568 | |
| 569 | if !all { |
nothing calls this directly
no test coverage detected