Skip to content

Commit 2d298d8

Browse files
bietkulsiddharthlatest
authored andcommitted
fix: permission test cases (#53)
1 parent f4493bd commit 2d298d8

2 files changed

Lines changed: 288 additions & 0 deletions

File tree

plugins/auth/e2e_test.go

Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
1+
package auth
2+
3+
import (
4+
"net/http"
5+
"testing"
6+
7+
"github.com/appbaseio/arc/model/category"
8+
"github.com/appbaseio/arc/model/op"
9+
"github.com/appbaseio/arc/model/permission"
10+
"github.com/appbaseio/arc/util"
11+
. "github.com/smartystreets/goconvey/convey"
12+
)
13+
14+
var adminCategories = []category.Category{
15+
category.Docs,
16+
category.Search,
17+
category.Indices,
18+
category.Cat,
19+
category.Clusters,
20+
category.Misc,
21+
category.User,
22+
category.Permission,
23+
category.Analytics,
24+
category.Streams,
25+
category.Rules,
26+
category.Templates,
27+
category.Suggestions,
28+
category.Auth,
29+
}
30+
31+
var adminOps = []op.Operation{
32+
op.Read,
33+
op.Write,
34+
op.Delete,
35+
}
36+
37+
var defaultAdminLimits = permission.Limits{
38+
IPLimit: 7200,
39+
DocsLimit: 30,
40+
SearchLimit: 30,
41+
IndicesLimit: 30,
42+
CatLimit: 30,
43+
ClustersLimit: 30,
44+
MiscLimit: 30,
45+
UserLimit: 30,
46+
PermissionLimit: 30,
47+
AnalyticsLimit: 30,
48+
RulesLimit: 30,
49+
TemplatesLimit: 30,
50+
SuggestionsLimit: 30,
51+
StreamsLimit: 30,
52+
AuthLimit: 30,
53+
}
54+
55+
var createPermissionResponse = map[string]interface{}{
56+
"owner": "foo",
57+
"creator": "foo",
58+
"role": "admin",
59+
"categories": adminCategories,
60+
"acls": category.ACLsFor(adminCategories...),
61+
"ops": adminOps,
62+
"indices": []string{"*"},
63+
"sources": []string{"0.0.0.0/0"},
64+
"referers": []string{"*"},
65+
"ttl": -1,
66+
"limits": &defaultAdminLimits,
67+
"description": "TEST PERMISSION WITH ROLE",
68+
"include_fields": nil,
69+
"exclude_fields": nil,
70+
}
71+
72+
var updatePermissionsRequest = map[string]interface{}{
73+
"description": "TEST PERMISSION UPDATED",
74+
"categories": []string{
75+
"docs",
76+
"search",
77+
"indices",
78+
"clusters",
79+
"misc",
80+
"user",
81+
"permission",
82+
"analytics",
83+
"streams",
84+
"rules",
85+
},
86+
"acls": []string{
87+
"reindex",
88+
"termvectors",
89+
"update",
90+
"create",
91+
"mtermvectors",
92+
"bulk",
93+
"delete",
94+
"source",
95+
"delete_by_query",
96+
"get",
97+
"mget",
98+
"update_by_query",
99+
"index",
100+
"exists",
101+
"field_caps",
102+
"msearch",
103+
"validate",
104+
"rank_eval",
105+
"render",
106+
"search_shards",
107+
"search",
108+
"count",
109+
"explain",
110+
"upgrade",
111+
"settings",
112+
"indices",
113+
"split",
114+
"aliases",
115+
"stats",
116+
"template",
117+
"open",
118+
"mapping",
119+
"recovery",
120+
"analyze",
121+
"cache",
122+
"forcemerge",
123+
"alias",
124+
"refresh",
125+
"segments",
126+
"close",
127+
"flush",
128+
"shrink",
129+
"shard_stores",
130+
"rollover",
131+
"remote",
132+
"cat",
133+
"nodes",
134+
"tasks",
135+
"cluster",
136+
"scripts",
137+
"ingest",
138+
"snapshot",
139+
},
140+
"ops": []string{
141+
"write",
142+
},
143+
"ttl": 3600,
144+
"limits": map[string]interface{}{
145+
"ip_limit": 7200,
146+
"docs_limit": 5,
147+
"search_limit": 2,
148+
"indices_limit": 10,
149+
"cat_limit": 0,
150+
"clusters_limit": 10,
151+
"misc_limit": 10,
152+
"user_limit": 10,
153+
"permission_limit": 10,
154+
"analytics_limit": 10,
155+
"rules_limit": 10,
156+
"templates_limit": 0,
157+
"suggestions_limit": 0,
158+
"streams_limit": 10,
159+
},
160+
}
161+
162+
var roleName = "admin"
163+
164+
var savePublicKeyRequest = map[string]interface{}{
165+
"public_key": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFuenlpczFaamZOQjBiQmdLRk1Tdgp2a1R0d2x2QnNhSnE3UzV3QStremVWT1ZwVld3a1dkVmhhNHMzOFhNL3BhL3lyNDdhdjcrejNWVG12RFJ5QUhjCmFUOTJ3aFJFRnBMdjljajVsVGVKU2lieXIvTXJtL1l0akNaVldnYU9ZSWh3clh3S0xxUHIvMTFpbldzQWtmSXkKdHZIV1R4WllFY1hMZ0FYRnVVdWFTM3VGOWdFaU5Rd3pHVFUxdjBGcWtxVEJyNEI4blczSENONDdYVXUwdDhZMAplK2xmNHM0T3hRYXdXRDc5SjkvNWQzUnkwdmJWM0FtMUZ0R0ppSnZPd1JzSWZWQ2hEcFlTdFRjSFRDTXF0dldiClY2TDExQldrcHpHWFNXNEh2NDNxYStHU1lPRDJRVTY4TWI1OW9TazJPQitCdE9McEpvZm1iR0VHZ3Ztd3lDSTkKTXdJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t",
166+
"role_key": roleName,
167+
}
168+
169+
var savePublicKeyResponse = map[string]interface{}{
170+
"message": "Public key saved successfully.",
171+
}
172+
173+
func TestRBAC(t *testing.T) {
174+
var username string
175+
var password string
176+
var createdAt string
177+
Convey("Testing RBAC", t, func() {
178+
Convey("Save the public key", func() {
179+
response, err := util.MakeHttpRequest(http.MethodPut, "/_public_key", savePublicKeyRequest)
180+
181+
if err != nil {
182+
t.Fatalf("savePublicKeyTest Failed %v instead\n", err)
183+
}
184+
185+
So(response, ShouldResemble, savePublicKeyResponse)
186+
})
187+
188+
Convey("Get the public key", func() {
189+
response, err := util.MakeHttpRequest(http.MethodGet, "/_public_key", nil)
190+
191+
if err != nil {
192+
t.Fatalf("getPublicKeyTest Failed %v instead\n", err)
193+
}
194+
195+
So(response, ShouldResemble, savePublicKeyRequest)
196+
})
197+
198+
Convey("Create permission with role", func() {
199+
requestBody := permission.Permission{
200+
Description: "TEST PERMISSION WITH ROLE",
201+
}
202+
response, err := util.MakeHttpRequest(http.MethodPost, "/_role/"+roleName, requestBody)
203+
204+
parsedResponse, _ := response.(map[string]interface{})
205+
206+
if err != nil {
207+
t.Fatalf("createPermissionWithRoleTest Failed %v instead\n", err)
208+
}
209+
username, _ = parsedResponse["username"].(string)
210+
password, _ = parsedResponse["password"].(string)
211+
createdAt, _ = parsedResponse["created_at"].(string)
212+
213+
delete(parsedResponse, "username")
214+
delete(parsedResponse, "password")
215+
delete(parsedResponse, "created_at")
216+
217+
mockMap := util.StructToMap(createPermissionResponse)
218+
219+
So(parsedResponse, ShouldResemble, mockMap)
220+
})
221+
222+
Convey("Get permission with role", func() {
223+
response, err := util.MakeHttpRequest(http.MethodGet, "/_role/"+roleName, nil)
224+
225+
if err != nil {
226+
t.Fatalf("getPermissionWithRoleTest Failed %v instead\n", err)
227+
}
228+
var getPermissionResponse = createPermissionResponse
229+
getPermissionResponse["username"] = username
230+
getPermissionResponse["password"] = password
231+
getPermissionResponse["created_at"] = createdAt
232+
mockMap := util.StructToMap(getPermissionResponse)
233+
234+
So(response, ShouldResemble, mockMap)
235+
})
236+
237+
Convey("Update permission with role", func() {
238+
response, err := util.MakeHttpRequest(http.MethodPatch, "/_role/"+roleName, updatePermissionsRequest)
239+
240+
if err != nil {
241+
t.Fatalf("updatePermissionWithRoleTest Failed %v instead\n", err)
242+
}
243+
244+
parsedResponse, _ := response.(map[string]interface{})
245+
246+
delete(parsedResponse, "_seq_no")
247+
248+
var updatePermissionResponse = map[string]interface{}{
249+
"_index": ".permissions",
250+
"_type": "_doc",
251+
"_id": username,
252+
"_version": 2,
253+
"result": "updated",
254+
"_shards": map[string]interface{}{
255+
"total": 1,
256+
"successful": 1,
257+
"failed": 0,
258+
},
259+
"_primary_term": 1,
260+
}
261+
262+
mockMap := util.StructToMap(updatePermissionResponse)
263+
264+
So(parsedResponse, ShouldResemble, mockMap)
265+
})
266+
267+
Convey("Delete permission with role", func() {
268+
response, err := util.MakeHttpRequest(http.MethodDelete, "/_role/"+roleName, nil)
269+
270+
if err != nil {
271+
t.Fatalf("deletePermissionWithRoleTest Failed %v instead\n", err)
272+
}
273+
274+
var deletePermissionResponse = map[string]interface{}{
275+
"code": 200,
276+
"message": "permission with \"username\"=\"" + username + "\" deleted",
277+
"status": "OK",
278+
}
279+
280+
mockMap := util.StructToMap(deletePermissionResponse)
281+
parsedResponse, _ := response.(map[string]interface{})
282+
delete(parsedResponse, "_seq_no")
283+
284+
So(parsedResponse, ShouldResemble, mockMap)
285+
})
286+
})
287+
}

plugins/permissions/e2e_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ var adminCategories = []category.Category{
2626
category.Rules,
2727
category.Templates,
2828
category.Suggestions,
29+
category.Auth,
2930
}
3031

3132
var adminOps = []op.Operation{

0 commit comments

Comments
 (0)