1 package fosite
2
3 import (
4 "fmt"
5 "testing"
6
7 "github.com/stretchr/testify/require"
8 )
9
10 func TestDefaultAudienceMatchingStrategy(t *testing.T) {
11 for k, tc := range []struct {
12 h []string
13 n []string
14 err bool
15 }{
16 {
17 h: []string{},
18 n: []string{},
19 err: false,
20 },
21 {
22 h: []string{"http://foo/bar"},
23 n: []string{},
24 err: false,
25 },
26 {
27 h: []string{},
28 n: []string{"http://foo/bar"},
29 err: true,
30 },
31 {
32 h: []string{"https://cloud.ory.sh/api/users"},
33 n: []string{"https://cloud.ory.sh/api/users"},
34 err: false,
35 },
36 {
37 h: []string{"https://cloud.ory.sh/api/users"},
38 n: []string{"https://cloud.ory.sh/api/users/"},
39 err: false,
40 },
41 {
42 h: []string{"https://cloud.ory.sh/api/users/"},
43 n: []string{"https://cloud.ory.sh/api/users/"},
44 err: false,
45 },
46 {
47 h: []string{"https://cloud.ory.sh/api/users/"},
48 n: []string{"https://cloud.ory.sh/api/users"},
49 err: false,
50 },
51 {
52 h: []string{"https://cloud.ory.sh/api/users"},
53 n: []string{"https://cloud.ory.sh/api/users/1234"},
54 err: false,
55 },
56 {
57 h: []string{"https://cloud.ory.sh/api/users"},
58 n: []string{"https://cloud.ory.sh/api/users", "https://cloud.ory.sh/api/users/", "https://cloud.ory.sh/api/users/1234"},
59 err: false,
60 },
61 {
62 h: []string{"https://cloud.ory.sh/api/users", "https://cloud.ory.sh/api/tenants"},
63 n: []string{"https://cloud.ory.sh/api/users", "https://cloud.ory.sh/api/users/", "https://cloud.ory.sh/api/users/1234", "https://cloud.ory.sh/api/tenants"},
64 err: false,
65 },
66 {
67 h: []string{"https://cloud.ory.sh/api/users"},
68 n: []string{"https://cloud.ory.sh/api/users1234"},
69 err: true,
70 },
71 {
72 h: []string{"https://cloud.ory.sh/api/users"},
73 n: []string{"http://cloud.ory.sh/api/users"},
74 err: true,
75 },
76 {
77 h: []string{"https://cloud.ory.sh/api/users"},
78 n: []string{"https://cloud.ory.sh:8000/api/users"},
79 err: true,
80 },
81 {
82 h: []string{"https://cloud.ory.sh/api/users"},
83 n: []string{"https://cloud.ory.xyz/api/users"},
84 err: true,
85 },
86 {
87 h: []string{"foobar"},
88 n: []string{"foobar"},
89 err: false,
90 },
91 {
92 h: []string{"foo bar"},
93 n: []string{"foo bar"},
94 err: false,
95 },
96 {
97 h: []string{"foobar"},
98 n: []string{"foobar"},
99 err: false,
100 },
101 {
102 h: []string{"zoo", "bar"},
103 n: []string{"zoo"},
104 err: false,
105 },
106 {
107 h: []string{"zoo"},
108 n: []string{"zoo", "bar"},
109 err: true,
110 },
111 {
112 h: []string{"foobar"},
113 n: []string{"foobar/"},
114 err: false,
115 },
116 {
117 h: []string{"foobar/"},
118 n: []string{"foobar"},
119 err: false,
120 },
121 } {
122 t.Run(fmt.Sprintf("case=%d", k), func(t *testing.T) {
123 err := DefaultAudienceMatchingStrategy(tc.h, tc.n)
124 if tc.err {
125 require.Error(t, err)
126 } else {
127 require.NoError(t, err)
128 }
129 })
130 }
131 }
132
133 func TestExactAudienceMatchingStrategy(t *testing.T) {
134 for k, tc := range []struct {
135 h []string
136 n []string
137 err bool
138 }{
139 {
140 h: []string{},
141 n: []string{},
142 err: false,
143 },
144 {
145 h: []string{"http://foo/bar"},
146 n: []string{},
147 err: false,
148 },
149 {
150 h: []string{},
151 n: []string{"http://foo/bar"},
152 err: true,
153 },
154 {
155 h: []string{"https://cloud.ory.sh/api/users"},
156 n: []string{"https://cloud.ory.sh/api/users"},
157 err: false,
158 },
159 {
160 h: []string{"https://cloud.ory.sh/api/users"},
161 n: []string{"https://cloud.ory.sh/api/users/"},
162 err: true,
163 },
164 {
165 h: []string{"https://cloud.ory.sh/api/users/"},
166 n: []string{"https://cloud.ory.sh/api/users/"},
167 err: false,
168 },
169 {
170 h: []string{"https://cloud.ory.sh/api/users/"},
171 n: []string{"https://cloud.ory.sh/api/users"},
172 err: true,
173 },
174 {
175 h: []string{"https://cloud.ory.sh/api/users"},
176 n: []string{"https://cloud.ory.sh/api/users/1234"},
177 err: true,
178 },
179 {
180 h: []string{"https://cloud.ory.sh/api/users"},
181 n: []string{"https://cloud.ory.sh/api/users", "https://cloud.ory.sh/api/users/", "https://cloud.ory.sh/api/users/1234"},
182 err: true,
183 },
184 {
185 h: []string{"https://cloud.ory.sh/api/users", "https://cloud.ory.sh/api/tenants"},
186 n: []string{"https://cloud.ory.sh/api/users", "https://cloud.ory.sh/api/users/", "https://cloud.ory.sh/api/users/1234", "https://cloud.ory.sh/api/tenants"},
187 err: true,
188 },
189 {
190 h: []string{"https://cloud.ory.sh/api/users"},
191 n: []string{"https://cloud.ory.sh/api/users1234"},
192 err: true,
193 },
194 {
195 h: []string{"https://cloud.ory.sh/api/users"},
196 n: []string{"http://cloud.ory.sh/api/users"},
197 err: true,
198 },
199 {
200 h: []string{"https://cloud.ory.sh/api/users"},
201 n: []string{"https://cloud.ory.sh:8000/api/users"},
202 err: true,
203 },
204 {
205 h: []string{"https://cloud.ory.sh/api/users"},
206 n: []string{"https://cloud.ory.xyz/api/users"},
207 err: true,
208 },
209 {
210 h: []string{"foobar"},
211 n: []string{"foobar"},
212 err: false,
213 },
214 {
215 h: []string{"foo bar"},
216 n: []string{"foo bar"},
217 err: false,
218 },
219 {
220 h: []string{"foobar"},
221 n: []string{"foobar"},
222 err: false,
223 },
224 {
225 h: []string{"zoo", "bar"},
226 n: []string{"zoo"},
227 err: false,
228 },
229 {
230 h: []string{"zoo"},
231 n: []string{"zoo", "bar"},
232 err: true,
233 },
234 {
235 h: []string{"foobar"},
236 n: []string{"foobar/"},
237 err: true,
238 },
239 {
240 h: []string{"foobar/"},
241 n: []string{"foobar"},
242 err: true,
243 },
244 } {
245 t.Run(fmt.Sprintf("case=%d", k), func(t *testing.T) {
246 err := ExactAudienceMatchingStrategy(tc.h, tc.n)
247 if tc.err {
248 require.Error(t, err)
249 } else {
250 require.NoError(t, err)
251 }
252 })
253 }
254 }
255
View as plain text