1 package org.iotivity.cloud.accountserver.resources.acl.group;
3 import static org.junit.Assert.assertNull;
4 import static org.junit.Assert.assertTrue;
6 import java.util.ArrayList;
7 import java.util.Arrays;
8 import java.util.HashMap;
11 import org.iotivity.cloud.accountserver.Constants;
12 import org.iotivity.cloud.accountserver.db.AccountDBManager;
13 import org.iotivity.cloud.accountserver.db.GroupTable;
14 import org.iotivity.cloud.accountserver.db.MongoDB;
15 import org.iotivity.cloud.accountserver.resources.acl.id.AclResource;
16 import org.iotivity.cloud.accountserver.util.TypeCastingManager;
17 import org.iotivity.cloud.util.Log;
18 import org.junit.After;
19 import org.junit.Before;
20 import org.junit.Test;
22 public class GroupAclManagerTest {
23 private String mGid1 = "g1";
24 private String mGid2 = "g2";
25 private String mDi1 = "d1";
26 private String mDi2 = "d2";
27 private String mUid1 = "u1";
28 private String mUid2 = "u2";
29 private String mUid3 = "u3";
31 private HashMap<String, Object> mResourceLight1ofD1 = new HashMap<>();
32 private HashMap<String, Object> mResourceLight2ofD1 = new HashMap<>();
33 private HashMap<String, Object> mResourceLight1ofD2 = new HashMap<>();
34 private HashMap<String, Object> mResourceLight2ofD2 = new HashMap<>();
35 private HashMap<String, Object> mResourceAll = new HashMap<>();
36 private int mPermission = 15;
38 public GroupAclManager mGroupAclManager = GroupAclManager
42 public void setUp() throws Exception {
43 AclResource.getInstance().createAcl(mUid1, mDi1);
44 AclResource.getInstance().createAcl(mUid2, mDi2);
46 mResourceLight1ofD1.put(Constants.KEYFIELD_ACE_RESOURCE_HREF,
48 mResourceLight1ofD1.put(Constants.KEYFIELD_ACE_RESOURCE_RT,
49 Arrays.asList("core.light"));
50 mResourceLight1ofD1.put(Constants.KEYFIELD_ACE_RESOURCE_IF,
51 Arrays.asList("oic.if.baseline"));
53 mResourceLight2ofD1.put(Constants.KEYFIELD_ACE_RESOURCE_HREF,
55 mResourceLight2ofD1.put(Constants.KEYFIELD_ACE_RESOURCE_RT,
56 Arrays.asList("core.light"));
57 mResourceLight2ofD1.put(Constants.KEYFIELD_ACE_RESOURCE_IF,
58 Arrays.asList("oic.if.baseline"));
60 mResourceLight1ofD2.put(Constants.KEYFIELD_ACE_RESOURCE_HREF,
62 mResourceLight1ofD2.put(Constants.KEYFIELD_ACE_RESOURCE_RT,
63 Arrays.asList("core.light"));
64 mResourceLight1ofD2.put(Constants.KEYFIELD_ACE_RESOURCE_IF,
65 Arrays.asList("oic.if.baseline"));
67 mResourceLight2ofD2.put(Constants.KEYFIELD_ACE_RESOURCE_HREF,
69 mResourceLight2ofD2.put(Constants.KEYFIELD_ACE_RESOURCE_RT,
70 Arrays.asList("core.light"));
71 mResourceLight2ofD2.put(Constants.KEYFIELD_ACE_RESOURCE_IF,
72 Arrays.asList("oic.if.baseline"));
74 mResourceAll.put(Constants.KEYFIELD_ACE_RESOURCE_HREF, "*");
75 mResourceAll.put(Constants.KEYFIELD_ACE_RESOURCE_RT, Arrays.asList(""));
76 mResourceAll.put(Constants.KEYFIELD_ACE_RESOURCE_IF, Arrays.asList(""));
80 public void resetAccountDatabase() throws Exception {
81 AclResource.getInstance().deleteAcl((String) AclResource.getInstance()
82 .getAclid(mDi1).get(Constants.KEYFIELD_ACLID));
83 AclResource.getInstance().deleteAcl((String) AclResource.getInstance()
84 .getAclid(mDi2).get(Constants.KEYFIELD_ACLID));
86 MongoDB mongoDB = new MongoDB(Constants.DB_NAME);
87 mongoDB.deleteTable(Constants.GROUP_TABLE);
88 mongoDB.createTable(Constants.GROUP_TABLE);
89 mongoDB.deleteTable(Constants.ACL_TABLE);
90 mongoDB.createTable(Constants.ACL_TABLE);
91 mongoDB.deleteTable(Constants.ACE_TABLE);
92 mongoDB.createTable(Constants.ACE_TABLE);
96 public void testAddAceByResourcesOnlyOwner() {
97 Log.v("--------------testAddAceByResourcesOnlyOwner------------");
99 // initialize group info --
100 ArrayList<String> members = new ArrayList<>();
103 HashMap<String, Object> groupInfo = new HashMap<>();
104 groupInfo.put(Constants.KEYFIELD_GROUP_MEMBERS, members);
105 setGroupInfo(mGid1, groupInfo);
107 ArrayList<HashMap<String, Object>> resources = new ArrayList<>();
108 resources.add(mResourceLight1ofD1);
109 resources.add(mResourceLight2ofD1);
111 mGroupAclManager.addAceByResources(mGid1, mPermission, resources);
113 // check ACE not updated for d1-u1(device owner)
114 HashMap<String, Object> aceidCondition = new HashMap<>();
115 aceidCondition.put(Constants.REQ_GROUP_ID, mGid1);
116 aceidCondition.put(Constants.KEYFIELD_DI, mDi1);
117 aceidCondition.put(Constants.KEYFIELD_UID, mUid1);
118 assertNull(getAceId(aceidCondition));
122 public void testAddAceByResources() {
123 Log.v("--------------testAddAceByResoruces------------");
125 // initialize group info --
126 ArrayList<String> members = new ArrayList<>();
130 HashMap<String, Object> groupInfo = new HashMap<>();
131 groupInfo.put(Constants.KEYFIELD_GROUP_MEMBERS, members);
132 setGroupInfo(mGid1, groupInfo);
133 // -- initialize group info
135 ArrayList<HashMap<String, Object>> resources = new ArrayList<>();
136 resources.add(mResourceLight1ofD1);
137 resources.add(mResourceLight2ofD1);
139 mGroupAclManager.addAceByResources(mGid1, mPermission, resources);
141 // check ACE not updated for d1-u1(device owner)
142 HashMap<String, Object> aceidCondition1 = new HashMap<>();
143 aceidCondition1.put(Constants.REQ_GROUP_ID, mGid1);
144 aceidCondition1.put(Constants.KEYFIELD_DI, mDi1);
145 aceidCondition1.put(Constants.KEYFIELD_UID, mUid1);
146 assertNull(getAceId(aceidCondition1));
148 // check ACETable and ACL for d1(light1, light2)-u2
149 HashMap<String, Object> aceidCondition2 = new HashMap<>();
150 aceidCondition2.put(Constants.REQ_GROUP_ID, mGid1);
151 aceidCondition2.put(Constants.KEYFIELD_DI, mDi1);
152 aceidCondition2.put(Constants.KEYFIELD_UID, mUid2);
153 String aceIdg1d1 = getAceId(aceidCondition2);
155 HashMap<String, Object> aceCondition2 = new HashMap<>();
156 aceCondition2.put(Constants.KEYFIELD_ACE_ID, aceIdg1d1);
158 aceidCondition2.clear();
159 aceidCondition2.put(Constants.KEYFIELD_OID, mUid1);
160 assertTrue(checkAceTable(aceCondition2, aceidCondition2));
162 // remove prefix in href
163 for (HashMap<String, Object> resource : resources) {
164 resource.put(Constants.KEYFIELD_ACE_RESOURCE_HREF,
166 resource.get(Constants.KEYFIELD_ACE_RESOURCE_HREF)
170 assertTrue(checkAclTable(mDi1, aceIdg1d1, mUid2, resources));
174 public void testAddAceByResourcesNoMembers() {
175 Log.v("--------------testAddAceByResorucesNoMembers------------");
176 setGroupInfo(mGid1, new HashMap<>());
178 ArrayList<HashMap<String, Object>> resources = new ArrayList<>();
179 resources.add(mResourceLight1ofD1);
180 resources.add(mResourceLight2ofD1);
182 mGroupAclManager.addAceByResources(mGid1, mPermission, resources);
184 // check ACE not updated for d1(light1, light2)
185 HashMap<String, Object> aceidCondition = new HashMap<>();
186 aceidCondition.put(Constants.REQ_GROUP_ID, mGid1);
187 aceidCondition.put(Constants.KEYFIELD_DI, mDi1);
188 assertNull(getAceId(aceidCondition));
192 public void testAddAceByDevices() {
193 Log.v("--------------testAddAceByDevices------------");
195 // initialize group info --
196 ArrayList<String> members = new ArrayList<>();
200 HashMap<String, Object> groupInfo = new HashMap<>();
201 groupInfo.put(Constants.KEYFIELD_GROUP_MEMBERS, members);
202 setGroupInfo(mGid1, groupInfo);
203 // -- initialize group info
205 ArrayList<String> devices = new ArrayList<>();
208 mGroupAclManager.addAceByDevices(mGid1, mPermission, devices);
210 // check ACETable and ACL for d1-u2
211 HashMap<String, Object> aceidCondition = new HashMap<>();
212 aceidCondition.put(Constants.REQ_GROUP_ID, mGid1);
213 aceidCondition.put(Constants.KEYFIELD_DI, mDi1);
214 aceidCondition.put(Constants.KEYFIELD_UID, mUid2);
215 String aceIdg1d1 = getAceId(aceidCondition);
217 HashMap<String, Object> aceCondition = new HashMap<>();
218 aceCondition.put(Constants.KEYFIELD_ACE_ID, aceIdg1d1);
220 aceidCondition.clear();
221 aceidCondition.put(Constants.KEYFIELD_OID, mUid1);
222 assertTrue(checkAceTable(aceCondition, aceidCondition));
224 assertTrue(checkAclTable(mDi1, aceIdg1d1, mUid2,
225 Arrays.asList(mResourceAll)));
229 public void testAddAceByDevicesOnlyOwner() {
230 Log.v("--------------testAddAceByDevicesOnlyOwner------------");
232 // initialize group info --
233 ArrayList<String> members = new ArrayList<>();
236 HashMap<String, Object> groupInfo = new HashMap<>();
237 groupInfo.put(Constants.KEYFIELD_GROUP_MEMBERS, members);
238 setGroupInfo(mGid1, groupInfo);
239 // -- initialize group info
241 ArrayList<String> devices = new ArrayList<>();
244 mGroupAclManager.addAceByDevices(mGid1, mPermission, devices);
246 // check ACE not updated for d1-u1(device owner)
247 HashMap<String, Object> aceidCondition = new HashMap<>();
248 aceidCondition.put(Constants.REQ_GROUP_ID, mGid1);
249 aceidCondition.put(Constants.KEYFIELD_DI, mDi1);
250 aceidCondition.put(Constants.KEYFIELD_UID, mUid1);
251 assertNull(getAceId(aceidCondition));
255 public void testAddAceByDevicesNoMembers() {
256 Log.v("--------------testAddAceByDevicesNoMembers------------");
257 setGroupInfo(mGid1, new HashMap<>());
259 ArrayList<String> devices = new ArrayList<>();
262 mGroupAclManager.addAceByDevices(mGid1, mPermission, devices);
264 // check ACE not updated for d1
265 HashMap<String, Object> aceidCondition = new HashMap<>();
266 aceidCondition.put(Constants.REQ_GROUP_ID, mGid1);
267 aceidCondition.put(Constants.KEYFIELD_DI, mDi1);
268 assertNull(getAceId(aceidCondition));
272 public void testAddAceByMembersWithDevice() {
273 Log.v("--------------testAddAceByMembersWithDevice------------");
275 // initialize group info --
276 ArrayList<String> devices = new ArrayList<>();
280 HashMap<String, Object> groupInfo = new HashMap<>();
281 groupInfo.put(Constants.KEYFIELD_GROUP_DEVICES, devices);
282 setGroupInfo(mGid1, groupInfo);
283 // -- initialize group info
285 ArrayList<String> members = new ArrayList<>();
288 mGroupAclManager.addAceByMembers(mGid1, mPermission, members);
290 // check ACETable and ACL for d1-u2
291 HashMap<String, Object> aceidCondition1 = new HashMap<>();
292 aceidCondition1.put(Constants.REQ_GROUP_ID, mGid1);
293 aceidCondition1.put(Constants.KEYFIELD_DI, mDi1);
294 aceidCondition1.put(Constants.KEYFIELD_UID, mUid2);
295 String aceIdg1d1 = getAceId(aceidCondition1);
297 HashMap<String, Object> aceCondition = new HashMap<>();
298 aceCondition.put(Constants.KEYFIELD_ACE_ID, aceIdg1d1);
300 aceidCondition1.clear();
301 aceidCondition1.put(Constants.KEYFIELD_OID, mUid1);
302 assertTrue(checkAceTable(aceCondition, aceidCondition1));
304 assertTrue(checkAclTable(mDi1, aceIdg1d1, mUid2,
305 Arrays.asList(mResourceAll)));
307 // check ACE not updated for d2-u2(device owner)
308 HashMap<String, Object> aceidCondition2 = new HashMap<>();
309 aceidCondition2.put(Constants.REQ_GROUP_ID, mGid1);
310 aceidCondition2.put(Constants.KEYFIELD_DI, mDi2);
311 aceidCondition2.put(Constants.KEYFIELD_UID, mUid2);
312 assertNull(getAceId(aceidCondition2));
316 public void testAddAceByMembersWithDeviceAndResource() {
317 Log.v("--------------testAddAceByMembersWithDeviceAndResource------------");
319 // initialize group info --
320 ArrayList<String> devices = new ArrayList<>();
324 ArrayList<HashMap<String, Object>> resources = new ArrayList<>();
325 resources.add(mResourceLight1ofD1);
327 HashMap<String, Object> groupInfo = new HashMap<>();
328 groupInfo.put(Constants.KEYFIELD_GROUP_DEVICES, devices);
329 groupInfo.put(Constants.KEYFIELD_GROUP_RESOURCES, resources);
330 setGroupInfo(mGid1, groupInfo);
331 // -- initialize group info
333 ArrayList<String> members = new ArrayList<>();
337 mGroupAclManager.addAceByMembers(mGid1, mPermission, members);
339 // remove prefix in href
340 ArrayList<HashMap<String, Object>> resourcesWithExtractedHref = new ArrayList<>(
342 for (HashMap<String, Object> resource : resourcesWithExtractedHref) {
343 resource.put(Constants.KEYFIELD_ACE_RESOURCE_HREF,
345 resource.get(Constants.KEYFIELD_ACE_RESOURCE_HREF)
350 // check ACETable and ACL for d1-u2
351 HashMap<String, Object> aceidCondition1 = new HashMap<>();
352 aceidCondition1.put(Constants.REQ_GROUP_ID, mGid1);
353 aceidCondition1.put(Constants.KEYFIELD_DI, mDi1);
354 aceidCondition1.put(Constants.KEYFIELD_UID, mUid2);
355 String aceIdg1d1 = getAceId(aceidCondition1);
357 HashMap<String, Object> aceCondition1 = new HashMap<>();
358 aceCondition1.put(Constants.KEYFIELD_ACE_ID, aceIdg1d1);
360 aceidCondition1.clear();
361 aceidCondition1.put(Constants.KEYFIELD_OID, mUid1);
362 assertTrue(checkAceTable(aceCondition1, aceidCondition1));
363 assertTrue(checkAclTable(mDi1, aceIdg1d1, mUid2,
364 resourcesWithExtractedHref));
366 // check ACETable and ACL for d1-u3
367 aceidCondition1.put(Constants.REQ_GROUP_ID, mGid1);
368 aceidCondition1.put(Constants.KEYFIELD_DI, mDi1);
369 aceidCondition1.put(Constants.KEYFIELD_UID, mUid3);
370 aceIdg1d1 = getAceId(aceidCondition1);
372 aceCondition1.put(Constants.KEYFIELD_ACE_ID, aceIdg1d1);
374 aceidCondition1.clear();
375 aceidCondition1.put(Constants.KEYFIELD_OID, mUid1);
376 assertTrue(checkAceTable(aceCondition1, aceidCondition1));
377 assertTrue(checkAclTable(mDi1, aceIdg1d1, mUid3,
378 resourcesWithExtractedHref));
380 /* d2(all resources) */
381 // check ACE not updated for d2-u2(device owner)
382 HashMap<String, Object> aceidCondition2 = new HashMap<>();
383 aceidCondition2.put(Constants.REQ_GROUP_ID, mGid1);
384 aceidCondition2.put(Constants.KEYFIELD_DI, mDi2);
385 aceidCondition2.put(Constants.KEYFIELD_UID, mUid2);
386 assertNull(getAceId(aceidCondition2));
388 // check ACETable and ACL for d2-u3
389 aceidCondition2.put(Constants.KEYFIELD_UID, mUid3);
390 String aceIdg1d2 = getAceId(aceidCondition2);
392 HashMap<String, Object> aceCondition2 = new HashMap<>();
393 aceCondition2.put(Constants.KEYFIELD_ACE_ID, aceIdg1d2);
395 aceidCondition2.clear();
396 aceidCondition2.put(Constants.KEYFIELD_OID, mUid2);
397 assertTrue(checkAceTable(aceidCondition2, aceidCondition2));
398 assertTrue(checkAclTable(mDi2, aceIdg1d2, mUid3,
399 Arrays.asList(mResourceAll)));
403 public void testAddAceByMembersNoDevice() {
404 Log.v("--------------testAddAceByMembersNoDevice------------");
405 setGroupInfo(mGid1, new HashMap<>());
407 ArrayList<String> members = new ArrayList<>();
410 mGroupAclManager.addAceByMembers(mGid1, mPermission, members);
412 // check ACE not updated
413 HashMap<String, Object> aceidCondition = new HashMap<>();
414 aceidCondition.put(Constants.REQ_GROUP_ID, mGid1);
415 aceidCondition.put(Constants.KEYFIELD_UID, mUid2);
416 assertNull(getAceId(aceidCondition));
420 public void testAddAceByMembersOwnerDevice() {
421 Log.v("--------------testAddAceByMembersOwnerDevice------------");
423 // initialize group info --
424 ArrayList<String> devices = new ArrayList<>();
427 HashMap<String, Object> groupInfo = new HashMap<>();
428 groupInfo.put(Constants.KEYFIELD_GROUP_DEVICES, devices);
429 setGroupInfo(mGid1, groupInfo);
430 // -- initialize group info
432 ArrayList<String> members = new ArrayList<>();
435 mGroupAclManager.addAceByMembers(mGid1, mPermission, members);
437 // check ACE not updated for d2-u2(device owner)
438 HashMap<String, Object> aceidCondition = new HashMap<>();
439 aceidCondition.put(Constants.REQ_GROUP_ID, mGid1);
440 aceidCondition.put(Constants.REQ_GROUP_ID, mDi2);
441 aceidCondition.put(Constants.KEYFIELD_UID, mUid2);
442 assertNull(getAceId(aceidCondition));
446 public void testRemoveAceByGroup() {
447 Log.v("--------------testRemoveAceByGroup------------");
449 // initialize group info --
450 ArrayList<String> members = new ArrayList<>();
454 HashMap<String, Object> groupInfo = new HashMap<>();
455 groupInfo.put(Constants.KEYFIELD_GROUP_MEMBERS, members);
456 setGroupInfo(mGid1, groupInfo);
457 setGroupInfo(mGid2, groupInfo);
458 // -- initialize group info
460 ArrayList<String> devices = new ArrayList<>();
464 mGroupAclManager.addAceByDevices(mGid2, mPermission, devices);
466 mGroupAclManager.addAceByDevices(mGid1, mPermission - 11, devices);
468 mGroupAclManager.removeAceByGroup(mGid1);
470 String aceIdg1d1, aceIdg2d1 = null;
472 HashMap<String, Object> aceidCondition1 = new HashMap<>();
473 aceidCondition1.put(Constants.REQ_GROUP_ID, mGid1);
475 // verify AceId is Null Cases Group1
476 assertNull(getAceId(aceidCondition1));
478 // verify ACE Device1 in Group2
479 HashMap<String, Object> aceCondition2 = new HashMap<>();
480 HashMap<String, Object> aceidCondition2 = new HashMap<>();
481 aceidCondition2.put(Constants.REQ_GROUP_ID, mGid2);
482 aceidCondition2.put(Constants.KEYFIELD_DI, mDi1);
483 aceidCondition2.put(Constants.KEYFIELD_UID, mUid2);
485 aceCondition2.put(Constants.KEYFIELD_ACE_ID,
486 aceIdg1d1 = getAceId(aceidCondition2));
487 aceidCondition2.clear();
488 aceidCondition2.put(Constants.KEYFIELD_OID, mUid1);
490 // verify AceId is Null Cases Group2
491 assertTrue(checkAceTable(aceCondition2, aceidCondition2));
492 // verify ACL Device1 Group2
493 checkAclTable(mDi1, aceIdg1d1, mUid2, Arrays.asList(mResourceAll));
495 // verify ACE Device1 in Group2
496 HashMap<String, Object> aceCondition3 = new HashMap<>();
497 HashMap<String, Object> aceidCondition3 = new HashMap<>();
498 aceidCondition3.put(Constants.REQ_GROUP_ID, mGid2);
499 aceidCondition3.put(Constants.KEYFIELD_DI, mDi2);
500 aceidCondition3.put(Constants.KEYFIELD_UID, mUid1);
502 aceCondition3.put(Constants.KEYFIELD_ACE_ID,
503 aceIdg2d1 = getAceId(aceidCondition3));
504 aceidCondition3.clear();
505 aceidCondition3.put(Constants.KEYFIELD_OID, mUid2);
507 // verify AceId is true Cases Group2
508 assertTrue(checkAceTable(aceCondition3, aceidCondition3));
509 // verify ACL Device2 Group2
510 assertTrue(checkAclTable(mDi2, aceIdg2d1, mUid1,
511 Arrays.asList(mResourceAll)));
515 public void testRemoveAceByMembers() {
516 Log.v("--------------testRemoveAceByMembers------------");
518 // initialize group info --
519 ArrayList<String> devices = new ArrayList<>();
522 ArrayList<HashMap<String, Object>> resources = new ArrayList<>();
523 resources.add(mResourceLight1ofD2);
525 HashMap<String, Object> groupInfo = new HashMap<>();
526 groupInfo.put(Constants.KEYFIELD_GROUP_DEVICES, devices);
527 groupInfo.put(Constants.KEYFIELD_GROUP_RESOURCES, resources);
528 setGroupInfo(mGid1, groupInfo);
529 // -- initialize group info
531 ArrayList<String> members = new ArrayList<>();
536 mGroupAclManager.addAceByMembers(mGid1, mPermission, members);
538 members.remove(mUid2);
539 members.remove(mUid3);
540 mGroupAclManager.removeAceByMembers(members, mGid1);
542 String aceIdg1d1 = null;
544 HashMap<String, Object> aceidCondition1 = new HashMap<>();
545 aceidCondition1.put(Constants.KEYFIELD_OID, mUid1);
547 // verify AceId is Null Cases User1
548 assertNull(getAceId(aceidCondition1));
551 HashMap<String, Object> aceCondition2 = new HashMap<>();
552 HashMap<String, Object> aceidCondition2 = new HashMap<>();
553 aceidCondition2.put(Constants.KEYFIELD_UID, mUid3);
554 aceidCondition2.put(Constants.KEYFIELD_DI, mDi2);
556 aceCondition2.put(Constants.KEYFIELD_ACE_ID,
557 aceIdg1d1 = getAceId(aceidCondition2));
558 aceidCondition2.clear();
559 aceidCondition2.put(Constants.KEYFIELD_OID, mUid2);
561 // remove prefix in href
562 for (HashMap<String, Object> resource : resources) {
563 resource.put(Constants.KEYFIELD_ACE_RESOURCE_HREF,
565 resource.get(Constants.KEYFIELD_ACE_RESOURCE_HREF)
569 assertTrue(checkAceTable(aceCondition2, aceidCondition2));
570 // verify ACL Device1 Group2
571 assertTrue(checkAclTable(mDi2, aceIdg1d1, mUid3, resources));
575 public void testRemoveAceByDevices() {
576 Log.v("--------------testRemoveAceByDevices------------");
578 // initialize group info --
579 ArrayList<String> devices = new ArrayList<>();
583 ArrayList<HashMap<String, Object>> resources = new ArrayList<>();
584 resources.add(mResourceLight1ofD2);
586 HashMap<String, Object> groupInfo = new HashMap<>();
587 groupInfo.put(Constants.KEYFIELD_GROUP_DEVICES, devices);
588 groupInfo.put(Constants.KEYFIELD_GROUP_RESOURCES, resources);
589 setGroupInfo(mGid1, groupInfo);
590 // -- initialize group info
592 ArrayList<String> members = new ArrayList<>();
597 mGroupAclManager.addAceByMembers(mGid1, mPermission, members);
599 devices.remove(mDi2);
600 mGroupAclManager.removeAceByDevices(devices, mGid1);
602 String aceIdu1d2 = null, aceIdu3d2 = null;
603 // verify ACE Device1
604 HashMap<String, Object> aceidCondition1 = new HashMap<>();
605 aceidCondition1.put(Constants.KEYFIELD_DI, mDi1);
607 // verify AceId is Null Cases User1
608 assertNull(getAceId(aceidCondition1));
610 // verify ACE ownerid=User2, subjectuuid=User1
611 HashMap<String, Object> aceCondition2 = new HashMap<>();
612 HashMap<String, Object> aceidCondition2 = new HashMap<>();
613 aceidCondition2.put(Constants.KEYFIELD_UID, mUid1);
614 aceidCondition2.put(Constants.KEYFIELD_DI, mDi2);
616 aceCondition2.put(Constants.KEYFIELD_ACE_ID,
617 aceIdu1d2 = getAceId(aceidCondition2));
618 aceidCondition2.clear();
619 aceidCondition2.put(Constants.KEYFIELD_OID, mUid2);
621 // verify ACE ownerid=User2, subjectuuid=User3
622 HashMap<String, Object> aceCondition3 = new HashMap<>();
623 HashMap<String, Object> aceidCondition3 = new HashMap<>();
624 aceidCondition3.put(Constants.KEYFIELD_UID, mUid3);
625 aceidCondition3.put(Constants.KEYFIELD_DI, mDi2);
627 aceCondition3.put(Constants.KEYFIELD_ACE_ID,
628 aceIdu3d2 = getAceId(aceidCondition3));
629 aceidCondition3.clear();
630 aceidCondition3.put(Constants.KEYFIELD_OID, mUid2);
632 // remove prefix in href
633 for (HashMap<String, Object> resource : resources) {
634 resource.put(Constants.KEYFIELD_ACE_RESOURCE_HREF,
636 resource.get(Constants.KEYFIELD_ACE_RESOURCE_HREF)
640 // verify AceId ownerid=User2, subjectuuid=User1 True
641 assertTrue(checkAceTable(aceCondition2, aceidCondition2));
642 // verify ACL Device2 User1
643 assertTrue(checkAclTable(mDi2, aceIdu1d2, mUid1,
644 Arrays.asList(mResourceLight1ofD2)));
646 // verify AceId ownerid=User2, subjectuuid=User3 True
647 assertTrue(checkAceTable(aceCondition3, aceidCondition3));
648 // verify ACL Device2 User1
649 assertTrue(checkAclTable(mDi2, aceIdu3d2, mUid3,
650 Arrays.asList(mResourceLight1ofD2)));
655 public void testRemoveAceByResourcesDeleteAce() {
656 Log.v("--------------testRemoveAceByResourcesDeleteAce------------");
658 // initialize group info --
659 ArrayList<String> devices = new ArrayList<>();
662 ArrayList<String> members = new ArrayList<>();
666 ArrayList<HashMap<String, Object>> resources = new ArrayList<>();
667 resources.add(mResourceLight1ofD2);
669 HashMap<String, Object> groupInfo = new HashMap<>();
670 groupInfo.put(Constants.KEYFIELD_GROUP_DEVICES, devices);
671 groupInfo.put(Constants.KEYFIELD_GROUP_RESOURCES, resources);
672 setGroupInfo(mGid1, groupInfo);
673 // -- initialize group info
675 mGroupAclManager.addAceByMembers(mGid1, mPermission, members);
677 mGroupAclManager.removeAceByResources(
678 new ArrayList<>(Arrays.asList(mResourceLight1ofD2)), mGid1);
680 // verify ACE Device2
681 HashMap<String, Object> aceidCondition1 = new HashMap<>();
682 aceidCondition1.put(Constants.KEYFIELD_DI, mDi2);
684 // verify AceId is Null Cases User1
685 assertNull(getAceId(aceidCondition1));
687 String aceIdu1d2 = null;
688 // verify ACE ownerid=u1, subjectuuid=u2 Deivce=d1
689 HashMap<String, Object> aceCondition2 = new HashMap<>();
690 HashMap<String, Object> aceidCondition2 = new HashMap<>();
691 aceidCondition2.put(Constants.KEYFIELD_UID, mUid2);
692 aceidCondition2.put(Constants.KEYFIELD_DI, mDi1);
694 aceCondition2.put(Constants.KEYFIELD_ACE_ID,
695 aceIdu1d2 = getAceId(aceidCondition2));
696 aceidCondition2.clear();
697 aceidCondition2.put(Constants.KEYFIELD_OID, mUid1);
699 // verify AceId ownerid=u1, subjectuuid=u2 True
700 assertTrue(checkAceTable(aceCondition2, aceidCondition2));
701 // verify ACL Device2 User1
702 assertTrue(checkAclTable(mDi1, aceIdu1d2, mUid2,
703 Arrays.asList(mResourceAll)));
707 public void testRemoveAceByResourcesRemainAce() {
709 // initialize group info --
710 ArrayList<String> devices = new ArrayList<>();
713 ArrayList<String> members = new ArrayList<>();
717 ArrayList<HashMap<String, Object>> resources = new ArrayList<>();
718 resources.add(mResourceLight1ofD2);
719 resources.add(mResourceLight2ofD2);
721 HashMap<String, Object> groupInfo = new HashMap<>();
722 groupInfo.put(Constants.KEYFIELD_GROUP_DEVICES, devices);
723 groupInfo.put(Constants.KEYFIELD_GROUP_RESOURCES, resources);
724 setGroupInfo(mGid1, groupInfo);
725 // -- initialize group info
727 mGroupAclManager.addAceByMembers(mGid1, mPermission, members);
729 mGroupAclManager.removeAceByResources(
730 new ArrayList<>(Arrays.asList(mResourceLight1ofD2)), mGid1);
732 String aceIdu2d1 = null, aceIdu1d2 = null;
733 // verify ACE ownerid=u1, subjectuuid=u1 Deivce=d2
734 HashMap<String, Object> aceCondition1 = new HashMap<>();
735 HashMap<String, Object> aceidCondition1 = new HashMap<>();
736 aceidCondition1.put(Constants.KEYFIELD_UID, mUid1);
737 aceidCondition1.put(Constants.KEYFIELD_DI, mDi2);
739 aceCondition1.put(Constants.KEYFIELD_ACE_ID,
740 aceIdu1d2 = getAceId(aceidCondition1));
741 aceidCondition1.clear();
742 aceidCondition1.put(Constants.KEYFIELD_OID, mUid2);
744 // remove prefix in href
745 for (HashMap<String, Object> resource : resources) {
746 resource.put(Constants.KEYFIELD_ACE_RESOURCE_HREF,
748 resource.get(Constants.KEYFIELD_ACE_RESOURCE_HREF)
751 // verify AceId ownerid=u2, subjectuuid=u1 True
752 assertTrue(checkAceTable(aceCondition1, aceidCondition1));
753 // verify ACL Device2 User1
754 assertTrue(checkAclTable(mDi2, aceIdu1d2, mUid1,
755 Arrays.asList(mResourceLight2ofD2)));
757 // verify ACE ownerid=u1, subjectuuid=u2 Deivce=d1
758 HashMap<String, Object> aceCondition2 = new HashMap<>();
759 HashMap<String, Object> aceidCondition2 = new HashMap<>();
760 aceidCondition2.put(Constants.KEYFIELD_UID, mUid2);
761 aceidCondition2.put(Constants.KEYFIELD_DI, mDi1);
763 aceCondition2.put(Constants.KEYFIELD_ACE_ID,
764 aceIdu1d2 = getAceId(aceidCondition2));
765 aceidCondition2.clear();
766 aceidCondition2.put(Constants.KEYFIELD_OID, mUid1);
768 // verify AceId ownerid=u1, subjectuuid=u2 True
769 assertTrue(checkAceTable(aceCondition2, aceidCondition2));
770 // verify ACL Device2 User1
771 assertTrue(checkAclTable(mDi1, aceIdu1d2, mUid2,
772 Arrays.asList(mResourceAll)));
775 private boolean checkAclTable(String di, String aceid, String subjectUuid,
776 List<HashMap<String, Object>> resource) {
777 Log.v("--------------checkAclTable : " + di + " ------------");
778 HashMap<String, Object> getAclist = AclResource.getInstance()
779 .getAclACE((String) AclResource.getInstance().getAclid(di)
780 .get(Constants.KEYFIELD_ACLID), aceid);
781 Log.v("check result : " + getAclist);
782 if (getAclist.isEmpty()) {
786 // check subject uuid
787 assertTrue(getAclist.containsKey(Constants.KEYFIELD_ACE_SUBJECT_ID));
788 assertTrue(getAclist.get(Constants.KEYFIELD_ACE_SUBJECT_ID)
789 .equals(subjectUuid));
792 assertTrue(getAclist.containsKey(Constants.KEYFIELD_ACE_RESOURCE));
793 for (HashMap<String, Object> targetRes : resource) {
794 boolean isbreak = false;
795 for (HashMap<String, Object> res : (ArrayList<HashMap<String, Object>>) getAclist
796 .get(Constants.KEYFIELD_ACE_RESOURCE)) {
798 res.containsKey(Constants.KEYFIELD_ACE_RESOURCE_HREF));
799 if (res.get(Constants.KEYFIELD_ACE_RESOURCE_HREF).equals(
800 targetRes.get(Constants.KEYFIELD_ACE_RESOURCE_HREF))) {
813 private boolean checkAceTable(HashMap<String, Object> condition,
814 HashMap<String, Object> key) {
815 Log.v("--------------checkAceTable : " + condition.toString()
817 HashMap<String, Object> getAce = getAceTable(condition).get(0);
818 Log.v("check result : " + getAce);
819 if (getAce.isEmpty()) {
822 for (String keyelement : key.keySet()) {
823 assertTrue(getAce.containsKey(keyelement));
824 assertTrue(getAce.get(keyelement).equals(key.get(keyelement)));
829 private String getAceId(HashMap<String, Object> condition) {
831 ArrayList<HashMap<String, Object>> aceTables = AccountDBManager
832 .getInstance().selectRecord(Constants.ACE_TABLE, condition);
834 if (aceTables == null || aceTables.isEmpty()) {
838 return (String) aceTables.get(0).get(Constants.KEYFIELD_ACE_ID);
841 private ArrayList<HashMap<String, Object>> getAceTable(
842 HashMap<String, Object> condition) {
843 return AccountDBManager.getInstance().selectRecord(Constants.ACE_TABLE,
847 private String extractHref(String href) {
849 List<String> segment = new ArrayList<String>(
850 Arrays.asList(href.split("/")));
852 // Remove prefix path
857 StringBuilder uriPath = new StringBuilder();
858 for (String path : segment) {
859 uriPath.append("/" + path);
862 return uriPath.toString();
865 private void setGroupInfo(String gid, HashMap<String, Object> keyValue) {
867 GroupTable groupTable = new GroupTable();
868 groupTable.setGid(gid);
869 for (String key : keyValue.keySet()) {
870 groupTable.setPropertyValue(key, keyValue.get(key));
873 TypeCastingManager<GroupTable> typeGroup = new TypeCastingManager<GroupTable>();
874 AccountDBManager.getInstance().insertAndReplaceRecord(
875 Constants.GROUP_TABLE,
876 typeGroup.convertObjectToMap(groupTable));