- public void testSubjectSelection() throws Exception {
- ConditionSet cs =
- new ConditionSet(ImmutableSet.of(cond1.getName()),
- ImmutableSet.of(cond3.getName()),
- ImmutableSet.of(ImmutableSet.of(cond1.getName(),
- cond2.getName())));
- TenantContext tc = new TenantContext(null);
-
- tc.tenant.set(new IndexedTenant(tenant1));
- Table<EgKey, EgKey, List<ContractMatch>> contractMatches =
- ContractResolverUtils.selectContracts(ImmutableSet.of(tc.tenant.get()));
- Map<EgKey, Set<ConditionSet>> egConditions = new HashMap<>();
- Table<EgKey, EgKey, Policy> policy =
- SubjectResolverUtils.selectSubjects(contractMatches, egConditions);
- assertEquals(1, policy.size());
- Policy p = policy.get(new EgKey(tenant1.getId(), eg1.getId()), new EgKey(tenant1.getId(), eg2.getId()));
- List<RuleGroup> rules = p.getRuleMap().get(cs, ConditionSet.EMPTY);
- assertNotNull(rules);
- assertEquals(1, rules.size());
- RuleGroup rg = rules.get(0);
- assertEquals(tenant1.getId(), rg.contractTenant.getId());
- assertEquals(contract1.getId(), rg.relatedContract.getId());
- assertEquals(s1.getName(), rg.relatedSubject);
- assertEquals(1, rg.rules.size());
- assertEquals(rule1.getName(), rg.rules.get(0).getName());
-
- tc.tenant.set(new IndexedTenant(tenant2));
- contractMatches = ContractResolverUtils.selectContracts(ImmutableSet.of(tc.tenant.get()));
- egConditions = new HashMap<>();
- policy = SubjectResolverUtils.selectSubjects(contractMatches, egConditions);
-
- assertEquals(2, policy.size());
- p = policy.get(new EgKey(tenant2.getId(), eg3.getId()),
- new EgKey(tenant2.getId(), eg2.getId()));
- rules = p.getRuleMap().get(cs, ConditionSet.EMPTY);
- assertNotNull(rules);
- assertEquals(1, rules.size());
- rg = rules.get(0);
- assertEquals(tenant2.getId(), rg.contractTenant.getId());
- assertEquals(contract1.getId(), rg.relatedContract.getId());
- assertEquals(s1.getName(), rg.relatedSubject);
- assertEquals(1, rg.rules.size());
- assertEquals(rule1.getName(), rg.rules.get(0).getName());
-
- rules = p.getRuleMap().get(ConditionSet.EMPTY, ConditionSet.EMPTY);
- assertNotNull(rules);
- assertEquals(1, rules.size());
- rg = rules.get(0);
- assertEquals(tenant2.getId(), rg.contractTenant.getId());
- assertEquals(contract2.getId(), rg.relatedContract.getId());
- assertEquals(s2.getName(), rg.relatedSubject);
- assertEquals(1, rg.rules.size());
- assertEquals(rule2.getName(), rg.rules.get(0).getName());
-
- p = policy.get(new EgKey(tenant2.getId(), eg1.getId()),
- new EgKey(tenant2.getId(), eg2.getId()));
- rules = p.getRuleMap().get(cs, ConditionSet.EMPTY);
- assertNotNull(rules);
- assertEquals(1, rules.size());
- rg = rules.get(0);
- assertEquals(tenant2.getId(), rg.contractTenant.getId());
- assertEquals(contract1.getId(), rg.relatedContract.getId());
- assertEquals(s1.getName(), rg.relatedSubject);
- assertEquals(1, rg.rules.size());
- assertEquals(rule1.getName(), rg.rules.get(0).getName());
-
- tc.tenant.set(new IndexedTenant(tenant3));
- contractMatches = ContractResolverUtils.selectContracts(ImmutableSet.of(tc.tenant.get()));
- egConditions = new HashMap<>();
- policy = SubjectResolverUtils.selectSubjects(contractMatches, egConditions);
-
- assertEquals(1, policy.size());
- p = policy.get(new EgKey(tenant3.getId(), eg4.getId()),
- new EgKey(tenant3.getId(), eg5.getId()));
- rules = p.getRuleMap().get(ConditionSet.EMPTY, ConditionSet.EMPTY);
- assertNotNull(rules);
- assertEquals(1, rules.size());
- rg = rules.get(0);
- assertEquals(tenant3.getId(), rg.contractTenant.getId());
- assertEquals(contract2.getId(), rg.relatedContract.getId());
- assertEquals(s2.getName(), rg.relatedSubject);
- assertEquals(1, rg.rules.size());
- assertEquals(rule2.getName(), rg.rules.get(0).getName());