@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());
}