@Test
public void testGetMatchingPolicies() {
// Add a new API
Api api = new Api();
api.setApiDetail(new ApiDetail());
api.setId("id31");
dataManager.addApi(api);
// Add a new API
Api api2 = new Api();
api2.setApiDetail(new ApiDetail());
api2.setId("id32");
dataManager.addApi(api2);
// Add a new API
Api api3 = new Api();
api3.setApiDetail(new ApiDetail());
api3.setId("id33");
dataManager.addApi(api3);
// Add a new API
Api api4 = new Api();
api4.setApiDetail(new ApiDetail());
api4.setId("id34");
dataManager.addApi(api4);
// Add a new Auth
Auth auth = new Auth();
auth.setId("id31");
auth.setStatus(StatusType.ACTIVE);
AuthDetail detail = new AuthDetail();
auth.setAuthDetail(detail);
auth.getAuthDetail().setType(NBAuthType.AUTHKEY);
auth.getAuthDetail().setAuthKeyValue("authKey31");
dataManager.addAuth(auth);
// Add a new Auth
Auth auth2 = new Auth();
auth2.setId("id32");
auth2.setStatus(StatusType.ACTIVE);
AuthDetail detail2 = new AuthDetail();
auth2.setAuthDetail(detail2);
auth2.getAuthDetail().setType(NBAuthType.AUTHKEY);
auth2.getAuthDetail().setAuthKeyValue("authKey32");
dataManager.addAuth(auth2);
// Add a new Auth
Auth auth3 = new Auth();
auth3.setId("id33");
auth3.setStatus(StatusType.ACTIVE);
AuthDetail detail3 = new AuthDetail();
auth3.setAuthDetail(detail3);
auth3.getAuthDetail().setType(NBAuthType.AUTHKEY);
auth3.getAuthDetail().setAuthKeyValue("authKey33");
dataManager.addAuth(auth3);
// Add a new Auth
Auth auth4 = new Auth();
auth4.setId("id34");
auth4.setStatus(StatusType.ACTIVE);
AuthDetail detail4 = new AuthDetail();
auth4.setAuthDetail(detail4);
auth4.getAuthDetail().setType(NBAuthType.BASIC);
auth4.getAuthDetail().setUsername("user1");
auth4.getAuthDetail().setPassword(new byte[]{'p', 'a', 's', 's', '1'});
dataManager.addAuth(auth4);
// Add a new Policy: Associated to API id1 and Auth id1
Policy policy = new Policy();
policy.setId("id31");
policy.getApiIds().add(api.getId());
// Create Bucket authIds of auth ids
QuotaRLBucket authIds = new QuotaRLBucket();
authIds.setId("bucketId");
authIds.getAuthIds().add(auth.getId());
// Add bucket authIds to policy
policy.getAuthIds().add(authIds);
dataManager.addPolicy(policy);
// Add a new Policy: Associated to API id2, API id3 and Auth id2, id4
Policy policy2 = new Policy();
policy2.setId("id32");
policy2.getApiIds().add(api2.getId());
policy2.getApiIds().add(api3.getId());
// Create Bucket authIds2 of auth ids
QuotaRLBucket authIds2 = new QuotaRLBucket();
authIds.setId("bucketId2");
authIds2.getAuthIds().add(auth2.getId());
authIds2.getAuthIds().add(auth4.getId());
// Add bucket authIds2 to the policy
policy2.getAuthIds().add(authIds2);
dataManager.addPolicy(policy2);
// Add a new Policy: Associatd to API id4 and no Auth
Policy policy3 = new Policy();
policy3.setId("id33");
policy3.getApiIds().add(api4.getId());
dataManager.addPolicy(policy3);
// Add a new Policy: Associatd to no API and Auth id3
Policy policy4 = new Policy();
policy4.setId("id34");
// Create Bucket authIds4 of auth ids
QuotaRLBucket authIds4 = new QuotaRLBucket();
authIds.setId("bucketId4");
authIds4.getAuthIds().add(auth3.getId());
// Add bucket authIds4 to the policy
policy4.getAuthIds().add(authIds4);
dataManager.addPolicy(policy4);
// Add a new Policy: Associatd to API id3 and no Auth
Policy policy5 = new Policy();
policy5.setId("id35");
policy5.getApiIds().add(api3.getId());
dataManager.addPolicy(policy5);
// Add a new Policy: Associatd to API id3 and Auth id3
Policy policy6 = new Policy();
policy6.setId("id36");
policy6.getApiIds().add(api3.getId());
// Create Bucket authIds6 of auth ids
QuotaRLBucket authIds6 = new QuotaRLBucket();
authIds.setId("bucketId6");
authIds6.getAuthIds().add(auth3.getId());
// Add bucket authIds6 to the policy
policy6.getAuthIds().add(authIds6);
dataManager.addPolicy(policy6);
// Add a new Policy: Associatd to no API and Auth id2
Policy policy7 = new Policy();
policy7.setId("id37");
// Create Bucket authIds7 of authId2
QuotaRLBucket authIds7 = new QuotaRLBucket();
authIds.setId("bucketId7");
authIds7.getAuthIds().add(auth2.getId());
// Add bucket authIds7 to the policy
policy7.getAuthIds().add(authIds7);
dataManager.addPolicy(policy7);
// Fetch updated values from cache
api = dataManager.getApiById(api.getId());
api2 = dataManager.getApiById(api2.getId());
api3 = dataManager.getApiById(api3.getId());
api4 = dataManager.getApiById(api4.getId());
auth = dataManager.getAuthById(auth.getId());
auth2 = dataManager.getAuthById(auth2.getId());
auth3 = dataManager.getAuthById(auth3.getId());
auth4 = dataManager.getAuthById(auth4.getId());
List<CallDescriptor> list1 = dataManager.getMatchingPolicies(api, auth);
assertEquals("List1 has correct size", 1, list1.size());
assertEquals("Matching policy is correct", policy.getId(), list1.get(0).getPolicy().getId());
List<CallDescriptor> list2 = dataManager.getMatchingPolicies(api2, auth2);
assertEquals("List2 has correct size", 2, list2.size());
assertEquals("Matching policy is correct", policy2.getId(), list2.get(0).getPolicy().getId());
assertEquals("Matching policy is correct", policy7.getId(), list2.get(1).getPolicy().getId());
List<CallDescriptor> list3 = dataManager.getMatchingPolicies(api3, null);
assertEquals("List3 has correct size", 1, list3.size());
assertEquals("Matching policy is correct", policy5.getId(), list3.get(0).getPolicy().getId());
List<CallDescriptor> list4 = dataManager.getMatchingPolicies(null, auth3);
assertEquals("List4 has correct size", 1, list4.size());
assertEquals("Matching policy is correct", policy4.getId(), list4.get(0).getPolicy().getId());
List<CallDescriptor> list5 = dataManager.getMatchingPolicies(api4, auth3);
assertEquals("List5 has correct size", 1, list5.size());
assertEquals("Matching policy is correct", policy4.getId(), list5.get(0).getPolicy().getId());
List<CallDescriptor> list6 = dataManager.getMatchingPolicies(api4, auth4);
assertNull("List6 has correct size", list6);
List<CallDescriptor> list7 = dataManager.getMatchingPolicies(null, null);
assertNull("List7 has correct size", list7);
// cleanup
dataManager.removePolicy(policy.getId());
dataManager.removePolicy(policy2.getId());
dataManager.removePolicy(policy3.getId());
dataManager.removePolicy(policy4.getId());
dataManager.removePolicy(policy5.getId());
dataManager.removePolicy(policy6.getId());
dataManager.removePolicy(policy7.getId());
dataManager.removeApi(api.getId());
dataManager.removeApi(api2.getId());
dataManager.removeApi(api3.getId());
dataManager.removeApi(api4.getId());
dataManager.removeAuth(auth.getId());
dataManager.removeAuth(auth2.getId());
dataManager.removeAuth(auth3.getId());
dataManager.removeAuth(auth4.getId());
}