1
21
22 package fosite
23
24 import (
25 "strings"
26 "testing"
27
28 "github.com/stretchr/testify/assert"
29 )
30
31 func TestHierarchicScopeStrategy(t *testing.T) {
32 var strategy ScopeStrategy = HierarchicScopeStrategy
33 var scopes = []string{}
34
35 assert.False(t, strategy(scopes, "foo.bar.baz"))
36 assert.False(t, strategy(scopes, "foo.bar"))
37 assert.False(t, strategy(scopes, "foo"))
38
39 scopes = []string{"foo.bar", "bar.baz", "baz.baz.1", "baz.baz.2", "baz.baz.3", "baz.baz.baz"}
40 assert.True(t, strategy(scopes, "foo.bar.baz"))
41 assert.True(t, strategy(scopes, "baz.baz.baz"))
42 assert.True(t, strategy(scopes, "foo.bar"))
43 assert.False(t, strategy(scopes, "foo"))
44
45 assert.True(t, strategy(scopes, "bar.baz"))
46 assert.True(t, strategy(scopes, "bar.baz.zad"))
47 assert.False(t, strategy(scopes, "bar"))
48 assert.False(t, strategy(scopes, "baz"))
49
50 scopes = []string{"fosite.keys.create", "fosite.keys.get", "fosite.keys.delete", "fosite.keys.update"}
51 assert.True(t, strategy(scopes, "fosite.keys.delete"))
52 assert.True(t, strategy(scopes, "fosite.keys.get"))
53 assert.True(t, strategy(scopes, "fosite.keys.get"))
54 assert.True(t, strategy(scopes, "fosite.keys.update"))
55
56 scopes = []string{"hydra", "openid", "offline"}
57 assert.False(t, strategy(scopes, "foo.bar"))
58 assert.False(t, strategy(scopes, "foo"))
59 assert.True(t, strategy(scopes, "hydra"))
60 assert.True(t, strategy(scopes, "hydra.bar"))
61 assert.True(t, strategy(scopes, "openid"))
62 assert.True(t, strategy(scopes, "openid.baz.bar"))
63 assert.True(t, strategy(scopes, "offline"))
64 assert.True(t, strategy(scopes, "offline.baz.bar.baz"))
65 }
66
67 func TestWildcardScopeStrategy(t *testing.T) {
68 var strategy ScopeStrategy = WildcardScopeStrategy
69 var scopes = []string{}
70
71 assert.False(t, strategy(scopes, "foo.bar.baz"))
72 assert.False(t, strategy(scopes, "foo.bar"))
73
74 scopes = []string{"*"}
75 assert.False(t, strategy(scopes, ""))
76 assert.True(t, strategy(scopes, "asdf"))
77 assert.True(t, strategy(scopes, "asdf.asdf"))
78
79 scopes = []string{"foo"}
80 assert.False(t, strategy(scopes, "*"))
81 assert.False(t, strategy(scopes, "foo.*"))
82 assert.False(t, strategy(scopes, "fo*"))
83 assert.True(t, strategy(scopes, "foo"))
84
85 scopes = []string{"foo*"}
86 assert.False(t, strategy(scopes, "foo"))
87 assert.False(t, strategy(scopes, "fooa"))
88 assert.False(t, strategy(scopes, "fo"))
89 assert.True(t, strategy(scopes, "foo*"))
90
91 scopes = []string{"foo.*"}
92 assert.True(t, strategy(scopes, "foo.bar"))
93 assert.True(t, strategy(scopes, "foo.baz"))
94 assert.True(t, strategy(scopes, "foo.bar.baz"))
95 assert.False(t, strategy(scopes, "foo"))
96
97 scopes = []string{"foo.*.baz"}
98 assert.True(t, strategy(scopes, "foo.*.baz"))
99 assert.True(t, strategy(scopes, "foo.bar.baz"))
100 assert.False(t, strategy(scopes, "foo..baz"))
101 assert.False(t, strategy(scopes, "foo.baz"))
102 assert.False(t, strategy(scopes, "foo"))
103 assert.False(t, strategy(scopes, "foo.bar.bar"))
104
105 scopes = []string{"foo.*.bar.*"}
106 assert.True(t, strategy(scopes, "foo.baz.bar.baz"))
107 assert.False(t, strategy(scopes, "foo.baz.baz.bar.baz"))
108 assert.True(t, strategy(scopes, "foo.baz.bar.bar.bar"))
109 assert.False(t, strategy(scopes, "foo.baz.bar"))
110 assert.True(t, strategy(scopes, "foo.*.bar.*.*.*"))
111 assert.True(t, strategy(scopes, "foo.1.bar.1.2.3.4.5"))
112
113 scopes = []string{"foo.*.bar"}
114 assert.True(t, strategy(scopes, "foo.bar.bar"))
115 assert.False(t, strategy(scopes, "foo.bar.bar.bar"))
116 assert.False(t, strategy(scopes, "foo..bar"))
117 assert.False(t, strategy(scopes, "foo.bar..bar"))
118
119 scopes = []string{"foo.*.bar.*.baz.*"}
120 assert.False(t, strategy(scopes, "foo.*.*"))
121 assert.False(t, strategy(scopes, "foo.*.bar"))
122 assert.False(t, strategy(scopes, "foo.baz.*"))
123 assert.False(t, strategy(scopes, "foo.baz.bar"))
124 assert.False(t, strategy(scopes, "foo.b*.bar"))
125 assert.True(t, strategy(scopes, "foo.bar.bar.baz.baz.baz"))
126 assert.True(t, strategy(scopes, "foo.bar.bar.baz.baz.baz.baz"))
127 assert.False(t, strategy(scopes, "foo.bar.bar.baz.baz"))
128 assert.False(t, strategy(scopes, "foo.bar.baz.baz.baz.bar"))
129
130 scopes = strings.Fields("hydra.* openid offline hydra")
131 assert.True(t, strategy(scopes, "hydra.clients"))
132 assert.True(t, strategy(scopes, "hydra.clients.get"))
133 assert.True(t, strategy(scopes, "hydra"))
134 assert.True(t, strategy(scopes, "offline"))
135 assert.True(t, strategy(scopes, "openid"))
136 }
137
138 func TestExactScopeStrategy2ScopeStrategy(t *testing.T) {
139 var strategy ScopeStrategy = ExactScopeStrategy
140
141 scopes := []string{"foo.bar.baz", "foo.bar"}
142 assert.True(t, strategy(scopes, "foo.bar.baz"))
143 assert.True(t, strategy(scopes, "foo.bar"))
144
145 assert.False(t, strategy(scopes, "foo.bar.baz.baz"))
146 assert.False(t, strategy(scopes, "foo.bar.bar"))
147
148 assert.False(t, strategy(scopes, "foo.bar.baz1"))
149 assert.False(t, strategy(scopes, "foo.bar1"))
150
151 assert.False(t, strategy([]string{}, "foo"))
152 }
153
View as plain text