/* * Copyright (c) 2014 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.resolver; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.List; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import org.junit.Test; import org.opendaylight.groupbasedpolicy.util.InheritanceUtils; import org.opendaylight.groupbasedpolicy.util.TenantUtils; 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.CapabilityBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Label.InclusionRule; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Matcher.MatchType; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.QualityBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.RequirementBase; 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.MatcherQuality; 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.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.GroupRequirementConstraintCase; 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.GroupCapabilityConstraintCase; 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; public class InheritanceUtilsTest { // ****** // Labels // ****** private Quality q1 = new QualityBuilder().setName(new QualityName("q1")).build(); private Quality q1Include = new QualityBuilder(q1).setInclusionRule(InclusionRule.Include).build(); private Quality q1Exclude = new QualityBuilder(q1).setInclusionRule(InclusionRule.Exclude).build(); private Quality q2 = new QualityBuilder().setName(new QualityName("q2")).build(); private Quality q2Exclude = new QualityBuilder().setName(new QualityName("q2")).setInclusionRule(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(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(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 cond2exlude = new ConditionBuilder().setName(new ConditionName("cond2")).setInclusionRule(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(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(MatchType.All) .setCondition(ImmutableList.of(cond2)) .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)) .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(); private ContractId cloop2Id = new ContractId("89700928-7316-4216-a853-a7ea3934b8f4"); private Contract cloop1 = new ContractBuilder().setId(new ContractId("56bbce36-e60b-473d-92de-bb63b5a6dbb5")) .setParent(cloop2Id) .setClause(ImmutableList.of(clause1)) .setSubject(ImmutableList.of(s1, s2)) .build(); private Contract cloop2 = new ContractBuilder().setId(cloop2Id).setParent(cloop1.getId()).build(); private ContractId cselfloopid = new ContractId("63edead2-d6f1-4acf-9f78-831595d194ee"); private Contract cselfloop = new ContractBuilder().setId(cselfloopid).setParent(cselfloopid).build(); private Contract corphan = new ContractBuilder().setId(new ContractId("f72c15f3-76ab-4c7e-a817-eb5f6efcb654")) .setParent(new ContractId("eca4d0d5-8c62-4f46-ad42-71c1f4d3da12")) .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(MatchType.All) .build(); private QualityMatcher qm_q1_any = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q1_any")) .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q1).build())) .setMatchType(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(MatchType.Any) .build(); private QualityMatcher qm_q2tq2 = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q2tq2")) .setMatcherQuality( ImmutableList.of(new MatcherQualityBuilder(q2).setTargetNamespace(q2TargetName).build())) .setMatchType(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(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(); private EndpointGroupId egloop2Id = new EndpointGroupId("cb5be574-9836-4053-8ec4-4b4a43331d65"); private EndpointGroup egloop1 = new EndpointGroupBuilder() .setId(new EndpointGroupId("a33fdd4d-f58b-4741-a69f-08aecab9af2e")) .setParent(egloop2Id) .setConsumerNamedSelector(ImmutableList.of(cns1)) .setProviderNamedSelector(ImmutableList.of(pns1)) .setConsumerTargetSelector(ImmutableList.of(cts1)) .setProviderTargetSelector(ImmutableList.of(pts1)) .build(); private EndpointGroup egloop2 = new EndpointGroupBuilder().setId(egloop2Id).setParent(egloop1.getId()).build(); private EndpointGroupId egselfloopid = new EndpointGroupId("996ad104-f852-4d77-96cf-cddde5cebb84"); private EndpointGroup egselfloop = new EndpointGroupBuilder().setId(egselfloopid).setParent(egselfloopid).build(); private EndpointGroup egorphan = new EndpointGroupBuilder().setId(new EndpointGroupId("feafeac9-ce1a-4b19-8455-8fcc9a4ff013")) .setParent(new EndpointGroupId("aa9dfcf1-610c-42f9-8c3a-f67b43196821")) .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 malformed = new TenantBuilder().setId(new TenantId("b26e6b18-8e74-4062-a7d2-e8437132030d")) .setPolicy(new PolicyBuilder().setContract(ImmutableList.of(cloop1, cloop2, cselfloop, corphan)) .setEndpointGroup(ImmutableList.of(egloop1, egloop2, egselfloop, egorphan)) .build()) .build(); // **************** // Other test state // **************** private boolean containsQuality(List<? extends QualityBase> qualities, QualityBase quality) { for (QualityBase q : qualities) { if (q.getName().equals(quality.getName())) return true; } return false; } @Test public void testTargetSimple() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); Contract c1 = TenantUtils.findContract(tenant, contractId1); // target with a quality directly in the target and one in // the containing contract Target result = TenantUtils.findTarget(c1, q2TargetName); assertNotNull(result); assertEquals(q2TargetName, result.getName()); List<Quality> qualities = result.getQuality(); assertTrue(containsQuality(qualities, q1)); assertTrue(containsQuality(qualities, q2)); // target with a quality directly in the target with explicit "include" result = TenantUtils.findTarget(c1, q1IncludeTargetName); assertNotNull(result); qualities = result.getQuality(); assertTrue(containsQuality(qualities, q1)); // target with a quality from the containing contract but overridden // in the target result = TenantUtils.findTarget(c1, q1ExcludeTargetName); assertNotNull(result); qualities = result.getQuality(); assertFalse(containsQuality(qualities, q1)); assertTrue(containsQuality(qualities, q2)); } @Test public void testTargetInheritance() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); Contract c2 = TenantUtils.findContract(tenant, contractId2); // hits the q2PlusTarget which should include everything in q2Target // plus q3 Target result = TenantUtils.findTarget(c2, q2TargetName); assertNotNull(result); List<Quality> qualities = result.getQuality(); assertTrue(containsQuality(qualities, q1)); assertTrue(containsQuality(qualities, q2)); assertTrue(containsQuality(qualities, q3)); // Simple case of inheriting the behavior from the base but not messing // it up result = TenantUtils.findTarget(c2, q1IncludeTargetName); assertNotNull(result); qualities = result.getQuality(); assertTrue(containsQuality(qualities, q1)); assertFalse(containsQuality(qualities, q2)); assertFalse(containsQuality(qualities, q3)); // Inherit a target from the base that isn't found in the child at all result = TenantUtils.findTarget(c2, q1ExcludeTargetName); assertNotNull(result); qualities = result.getQuality(); assertFalse(containsQuality(qualities, q1)); assertTrue(containsQuality(qualities, q2)); assertFalse(containsQuality(qualities, q3)); } private boolean containsRequirement(List<? extends RequirementBase> requirements, RequirementBase requirement) { for (RequirementBase r : requirements) { if (r.getName().equals(requirement.getName())) return true; } return false; } private boolean containsCapability(List<? extends CapabilityBase> capabilities, CapabilityBase capability) { for (CapabilityBase r : capabilities) { if (r.getName().equals(capability.getName())) return true; } return false; } private boolean containsCondition(List<? extends Condition> conditions, Condition condition) { for (Condition r : conditions) { if (r.getName().equals(condition.getName())) return true; } return false; } @Test public void testConsumerTargetSelectorSimple() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); EndpointGroup egResult1 = TenantUtils.findEndpointGroup(tenant, egId1); // should get r1 from eg1 and r2 from target selector ConsumerTargetSelector result = TenantUtils.findCts(egResult1, ctsName1); assertNotNull(result); assertEquals(ctsName1, result.getName()); List<Requirement> requirements = result.getRequirement(); assertTrue(containsRequirement(requirements, r1)); assertTrue(containsRequirement(requirements, r2)); List<QualityMatcher> matchers = result.getQualityMatcher(); assertEquals(2, matchers.size()); for (QualityMatcher m : matchers) { if (m.getName().equals(new QualityMatcherName("qm_q1_all"))) { assertTrue(containsQuality(m.getMatcherQuality(), q1)); assertEquals(MatchType.All, m.getMatchType()); } else { assertTrue(containsQuality(m.getMatcherQuality(), q1)); assertEquals(MatchType.Any, m.getMatchType()); } } // should get r1 from eg1 but excluded in target selector // r3 comes from target selector result = TenantUtils.findCts(egResult1, ctsName2); assertNotNull(result); assertEquals(ctsName2, result.getName()); requirements = result.getRequirement(); assertFalse(containsRequirement(requirements, r1)); assertFalse(containsRequirement(requirements, r2)); assertTrue(containsRequirement(requirements, r3)); matchers = result.getQualityMatcher(); assertEquals(1, matchers.size()); assertTrue(containsQuality(matchers.get(0).getMatcherQuality(), q2)); assertTrue(containsQuality(matchers.get(0).getMatcherQuality(), q3)); assertEquals(MatchType.Any, matchers.get(0).getMatchType()); } @Test public void testConsumerTargetSelectorInheritance() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); EndpointGroup egResult2 = TenantUtils.findEndpointGroup(tenant, egId2); ConsumerTargetSelector result = TenantUtils.findCts(egResult2, ctsName1); assertNotNull(result); List<Requirement> requirements = result.getRequirement(); assertTrue(containsRequirement(requirements, r1)); assertTrue(containsRequirement(requirements, r3)); // should have three matchers, // (1) qm_q1_all inherited from endpoint group 1 // (2) qm_q1_any inherited from endpoint group 1, but overridden in // endpoint group 2 with no new semantics // (3) qm_q2q3_any defined in endpoint group 2 List<QualityMatcher> matchers = result.getQualityMatcher(); assertEquals(3, matchers.size()); for (QualityMatcher m : matchers) { if (m.getName().equals(new QualityMatcherName("qm_q1_all"))) { assertEquals(1, m.getMatcherQuality().size()); assertTrue(containsQuality(m.getMatcherQuality(), q1)); assertEquals(MatchType.All, m.getMatchType()); } else if (m.getName().equals(new QualityMatcherName("qm_q1_any"))) { assertEquals(1, m.getMatcherQuality().size()); assertTrue(containsQuality(m.getMatcherQuality(), q1)); assertEquals(MatchType.Any, m.getMatchType()); } else { assertTrue(containsQuality(m.getMatcherQuality(), q2)); assertTrue(containsQuality(m.getMatcherQuality(), q3)); assertEquals(MatchType.Any, m.getMatchType()); } } result = TenantUtils.findCts(egResult2, ctsName2); assertNotNull(result); assertEquals(ctsName2, result.getName()); requirements = result.getRequirement(); // should get r1 from eg1 but excluded in target selector // r3 comes from target selector assertFalse(containsRequirement(requirements, r1)); assertFalse(containsRequirement(requirements, r2)); assertTrue(containsRequirement(requirements, r3)); // Should get 2 matchers: // (1) qm_q2q2_any inherited from eg1, except that q2 is excluded // by qm_q2q3_plus and q3 has a target namespace added // (2) qm_q2tq2_any newly-defined with a target namespace matchers = result.getQualityMatcher(); assertEquals(2, matchers.size()); for (QualityMatcher m : matchers) { if (m.getName().equals(new QualityMatcherName("qm_q2q3_any"))) { assertFalse(containsQuality(m.getMatcherQuality(), q1)); assertFalse(containsQuality(m.getMatcherQuality(), q2)); assertTrue(containsQuality(m.getMatcherQuality(), q3)); for (MatcherQuality mq : m.getMatcherQuality()) { if (mq.getName().equals(q3.getName())) { assertEquals(q2TargetName, mq.getTargetNamespace()); } else { assertNull(mq.getTargetNamespace()); } } assertEquals(MatchType.All, m.getMatchType()); } else { assertTrue(containsQuality(m.getMatcherQuality(), q2)); assertEquals(MatchType.Any, m.getMatchType()); assertEquals(1, m.getMatcherQuality().size()); assertEquals(q2TargetName, m.getMatcherQuality().get(0).getTargetNamespace()); } } } @Test public void testConsumerNamedSelectorSimple() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); EndpointGroup egResult1 = TenantUtils.findEndpointGroup(tenant, egId1); // should get r1 from eg1 and r2 from selector ConsumerNamedSelector result = TenantUtils.findCns(egResult1, cnsName1); assertNotNull(result); assertEquals(cnsName1, result.getName()); List<Requirement> requirements = result.getRequirement(); assertEquals(2, requirements.size()); assertTrue(containsRequirement(requirements, r1)); assertTrue(containsRequirement(requirements, r2)); assertEquals(1, result.getContract().size()); assertTrue(result.getContract().contains(contractId1)); } @Test public void testConsumerNamedSelectorInheritance() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); EndpointGroup egResult2 = TenantUtils.findEndpointGroup(tenant, egId2); // should get r1 from eg1 and r2 from eg1 selector, // and r3 from eg2 selector ConsumerNamedSelector result = TenantUtils.findCns(egResult2, cnsName1); assertNotNull(result); assertEquals(cnsName1, result.getName()); List<Requirement> requirements = result.getRequirement(); assertEquals(3, requirements.size()); assertTrue(containsRequirement(requirements, r1)); assertTrue(containsRequirement(requirements, r2)); assertTrue(containsRequirement(requirements, r3)); assertEquals(2, result.getContract().size()); assertTrue(result.getContract().containsAll(ImmutableSet.of(contractId1, contractId2))); } @Test public void testProviderTargetSelectorSimple() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); EndpointGroup egResult1 = TenantUtils.findEndpointGroup(tenant, egId1); // should get c1 from eg1 and c2 from target selector ProviderTargetSelector result = TenantUtils.findPts(egResult1, ptsName1); assertNotNull(result); assertEquals(ptsName1, result.getName()); List<Capability> capabilities = result.getCapability(); assertTrue(containsCapability(capabilities, c1)); assertTrue(containsCapability(capabilities, c2)); List<QualityMatcher> matchers = result.getQualityMatcher(); assertEquals(2, matchers.size()); for (QualityMatcher m : matchers) { if (m.getName().equals(new QualityMatcherName("qm_q1_all"))) { assertTrue(containsQuality(m.getMatcherQuality(), q1)); assertEquals(MatchType.All, m.getMatchType()); } else { assertTrue(containsQuality(m.getMatcherQuality(), q1)); assertEquals(MatchType.Any, m.getMatchType()); } } // should get c1 from eg1 but excluded in target selector // c3 comes from target selector result = TenantUtils.findPts(egResult1, ptsName2); assertNotNull(result); assertEquals(ptsName2, result.getName()); capabilities = result.getCapability(); assertFalse(containsCapability(capabilities, c1)); assertFalse(containsCapability(capabilities, c2)); assertTrue(containsCapability(capabilities, c3)); matchers = result.getQualityMatcher(); assertEquals(1, matchers.size()); assertTrue(containsQuality(matchers.get(0).getMatcherQuality(), q2)); assertTrue(containsQuality(matchers.get(0).getMatcherQuality(), q3)); assertEquals(MatchType.Any, matchers.get(0).getMatchType()); } @Test public void testProviderTargetSelectorInheritance() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); EndpointGroup egResult2 = TenantUtils.findEndpointGroup(tenant, egId2); ProviderTargetSelector result = TenantUtils.findPts(egResult2, ptsName1); assertNotNull(result); List<Capability> capabilities = result.getCapability(); assertTrue(containsCapability(capabilities, c1)); assertTrue(containsCapability(capabilities, c3)); // should have three matchers, // (1) qm_q1_all inherited from endpoint group 1 // (2) qm_q1_any inherited from endpoint group 1, but overridden in // endpoint group 2 with no new semantics // (3) qm_q2q3_any defined in endpoint group 2 List<QualityMatcher> matchers = result.getQualityMatcher(); assertEquals(3, matchers.size()); for (QualityMatcher m : matchers) { if (m.getName().equals(new QualityMatcherName("qm_q1_all"))) { assertEquals(1, m.getMatcherQuality().size()); assertTrue(containsQuality(m.getMatcherQuality(), q1)); assertEquals(MatchType.All, m.getMatchType()); } else if (m.getName().equals(new QualityMatcherName("qm_q1_any"))) { assertEquals(1, m.getMatcherQuality().size()); assertTrue(containsQuality(m.getMatcherQuality(), q1)); assertEquals(MatchType.Any, m.getMatchType()); } else { assertTrue(containsQuality(m.getMatcherQuality(), q2)); assertTrue(containsQuality(m.getMatcherQuality(), q3)); assertEquals(MatchType.Any, m.getMatchType()); } } result = TenantUtils.findPts(egResult2, ptsName2); assertNotNull(result); assertEquals(ptsName2, result.getName()); capabilities = result.getCapability(); // should get c1 from eg1 but excluded in target selector // c3 comes from target selector assertFalse(containsCapability(capabilities, c1)); assertFalse(containsCapability(capabilities, c2)); assertTrue(containsCapability(capabilities, c3)); // Should get 2 matchers: // (1) qm_q2q2_any inherited from eg1, except that q2 is excluded // by qm_q2q3_plus and q3 has a target namespace added // (2) qm_q2tq2_any newly-defined with a target namespace matchers = result.getQualityMatcher(); assertEquals(2, matchers.size()); for (QualityMatcher m : matchers) { if (m.getName().equals(new QualityMatcherName("qm_q2q3_any"))) { assertFalse(containsQuality(m.getMatcherQuality(), q1)); assertFalse(containsQuality(m.getMatcherQuality(), q2)); assertTrue(containsQuality(m.getMatcherQuality(), q3)); for (MatcherQuality mq : m.getMatcherQuality()) { if (mq.getName().equals(q3.getName())) { assertEquals(q2TargetName, mq.getTargetNamespace()); } else { assertNull(mq.getTargetNamespace()); } } assertEquals(MatchType.All, m.getMatchType()); } else { assertTrue(containsQuality(m.getMatcherQuality(), q2)); assertEquals(MatchType.Any, m.getMatchType()); assertEquals(1, m.getMatcherQuality().size()); assertEquals(q2TargetName, m.getMatcherQuality().get(0).getTargetNamespace()); } } } @Test public void testProviderNamedSelectorSimple() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); EndpointGroup egResult1 = TenantUtils.findEndpointGroup(tenant, egId1); // should get c1 from eg1 and c2 from selector ProviderNamedSelector result = TenantUtils.findPns(egResult1, cnsName1); assertNotNull(result); assertEquals(cnsName1, result.getName()); List<Capability> capabilities = result.getCapability(); assertEquals(2, capabilities.size()); assertTrue(containsCapability(capabilities, c1)); assertTrue(containsCapability(capabilities, c2)); assertEquals(1, result.getContract().size()); assertTrue(result.getContract().contains(contractId1)); } @Test public void testProviderNamedSelectorInheritance() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); EndpointGroup egResult2 = TenantUtils.findEndpointGroup(tenant, egId2); // should get c1 from eg1 and c2 from eg1 selector, // and c3 from eg2 selector ProviderNamedSelector result = TenantUtils.findPns(egResult2, cnsName1); assertNotNull(result); assertEquals(cnsName1, result.getName()); List<Capability> capabilities = result.getCapability(); assertEquals(3, capabilities.size()); assertTrue(containsCapability(capabilities, c1)); assertTrue(containsCapability(capabilities, c2)); assertTrue(containsCapability(capabilities, c3)); assertEquals(2, result.getContract().size()); assertTrue(result.getContract().containsAll(ImmutableSet.of(contractId1, contractId2))); } @Test public void testClauseSimple() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); Contract cresult1 = TenantUtils.findContract(tenant, contractId1); Clause result = TenantUtils.findClause(cresult1, clauseName1); assertNotNull(result); assertEquals(clauseName1, result.getName()); // subject refs: subject1 from clause1 assertEquals(1, result.getSubjectRefs().size()); assertEquals(ImmutableSet.of(subject1), ImmutableSet.copyOf(result.getSubjectRefs())); assertNotNull(result.getProviderMatchers()); List<ConditionMatcher> cm = result.getProviderMatchers().getConditionMatcher(); assertEquals(1, cm.size()); assertEquals(1, cm.get(0).getCondition().size()); assertTrue(containsCondition(cm.get(0).getCondition(), cond1)); List<CapabilityMatcher> capm = ((GroupCapabilityConstraintCase) result.getProviderMatchers().getGroupIdentificationConstraints()) .getCapabilityMatcher(); assertEquals(1, capm.size()); assertEquals(1, capm.get(0).getMatcherCapability().size()); assertTrue(containsCapability(capm.get(0).getMatcherCapability(), c1)); assertNotNull(result.getConsumerMatchers()); cm = result.getConsumerMatchers().getConditionMatcher(); assertEquals(1, cm.size()); assertEquals(1, cm.get(0).getCondition().size()); assertTrue(containsCondition(cm.get(0).getCondition(), cond2)); List<RequirementMatcher> pm = ((GroupRequirementConstraintCase) result.getConsumerMatchers().getGroupIdentificationConstraints()) .getRequirementMatcher(); assertEquals(1, pm.size()); assertEquals(1, pm.get(0).getMatcherRequirement().size()); assertTrue(containsRequirement(pm.get(0).getMatcherRequirement(), r1)); } @Test public void testClauseInheritance() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); Contract cresult2 = TenantUtils.findContract(tenant, contractId2); Clause result = TenantUtils.findClause(cresult2, clauseName1); assertNotNull(result); assertEquals(clauseName1, result.getName()); // subject refs: subject1 from clause1, subject2 from clause2 assertEquals(2, result.getSubjectRefs().size()); assertEquals(ImmutableSet.of(subject1, subject2), ImmutableSet.copyOf(result.getSubjectRefs())); assertNotNull(result.getProviderMatchers()); List<ConditionMatcher> cm = result.getProviderMatchers().getConditionMatcher(); assertEquals(1, cm.size()); assertEquals(1, cm.get(0).getCondition().size()); assertTrue(containsCondition(cm.get(0).getCondition(), cond1)); List<CapabilityMatcher> capm = ((GroupCapabilityConstraintCase) result.getProviderMatchers().getGroupIdentificationConstraints()) .getCapabilityMatcher(); assertEquals(1, capm.size()); assertEquals(1, capm.get(0).getMatcherCapability().size()); assertTrue(containsCapability(capm.get(0).getMatcherCapability(), c1)); assertNotNull(result.getConsumerMatchers()); cm = result.getConsumerMatchers().getConditionMatcher(); assertEquals(1, cm.size()); assertEquals(cm_c2.getName(), cm.get(0).getName()); assertEquals(MatchType.All, cm.get(0).getMatchType()); assertEquals(0, cm.get(0).getCondition().size()); List<RequirementMatcher> pm = ((GroupRequirementConstraintCase) result.getConsumerMatchers().getGroupIdentificationConstraints()) .getRequirementMatcher(); assertEquals(1, pm.size()); assertEquals(2, pm.get(0).getMatcherRequirement().size()); assertTrue(containsRequirement(pm.get(0).getMatcherRequirement(), r1)); assertTrue(containsRequirement(pm.get(0).getMatcherRequirement(), r2)); } @Test public void testSubjectSimple() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); Contract result = TenantUtils.findContract(tenant, contractId1); assertNotNull(result); List<Subject> subjects = result.getSubject(); assertEquals(1, subjects.size()); assertEquals(s1.getName(), subjects.get(0).getName()); List<Rule> rules = subjects.get(0).getRule(); assertEquals(2, rules.size()); assertEquals(rule2.getName(), rules.get(0).getName()); assertEquals(rule1.getName(), rules.get(1).getName()); } @Test public void testSubjectInheritance() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(tenant1); Contract result = TenantUtils.findContract(tenant, contractId2); assertNotNull(result); List<Subject> subjects = result.getSubject(); assertEquals(2, subjects.size()); for (Subject s : subjects) { if (s1.getName().equals(s.getName())) { assertEquals(Integer.valueOf(4), s.getOrder()); List<Rule> rules = s.getRule(); assertEquals(4, rules.size()); assertEquals(rule4.getName(), rules.get(0).getName()); assertEquals(rule3.getName(), rules.get(1).getName()); assertEquals(rule2.getName(), rules.get(2).getName()); assertEquals(rule1.getName(), rules.get(3).getName()); } else if (s2.getName().equals(s.getName())) { assertEquals(0, s.getRule().size()); assertEquals(Integer.valueOf(5), s.getOrder()); } else { fail("extra subject?"); } } } @Test public void testMalformedPolicy() throws Exception { Tenant tenant = InheritanceUtils.resolveTenant(malformed); Contract contract = TenantUtils.findContract(tenant, cloop2Id); assertNotNull(contract); assertEquals(1, contract.getClause().size()); Clause clause = contract.getClause().get(0); assertEquals(1, clause.getConsumerMatchers().getConditionMatcher().size()); assertEquals(1, ((GroupRequirementConstraintCase) clause.getConsumerMatchers().getGroupIdentificationConstraints()) .getRequirementMatcher().size()); assertEquals(1, clause.getProviderMatchers().getConditionMatcher().size()); assertEquals(1, ((GroupCapabilityConstraintCase) clause.getProviderMatchers().getGroupIdentificationConstraints()) .getCapabilityMatcher().size()); assertEquals(2, contract.getSubject().size()); EndpointGroup eg = TenantUtils.findEndpointGroup(tenant, egloop2Id); assertNotNull(eg); assertEquals(1, eg.getConsumerNamedSelector().size()); assertEquals(1, eg.getConsumerTargetSelector().size()); assertEquals(1, eg.getProviderNamedSelector().size()); assertEquals(1, eg.getProviderTargetSelector().size()); } }