/* * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.groupbasedpolicy.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.List; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.stream.Collectors; import com.google.common.collect.ImmutableList; import com.google.common.collect.Table; import org.junit.Test; import org.opendaylight.groupbasedpolicy.dto.EgKey; import org.opendaylight.groupbasedpolicy.dto.IndexedTenant; import org.opendaylight.groupbasedpolicy.dto.Policy; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityMatcherName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionMatcherName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.QualityMatcherName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.QualityName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RequirementMatcherName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RequirementName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TargetName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Label; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Matcher; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRefBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.Capability; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.CapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.condition.matchers.ConditionMatcher; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.condition.matchers.ConditionMatcherBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.conditions.Condition; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.conditions.ConditionBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.Quality; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.QualityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.Requirement; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.RequirementBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcher; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcherBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQualityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.PolicyBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroupBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ExternalImplicitGroupBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.ClauseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Subject; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.SubjectBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Target; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.TargetBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ConsumerMatchersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.ProviderMatchersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.consumer.matchers.group.identification.constraints.GroupRequirementConstraintCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcher; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcherBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.requirement.matcher.MatcherRequirementBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.provider.matchers.group.identification.constraints.GroupCapabilityConstraintCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcher; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcherBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.capability.matcher.MatcherCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerTargetSelector; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerTargetSelectorBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderTargetSelector; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderTargetSelectorBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.resolved.rules.ResolvedRule; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicy; public class PolicyInfoUtilsTest { // ****** // Labels // ****** private Quality q1 = new QualityBuilder().setName(new QualityName("q1")).build(); private Quality q1Include = new QualityBuilder(q1).setInclusionRule(Label.InclusionRule.Include).build(); private Quality q1Exclude = new QualityBuilder(q1).setInclusionRule(Label.InclusionRule.Exclude).build(); private Quality q2 = new QualityBuilder().setName(new QualityName("q2")).build(); private Quality q2Exclude = new QualityBuilder().setName(new QualityName("q2")).setInclusionRule(Label.InclusionRule.Exclude).build(); private Quality q3 = new QualityBuilder().setName(new QualityName("q3")).build(); private Requirement r1 = new RequirementBuilder().setName(new RequirementName("r1")).build(); private Requirement r2 = new RequirementBuilder().setName(new RequirementName("r2")).build(); private Requirement r1exclude = new RequirementBuilder().setName(new RequirementName("r1")) .setInclusionRule(Label.InclusionRule.Exclude) .build(); private Requirement r3 = new RequirementBuilder().setName(new RequirementName("r3")).build(); private Capability c1 = new CapabilityBuilder().setName(new CapabilityName("c1")).build(); private Capability c2 = new CapabilityBuilder().setName(new CapabilityName("c2")).build(); private Capability c1exclude = new CapabilityBuilder().setName(new CapabilityName("c1")) .setInclusionRule(Label.InclusionRule.Exclude) .build(); private Capability c3 = new CapabilityBuilder().setName(new CapabilityName("c3")).build(); private Condition cond1 = new ConditionBuilder().setName(new ConditionName("cond1")).build(); private Condition cond2 = new ConditionBuilder().setName(new ConditionName("cond2")).build(); private Condition cond3 = new ConditionBuilder().setName(new ConditionName("cond3")).build(); private Condition cond4 = new ConditionBuilder().setName(new ConditionName("cond4")).build(); private Condition cond2exlude = new ConditionBuilder().setName(new ConditionName("cond2")) .setInclusionRule(Label.InclusionRule.Exclude) .build(); // ********* // Contracts // ********* private TargetName q2TargetName = new TargetName("q2"); private Target q2Target = new TargetBuilder().setName(q2TargetName).setQuality(ImmutableList.of(q2)).build(); private TargetName q1ExcludeTargetName = new TargetName("q1_exclude"); private Target q1ExcludeTarget = new TargetBuilder().setName(q1ExcludeTargetName).setQuality(ImmutableList.of(q1Exclude, q2)).build(); private TargetName q1IncludeTargetName = new TargetName("q1_include"); private Target q1IncludeTarget = new TargetBuilder().setName(q1IncludeTargetName).setQuality(ImmutableList.of(q1Include)).build(); private Target q2PlusTarget = new TargetBuilder().setName(q2TargetName).setQuality(ImmutableList.of(q3)).build(); private SubjectName subject1 = new SubjectName("subject1"); private SubjectName subject2 = new SubjectName("subject2"); private SubjectName subject3 = new SubjectName("subject3"); private RequirementMatcher rm_r1 = new RequirementMatcherBuilder().setName(new RequirementMatcherName("rm_r1")) .setMatcherRequirement(ImmutableList.of(new MatcherRequirementBuilder(r1).build())) .build(); private RequirementMatcher rm_r1_plus = new RequirementMatcherBuilder().setName(new RequirementMatcherName("rm_r1")) .setMatchType(Matcher.MatchType.All) .setMatcherRequirement(ImmutableList.of(new MatcherRequirementBuilder(r2).build())) .build(); private CapabilityMatcher capm_c1 = new CapabilityMatcherBuilder().setName(new CapabilityMatcherName("capm_c1")) .setMatcherCapability(ImmutableList.of(new MatcherCapabilityBuilder(c1).build())) .build(); private ConditionMatcher cm_c1 = new ConditionMatcherBuilder().setName(new ConditionMatcherName("cm_c1")) .setCondition(ImmutableList.of(cond1)) .build(); private ConditionMatcher cm_c2 = new ConditionMatcherBuilder().setName(new ConditionMatcherName("cm_c2")) .setMatchType(Matcher.MatchType.All) .setCondition(ImmutableList.of(cond2)) .build(); private ConditionMatcher cm_c3 = new ConditionMatcherBuilder().setName(new ConditionMatcherName("cm_c3")) .setMatchType(Matcher.MatchType.None) .setCondition(ImmutableList.of(cond3)) .build(); private ConditionMatcher cm_c4 = new ConditionMatcherBuilder().setName(new ConditionMatcherName("cm_c4")) .setMatchType(Matcher.MatchType.Any) .setCondition(ImmutableList.of(cond4)) .build(); private ConditionMatcher cm_c2_plus = new ConditionMatcherBuilder().setName(new ConditionMatcherName("cm_c2")) .setCondition(ImmutableList.of(cond2exlude)) .build(); private ClauseName clauseName1 = new ClauseName("clauseName1"); private Clause clause1 = new ClauseBuilder().setName(clauseName1) .setSubjectRefs(ImmutableList.of(subject1)) .setProviderMatchers(new ProviderMatchersBuilder() .setGroupIdentificationConstraints(new GroupCapabilityConstraintCaseBuilder() .setCapabilityMatcher(ImmutableList.of(capm_c1)).build()) .setConditionMatcher(ImmutableList.of(cm_c1)) .build()) .setConsumerMatchers(new ConsumerMatchersBuilder() .setGroupIdentificationConstraints(new GroupRequirementConstraintCaseBuilder() .setRequirementMatcher(ImmutableList.of(rm_r1)).build()) .setConditionMatcher(ImmutableList.of(cm_c2, cm_c3, cm_c4)) .build()) .build(); private Clause clause1withConsMatcher = new ClauseBuilder().setName(clauseName1) .setSubjectRefs(ImmutableList.of(subject2)) .setConsumerMatchers(new ConsumerMatchersBuilder() .setGroupIdentificationConstraints(new GroupRequirementConstraintCaseBuilder() .setRequirementMatcher(ImmutableList.of(rm_r1_plus)).build()) .setConditionMatcher(ImmutableList.of(cm_c2_plus)) .build()) .build(); private Clause clause1withProvMatcher = new ClauseBuilder().setName(clauseName1) .setSubjectRefs(ImmutableList.of(subject3)) .setProviderMatchers(new ProviderMatchersBuilder() .setGroupIdentificationConstraints(new GroupCapabilityConstraintCaseBuilder() .setCapabilityMatcher(ImmutableList.of(capm_c1)).build()) .setConditionMatcher(ImmutableList.of(cm_c2_plus)) .build()) .build(); private ActionRef a1 = new ActionRefBuilder().setName(new ActionName("a1")).build(); private ClassifierRef cr1 = new ClassifierRefBuilder().setName(new ClassifierName("cr1")).build(); private Rule rule1 = new RuleBuilder().setName(new RuleName("r1")) .setActionRef(ImmutableList.of(a1)) .setClassifierRef(ImmutableList.of(cr1)) .build(); private Rule rule2 = new RuleBuilder().setName(new RuleName("r2")).setOrder(5).build(); private Rule rule3 = new RuleBuilder().setName(new RuleName("r3")).setOrder(7).build(); private Rule rule4 = new RuleBuilder().setName(new RuleName("r4")).setOrder(1).build(); private Subject s1 = new SubjectBuilder().setName(new SubjectName("s1")).setRule(ImmutableList.of(rule1, rule2)).build(); private Subject s1_plus = new SubjectBuilder().setName(s1.getName()).setRule(ImmutableList.of(rule3, rule4)).setOrder(4).build(); private Subject s2 = new SubjectBuilder().setName(new SubjectName("s2")).setOrder(5).build(); private Subject s2_plus = new SubjectBuilder().setName(new SubjectName(s2.getName())).setOrder(6).build(); private ContractId contractId1 = new ContractId("e7e6804f-7fcb-46cf-9bc6-abfec0896d95"); private Contract contract1 = new ContractBuilder().setId(contractId1) .setQuality(ImmutableList.of(q1)) .setTarget(ImmutableList.of(q2Target, q1IncludeTarget, q1ExcludeTarget)) .setClause(ImmutableList.of(clause1)) .setSubject(ImmutableList.of(s1)) .build(); private ContractId contractId2 = new ContractId("3f56ae44-d1e4-4617-95af-c809dfc50149"); private Contract contract2 = new ContractBuilder().setId(contractId2) .setParent(contractId1) .setTarget(ImmutableList.of(q2PlusTarget, q1IncludeTarget)) .setClause(ImmutableList.of(clause1withConsMatcher)) .setSubject(ImmutableList.of(s1_plus, s2)) .build(); private ContractId contractId3 = new ContractId("38d52ec1-301b-453a-88a6-3ffa777d7795"); private Contract contract3 = new ContractBuilder().setId(contractId3) .setParent(contractId1) .setTarget(ImmutableList.of(q2PlusTarget, q1IncludeTarget)) .setClause(ImmutableList.of(clause1withProvMatcher)) .setSubject(ImmutableList.of(s2_plus, s2)) .build(); // *************** // Endpoint Groups // *************** private SelectorName cnsName1 = new SelectorName("cns1"); private ConsumerNamedSelector cns1 = new ConsumerNamedSelectorBuilder().setName(cnsName1) .setContract(ImmutableList.of(contractId1)) .setRequirement(ImmutableList.of(r2)) .build(); private ConsumerNamedSelector cns1_plus = new ConsumerNamedSelectorBuilder().setName(cnsName1) .setContract(ImmutableList.of(contractId2)) .setRequirement(ImmutableList.of(r3)) .build(); private ProviderNamedSelector pns1 = new ProviderNamedSelectorBuilder().setName(cnsName1) .setContract(ImmutableList.of(contractId1)) .setCapability(ImmutableList.of(c2)) .build(); private ProviderNamedSelector pns1_plus = new ProviderNamedSelectorBuilder().setName(cnsName1) .setContract(ImmutableList.of(contractId2)) .setCapability(ImmutableList.of(c3)) .build(); private QualityMatcher qm_q1_all = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q1_all")) .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q1).build())) .setMatchType(Matcher.MatchType.All) .build(); private QualityMatcher qm_q1_any = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q1_any")) .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q1).build())) .setMatchType(Matcher.MatchType.Any) .build(); private QualityMatcher qm_q2q3_any = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q2q3_any")) .setMatcherQuality( ImmutableList.of(new MatcherQualityBuilder(q2).build(), new MatcherQualityBuilder(q3).build())) .setMatchType(Matcher.MatchType.Any) .build(); private QualityMatcher qm_q2tq2 = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q2tq2")) .setMatcherQuality( ImmutableList.of(new MatcherQualityBuilder(q2).setTargetNamespace(q2TargetName).build())) .setMatchType(Matcher.MatchType.Any) .build(); private QualityMatcher qm_q2q3_plus = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q2q3_any")) .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q3).setTargetNamespace(q2TargetName).build(), new MatcherQualityBuilder(q2Exclude).build())) .setMatchType(Matcher.MatchType.All) .build(); private QualityMatcher qm_q1_plus = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q1_any")).build(); private SelectorName ctsName1 = new SelectorName("cts1"); private ConsumerTargetSelector cts1 = new ConsumerTargetSelectorBuilder().setName(ctsName1) .setQualityMatcher(ImmutableList.of(qm_q1_all, qm_q1_any)) .setRequirement(ImmutableList.of(r2)) .build(); private SelectorName ctsName2 = new SelectorName("cts2"); private ConsumerTargetSelector cts2 = new ConsumerTargetSelectorBuilder().setName(ctsName2) .setQualityMatcher(ImmutableList.of(qm_q2q3_any)) .setRequirement(ImmutableList.of(r1exclude, r3)) .build(); private ConsumerTargetSelector cts1_plus = new ConsumerTargetSelectorBuilder().setName(ctsName1) .setQualityMatcher(ImmutableList.of(qm_q1_plus, qm_q2q3_any, qm_q1_plus)) .setRequirement(ImmutableList.of(r3)) .build(); private ConsumerTargetSelector cts2_plus = new ConsumerTargetSelectorBuilder().setName(ctsName2) .setQualityMatcher(ImmutableList.of(qm_q2tq2, qm_q2q3_plus)) .setRequirement(ImmutableList.of(r3)) .build(); private SelectorName ptsName1 = new SelectorName("pts1"); private ProviderTargetSelector pts1 = new ProviderTargetSelectorBuilder().setName(ptsName1) .setQualityMatcher(ImmutableList.of(qm_q1_all, qm_q1_any)) .setCapability(ImmutableList.of(c2)) .build(); private SelectorName ptsName2 = new SelectorName("pts2"); private ProviderTargetSelector pts2 = new ProviderTargetSelectorBuilder().setName(ptsName2) .setQualityMatcher(ImmutableList.of(qm_q2q3_any)) .setCapability(ImmutableList.of(c1exclude, c3)) .build(); private ProviderTargetSelector pts1_plus = new ProviderTargetSelectorBuilder().setName(ptsName1) .setQualityMatcher(ImmutableList.of(qm_q1_plus, qm_q2q3_any, qm_q1_plus)) .setCapability(ImmutableList.of(c3)) .build(); private ProviderTargetSelector pts2_plus = new ProviderTargetSelectorBuilder().setName(ptsName2) .setQualityMatcher(ImmutableList.of(qm_q2tq2, qm_q2q3_plus)) .setCapability(ImmutableList.of(c3)) .build(); private EndpointGroupId egId1 = new EndpointGroupId("c0e5edfb-02d2-412b-8757-a77b3daeb5d4"); private EndpointGroup eg1 = new EndpointGroupBuilder().setId(egId1) .setRequirement(ImmutableList.of(r1)) .setCapability(ImmutableList.of(c1)) .setConsumerTargetSelector(ImmutableList.of(cts1, cts2)) .setConsumerNamedSelector(ImmutableList.of(cns1)) .setProviderTargetSelector(ImmutableList.of(pts1, pts2)) .setProviderNamedSelector(ImmutableList.of(pns1)) .build(); private EndpointGroupId egId2 = new EndpointGroupId("60483327-ad76-43dd-b3bf-54ffb73ef4b8"); private EndpointGroup eg2 = new EndpointGroupBuilder().setId(egId2) .setParent(egId1) .setConsumerTargetSelector(ImmutableList.of(cts1_plus, cts2_plus)) .setConsumerNamedSelector(ImmutableList.of(cns1_plus)) .setProviderTargetSelector(ImmutableList.of(pts1_plus, pts2_plus)) .setProviderNamedSelector(ImmutableList.of(pns1_plus)) .build(); // ******* // Tenants // ******* private TenantId tenantId1 = new TenantId("0ac5d219-979c-4cca-8f90-83b69bc414ad"); private Tenant tenant1 = new TenantBuilder().setId(tenantId1) .setPolicy(new PolicyBuilder().setEndpointGroup(ImmutableList.of(eg1, eg2)) .setContract(ImmutableList.of(contract1, contract2, contract3)) .build()) .build(); private Tenant tenant1_with_eig = new TenantBuilder().setId(tenantId1) .setPolicy(new PolicyBuilder().setEndpointGroup(ImmutableList.of(eg1, eg2)) .setContract(ImmutableList.of(contract1, contract2, contract3)) .setExternalImplicitGroup(ImmutableList.of(new ExternalImplicitGroupBuilder().setId(egId1).build())) .build()) .build(); @Test public void testBuildResolvedPolicy() { IndexedTenant indexedTenant = new IndexedTenant(tenant1_with_eig); ConcurrentMap<TenantId, IndexedTenant> resolvedTenants = new ConcurrentHashMap<>(); resolvedTenants.put(indexedTenant.getTenant().getId(), indexedTenant); Set<IndexedTenant> indexedTenants = resolvedTenants.values().stream().filter(t -> t != null).collect(Collectors.toSet()); Table<EgKey, EgKey, Policy> policyMap = PolicyResolverUtils.resolvePolicy(indexedTenants); List<ResolvedPolicy> resolvedPolicies = PolicyInfoUtils.buildResolvedPolicy(policyMap, resolvedTenants); assertEquals(4, resolvedPolicies.size()); } @Test public void testBuildResolvedRules() { List<ResolvedRule> res = PolicyInfoUtils.buildResolvedRules(ImmutableList.of(rule1), tenant1); assertNotNull(res); assertEquals(1, res.size()); assertEquals(rule1.getName(), res.get(0).getName()); } }