1 package jwt
2
3 import (
4 "testing"
5 )
6
7 func TestVerifyAud(t *testing.T) {
8 var nilInterface interface{}
9 var nilListInterface []interface{}
10 var intListInterface interface{} = []int{1,2,3}
11 type test struct{
12 Name string
13 MapClaims MapClaims
14 Expected bool
15 Comparison string
16 Required bool
17 }
18 tests := []test{
19
20
21 { Name: "String Aud matching required", MapClaims: MapClaims{"aud": "example.com"}, Expected: true , Required: true, Comparison: "example.com"},
22 { Name: "[]String Aud with match required", MapClaims: MapClaims{"aud": []string{"example.com", "example.example.com"}}, Expected: true, Required: true, Comparison: "example.com"},
23
24
25 { Name: "String Aud with match not required", MapClaims: MapClaims{"aud": "example.com"}, Expected: true , Required: false, Comparison: "example.com"},
26 { Name: "Empty String Aud with match not required", MapClaims: MapClaims{}, Expected: true , Required: false, Comparison: "example.com"},
27 { Name: "Empty String Aud with match not required", MapClaims: MapClaims{"aud": ""}, Expected: true , Required: false, Comparison: "example.com"},
28 { Name: "Nil String Aud with match not required", MapClaims: MapClaims{"aud": nil}, Expected: true , Required: false, Comparison: "example.com"},
29
30 { Name: "[]String Aud with match not required", MapClaims: MapClaims{"aud": []string{"example.com", "example.example.com"}}, Expected: true, Required: false, Comparison: "example.com"},
31 { Name: "Empty []String Aud with match not required", MapClaims: MapClaims{"aud": []string{}}, Expected: true, Required: false, Comparison: "example.com"},
32
33
34
35 { Name: "String Aud without match required", MapClaims: MapClaims{"aud": "not.example.com"}, Expected: false, Required: true, Comparison: "example.com"},
36 { Name: "Empty String Aud without match required", MapClaims: MapClaims{"aud": ""}, Expected: false, Required: true, Comparison: "example.com"},
37 { Name: "[]String Aud without match required", MapClaims: MapClaims{"aud": []string{"not.example.com", "example.example.com"}}, Expected: false, Required: true, Comparison: "example.com"},
38 { Name: "Empty []String Aud without match required", MapClaims: MapClaims{"aud": []string{""}}, Expected: false, Required: true, Comparison: "example.com"},
39 { Name: "String Aud without match not required", MapClaims: MapClaims{"aud": "not.example.com"}, Expected: false, Required: true, Comparison: "example.com"},
40 { Name: "Empty String Aud without match not required", MapClaims: MapClaims{"aud": ""}, Expected: false, Required: true, Comparison: "example.com"},
41 { Name: "[]String Aud without match not required", MapClaims: MapClaims{"aud": []string{"not.example.com", "example.example.com"}}, Expected: false, Required: true, Comparison: "example.com"},
42
43
44 { Name: "Empty []String Aud without match required", MapClaims: MapClaims{"aud": []string{""}}, Expected: false, Required: true, Comparison: "example.com"},
45
46
47 { Name: "Empty []interface{} Aud without match required", MapClaims: MapClaims{"aud": nilListInterface}, Expected: true, Required: false, Comparison: "example.com"},
48 { Name: "[]interface{} Aud wit match required", MapClaims: MapClaims{"aud": []interface{}{"a", "foo", "example.com"}}, Expected: true, Required: true, Comparison: "example.com"},
49 { Name: "[]interface{} Aud wit match but invalid types", MapClaims: MapClaims{"aud": []interface{}{"a", 5, "example.com"}}, Expected: false, Required: true, Comparison: "example.com"},
50 { Name: "[]interface{} Aud int wit match required", MapClaims: MapClaims{"aud": intListInterface}, Expected: false, Required: true, Comparison: "example.com"},
51
52
53
54 { Name: "Empty interface{} Aud without match not required", MapClaims: MapClaims{"aud": nilInterface}, Expected: true, Required: false, Comparison: "example.com"},
55
56 }
57
58
59 for _, test := range tests {
60 t.Run(test.Name, func(t *testing.T) {
61 got := test.MapClaims.VerifyAudience(test.Comparison, test.Required)
62
63 if got != test.Expected {
64 t.Errorf("Expected %v, got %v", test.Expected, got)
65 }
66 })
67 }
68 }
69
70 func TestMapclaimsVerifyIssuedAtInvalidTypeString(t *testing.T) {
71 mapClaims := MapClaims{
72 "iat": "foo",
73 }
74 want := false
75 got := mapClaims.VerifyIssuedAt(0, false)
76 if want != got {
77 t.Fatalf("Failed to verify claims, wanted: %v got %v", want, got)
78 }
79 }
80
81 func TestMapclaimsVerifyNotBeforeInvalidTypeString(t *testing.T) {
82 mapClaims := MapClaims{
83 "nbf": "foo",
84 }
85 want := false
86 got := mapClaims.VerifyNotBefore(0, false)
87 if want != got {
88 t.Fatalf("Failed to verify claims, wanted: %v got %v", want, got)
89 }
90 }
91
92 func TestMapclaimsVerifyExpiresAtInvalidTypeString(t *testing.T) {
93 mapClaims := MapClaims{
94 "exp": "foo",
95 }
96 want := false
97 got := mapClaims.VerifyExpiresAt(0, false)
98
99 if want != got {
100 t.Fatalf("Failed to verify claims, wanted: %v got %v", want, got)
101 }
102 }
103
View as plain text