import javax.annotation.Nullable;
+import com.google.common.annotations.VisibleForTesting;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.CommonEndpointFields;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoint.locations.AddressEndpointLocation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoint.locations.ContainmentEndpointLocation;
return input.getTenantId();
}
};
- private static final Equivalence<AddressEndpoint> ADDR_EP_EQ = new Equivalence<AddressEndpoint>() {
+
+ @VisibleForTesting
+ static final Equivalence<AddressEndpoint> ADDR_EP_EQ = new Equivalence<AddressEndpoint>() {
@Override
protected boolean doEquivalent(AddressEndpoint a, AddressEndpoint b) {
}
};
- private static final Equivalence<ContainmentEndpoint> CONT_EP_EQ = new Equivalence<ContainmentEndpoint>() {
+ @VisibleForTesting
+ static final Equivalence<ContainmentEndpoint> CONT_EP_EQ = new Equivalence<ContainmentEndpoint>() {
@Override
protected boolean doEquivalent(ContainmentEndpoint a, ContainmentEndpoint b) {
}
};
- private static final Equivalence<AddressEndpointLocation> ADDR_EP_LOC_EQ =
+ @VisibleForTesting
+ static final Equivalence<AddressEndpointLocation> ADDR_EP_LOC_EQ =
new Equivalence<AddressEndpointLocation>() {
@Override
}
};
- private static final Equivalence<ContainmentEndpointLocation> CONT_EP_LOC_EQ =
+ @VisibleForTesting
+ static final Equivalence<ContainmentEndpointLocation> CONT_EP_LOC_EQ =
new Equivalence<ContainmentEndpointLocation>() {
@Override
}
};
- private static final Equivalence<ForwardingByTenant> FWD_BY_TENANT_EQ = new Equivalence<ForwardingByTenant>() {
+ @VisibleForTesting
+ static final Equivalence<ForwardingByTenant> FWD_BY_TENANT_EQ = new Equivalence<ForwardingByTenant>() {
@Override
protected boolean doEquivalent(ForwardingByTenant x, ForwardingByTenant y) {
import java.util.Set;
import java.util.concurrent.ConcurrentMap;
+import com.google.common.annotations.VisibleForTesting;
import org.opendaylight.groupbasedpolicy.dto.ConditionSet;
import org.opendaylight.groupbasedpolicy.dto.EgKey;
import org.opendaylight.groupbasedpolicy.dto.EndpointConstraint;
return policyRuleGroupWithEndpointConstraintsList;
}
- private static List<ResolvedRule> buildResolvedRules(List<Rule> rules, Tenant tenant) {
+ @VisibleForTesting
+ static List<ResolvedRule> buildResolvedRules(List<Rule> rules, Tenant tenant) {
if (rules == null) {
return null;
}
* endpoint groups and the conditions that can apply for for each endpoint in those groups.
*/
public static Table<EgKey, EgKey, Policy> resolvePolicy(Set<IndexedTenant> tenants) {
- return resolvePolicy(tenants, new HashMap<EgKey, Set<ConditionSet>>());
+ return resolvePolicy(tenants, new HashMap<>());
}
/**
--- /dev/null
+/*
+ * 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.renderer;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.google.common.collect.ImmutableList;
+import org.junit.Test;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainmentBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoint.locations.AddressEndpointLocation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoint.locations.AddressEndpointLocationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoint.locations.ContainmentEndpointLocationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.AbsoluteLocationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.child.endpoints.ChildEndpointBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.relative.location.RelativeLocationsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.relative.location.relative.locations.ExternalLocation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.relative.location.relative.locations.ExternalLocationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.relative.location.relative.locations.InternalLocation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.relative.location.relative.locations.InternalLocationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.parent.child.endpoints.parent.endpoint.choice.ParentEndpointCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.AddressType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.ContextType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.ForwardingByTenantBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.ForwardingContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.ForwardingContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.NetworkDomain;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.NetworkDomainBuilder;
+
+public class DtoEquivalenceUtilsTest {
+
+ @Test
+ public void testEqualsAddrEpLocByAddrEpKey() {
+ Map<AddressEndpointKey, AddressEndpointLocation> o1 = new HashMap<>();
+ Map<AddressEndpointKey, AddressEndpointLocation> o1_equal = new HashMap<>();
+ AddressEndpoint ep1_1 = new AddressEndpointBuilder().setContextType(ContextType.class)
+ .setContextId(new ContextId("ctx1"))
+ .setAddressType(AddressType.class)
+ .setAddress("adr1_1")
+ .build();
+ AddressEndpointLocation loc1_1 = new AddressEndpointLocationBuilder().setContextType(ep1_1.getContextType())
+ .setContextId(ep1_1.getContextId())
+ .setAddressType(ep1_1.getAddressType())
+ .setAddress(ep1_1.getAddress())
+ .build();
+ o1.put(ep1_1.getKey(), loc1_1);
+ o1_equal.put(ep1_1.getKey(), loc1_1);
+
+ Map<AddressEndpointKey, AddressEndpointLocation> o2 = new HashMap<>();
+ AddressEndpoint ep2_1 = new AddressEndpointBuilder().setContextType(ContextType.class)
+ .setContextId(new ContextId("ctx2"))
+ .setAddressType(AddressType.class)
+ .setAddress("adr2_1")
+ .build();
+ AddressEndpointLocation loc2_1 = new AddressEndpointLocationBuilder().setContextType(ep2_1.getContextType())
+ .setContextId(ep2_1.getContextId())
+ .setAddressType(ep2_1.getAddressType())
+ .setAddress(ep2_1.getAddress())
+ .build();
+ AddressEndpoint ep2_2 = new AddressEndpointBuilder().setContextType(ContextType.class)
+ .setContextId(new ContextId("ctx2"))
+ .setAddressType(AddressType.class)
+ .setAddress("adr2_2")
+ .build();
+ AddressEndpointLocation loc2_2 = new AddressEndpointLocationBuilder().setContextType(ep2_2.getContextType())
+ .setContextId(ep2_2.getContextId())
+ .setAddressType(ep2_2.getAddressType())
+ .setAddress(ep2_2.getAddress())
+ .build();
+ o2.put(ep2_1.getKey(), loc2_1);
+ o2.put(ep2_2.getKey(), loc2_2);
+
+ Map<AddressEndpointKey, AddressEndpointLocation> o3 = new HashMap<>();
+ AddressEndpoint ep3_1 = new AddressEndpointBuilder().setContextType(ContextType.class)
+ .setContextId(new ContextId("ctx3"))
+ .setAddressType(AddressType.class)
+ .setAddress("adr3_1")
+ .build();
+ AddressEndpointLocation loc3_1 = new AddressEndpointLocationBuilder().setContextType(ep3_1.getContextType())
+ .setContextId(ep3_1.getContextId())
+ .setAddressType(ep3_1.getAddressType())
+ .setAddress(ep3_1.getAddress())
+ .build();
+ o3.put(ep3_1.getKey(), loc3_1);
+
+ assertFalse(DtoEquivalenceUtils.equalsAddrEpLocByAddrEpKey(null, o2));
+ assertFalse(DtoEquivalenceUtils.equalsAddrEpLocByAddrEpKey(o1, null));
+ assertTrue(DtoEquivalenceUtils.equalsAddrEpLocByAddrEpKey(null, null));
+ assertTrue(DtoEquivalenceUtils.equalsAddrEpLocByAddrEpKey(o1, o1));
+ assertTrue(DtoEquivalenceUtils.equalsAddrEpLocByAddrEpKey(o1, o1_equal));
+ assertFalse(DtoEquivalenceUtils.equalsAddrEpLocByAddrEpKey(o1, o2));
+ assertFalse(DtoEquivalenceUtils.equalsAddrEpLocByAddrEpKey(o1, o3));
+ }
+
+ @Test
+ public void test_ADDR_EP_EQ() {
+ AddressEndpointBuilder epA = new AddressEndpointBuilder().setContextType(ContextType.class)
+ .setContextId(new ContextId("ctx1"))
+ .setAddressType(AddressType.class)
+ .setAddress("adr1_1");
+ AddressEndpointBuilder epA_parent = new AddressEndpointBuilder(epA.build())
+ .setParentEndpointChoice(new ParentEndpointCaseBuilder().build());
+ AddressEndpointBuilder epA_child = new AddressEndpointBuilder(epA_parent.build())
+ .setChildEndpoint(ImmutableList.of(new ChildEndpointBuilder().build()));
+ AddressEndpointBuilder epA_networkContainment = new AddressEndpointBuilder(epA_child.build())
+ .setNetworkContainment(new NetworkContainmentBuilder().build());
+ AddressEndpointBuilder epA_tenant =
+ new AddressEndpointBuilder(epA_networkContainment.build()).setTenant(new TenantId("tenantId"));
+ AddressEndpointBuilder epA_timestamp = new AddressEndpointBuilder(epA_tenant.build()).setTimestamp(1L);
+ AddressEndpointBuilder epA_condition = new AddressEndpointBuilder(epA_timestamp.build())
+ .setCondition(ImmutableList.of(new ConditionName("conditionName")));
+ AddressEndpointBuilder epA_epg = new AddressEndpointBuilder(epA_condition.build())
+ .setEndpointGroup(ImmutableList.of(new EndpointGroupId("epgId")));
+ AddressEndpointBuilder epB = new AddressEndpointBuilder().setContextType(ContextType.class)
+ .setContextId(new ContextId("ctx2"))
+ .setAddressType(AddressType.class)
+ .setAddress("adr2_1");
+
+ assertTrue(DtoEquivalenceUtils.ADDR_EP_EQ.equivalent(epA.build(),
+ new AddressEndpointBuilder(epA.build()).build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_EQ.equivalent(epA.build(), epA_parent.build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_EQ.equivalent(epA_parent.build(), epA_child.build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_EQ.equivalent(epA_child.build(), epA_networkContainment.build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_EQ.equivalent(epA_networkContainment.build(), epA_tenant.build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_EQ.equivalent(epA_tenant.build(), epA_timestamp.build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_EQ.equivalent(epA_timestamp.build(), epA_condition.build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_EQ.equivalent(epA_condition.build(), epA_epg.build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_EQ.equivalent(epA.build(), epB.build()));
+ }
+
+ @Test
+ public void test_CONT_EP_EQ() {
+ ContainmentEndpointBuilder epA =
+ new ContainmentEndpointBuilder().setContextType(ContextType.class).setContextId(new ContextId("ctx1"));
+ ContainmentEndpointBuilder epA_child = new ContainmentEndpointBuilder(epA.build())
+ .setChildEndpoint(ImmutableList.of(new ChildEndpointBuilder().build()));
+ ContainmentEndpointBuilder epA_networkContainment = new ContainmentEndpointBuilder(epA_child.build())
+ .setNetworkContainment(new NetworkContainmentBuilder().build());
+ ContainmentEndpointBuilder epA_tenant =
+ new ContainmentEndpointBuilder(epA_networkContainment.build()).setTenant(new TenantId("tenantId"));
+ ContainmentEndpointBuilder epA_timestamp = new ContainmentEndpointBuilder(epA_tenant.build()).setTimestamp(1L);
+ ContainmentEndpointBuilder epA_condition = new ContainmentEndpointBuilder(epA_timestamp.build())
+ .setCondition(ImmutableList.of(new ConditionName("conditionName")));
+ ContainmentEndpointBuilder epA_epg = new ContainmentEndpointBuilder(epA_condition.build())
+ .setEndpointGroup(ImmutableList.of(new EndpointGroupId("epgId")));
+ ContainmentEndpointBuilder epB =
+ new ContainmentEndpointBuilder().setContextType(ContextType.class).setContextId(new ContextId("ctx2"));
+
+ assertTrue(DtoEquivalenceUtils.CONT_EP_EQ.equivalent(epA.build(),
+ new ContainmentEndpointBuilder(epA.build()).build()));
+ assertFalse(DtoEquivalenceUtils.CONT_EP_EQ.equivalent(epA.build(), epA_child.build()));
+ assertFalse(DtoEquivalenceUtils.CONT_EP_EQ.equivalent(epA_child.build(), epA_networkContainment.build()));
+ assertFalse(DtoEquivalenceUtils.CONT_EP_EQ.equivalent(epA_networkContainment.build(), epA_tenant.build()));
+ assertFalse(DtoEquivalenceUtils.CONT_EP_EQ.equivalent(epA_tenant.build(), epA_timestamp.build()));
+ assertFalse(DtoEquivalenceUtils.CONT_EP_EQ.equivalent(epA_timestamp.build(), epA_condition.build()));
+ assertFalse(DtoEquivalenceUtils.CONT_EP_EQ.equivalent(epA_condition.build(), epA_epg.build()));
+ assertFalse(DtoEquivalenceUtils.CONT_EP_EQ.equivalent(epA.build(), epB.build()));
+ }
+
+ @Test
+ public void test_ADDR_EP_LOC_EQ() {
+ List<ExternalLocation> externalLocations =
+ ImmutableList.of(new ExternalLocationBuilder().setExternalNode("extNode").build());
+ List<InternalLocation> internalLocations =
+ ImmutableList.of(new InternalLocationBuilder().setInternalNode(null).build());
+ RelativeLocationsBuilder relativeLocationsBuilder_ext =
+ new RelativeLocationsBuilder().setExternalLocation(externalLocations);
+ RelativeLocationsBuilder relativeLocationsBuilder_int =
+ new RelativeLocationsBuilder().setInternalLocation(internalLocations);
+ RelativeLocationsBuilder relativeLocationsBuilder_both =
+ new RelativeLocationsBuilder(relativeLocationsBuilder_ext.build())
+ .setInternalLocation(internalLocations);
+
+ AddressEndpointLocationBuilder locA = new AddressEndpointLocationBuilder().setContextType(ContextType.class)
+ .setContextId(new ContextId("ctx1"))
+ .setAddressType(AddressType.class)
+ .setAddress("adr1_1");
+ AddressEndpointLocationBuilder locA_absLoc = new AddressEndpointLocationBuilder(locA.build())
+ .setAbsoluteLocation(new AbsoluteLocationBuilder().build());
+ AddressEndpointLocationBuilder locA_extLoc = new AddressEndpointLocationBuilder(locA_absLoc.build())
+ .setRelativeLocations(relativeLocationsBuilder_ext.build());
+ AddressEndpointLocationBuilder locA_intLoc = new AddressEndpointLocationBuilder(locA_absLoc.build())
+ .setRelativeLocations(relativeLocationsBuilder_int.build());
+ AddressEndpointLocationBuilder locA_bothLoc = new AddressEndpointLocationBuilder(locA_absLoc.build())
+ .setRelativeLocations(relativeLocationsBuilder_both.build());
+ AddressEndpointLocationBuilder locB = new AddressEndpointLocationBuilder().setContextType(ContextType.class)
+ .setContextId(new ContextId("ctx2"))
+ .setAddressType(AddressType.class)
+ .setAddress("adr2_1");
+
+ assertTrue(DtoEquivalenceUtils.ADDR_EP_LOC_EQ.equivalent(locA.build(),
+ new AddressEndpointLocationBuilder(locA.build()).build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_LOC_EQ.equivalent(locA.build(), locA_absLoc.build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_LOC_EQ.equivalent(locA_absLoc.build(), locA_extLoc.build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_LOC_EQ.equivalent(locA_extLoc.build(), locA_intLoc.build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_LOC_EQ.equivalent(locA_extLoc.build(), locA_bothLoc.build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_LOC_EQ.equivalent(locA_intLoc.build(), locA_bothLoc.build()));
+ assertTrue(DtoEquivalenceUtils.ADDR_EP_LOC_EQ.equivalent(locA_bothLoc.build(),
+ new AddressEndpointLocationBuilder(locA_bothLoc.build()).build()));
+ assertFalse(DtoEquivalenceUtils.ADDR_EP_LOC_EQ.equivalent(locA.build(), locB.build()));
+ }
+
+ @Test
+ public void test_CONT_EP_LOC_EQ() {
+ List<ExternalLocation> externalLocations =
+ ImmutableList.of(new ExternalLocationBuilder().setExternalNode("extNode").build());
+ List<InternalLocation> internalLocations =
+ ImmutableList.of(new InternalLocationBuilder().setInternalNode(null).build());
+ RelativeLocationsBuilder relativeLocationsBuilder_ext =
+ new RelativeLocationsBuilder().setExternalLocation(externalLocations);
+ RelativeLocationsBuilder relativeLocationsBuilder_int =
+ new RelativeLocationsBuilder().setInternalLocation(internalLocations);
+ RelativeLocationsBuilder relativeLocationsBuilder_both =
+ new RelativeLocationsBuilder(relativeLocationsBuilder_ext.build())
+ .setInternalLocation(internalLocations);
+
+ ContainmentEndpointLocationBuilder locA = new ContainmentEndpointLocationBuilder()
+ .setContextType(ContextType.class).setContextId(new ContextId("ctx1"));
+ ContainmentEndpointLocationBuilder locA_extLoc = new ContainmentEndpointLocationBuilder(locA.build())
+ .setRelativeLocations(relativeLocationsBuilder_ext.build());
+ ContainmentEndpointLocationBuilder locA_intLoc = new ContainmentEndpointLocationBuilder(locA.build())
+ .setRelativeLocations(relativeLocationsBuilder_int.build());
+ ContainmentEndpointLocationBuilder locA_bothLoc = new ContainmentEndpointLocationBuilder(locA.build())
+ .setRelativeLocations(relativeLocationsBuilder_both.build());
+ ContainmentEndpointLocationBuilder locB = new ContainmentEndpointLocationBuilder()
+ .setContextType(ContextType.class).setContextId(new ContextId("ctx2"));
+
+ assertTrue(DtoEquivalenceUtils.CONT_EP_LOC_EQ.equivalent(locA.build(),
+ new ContainmentEndpointLocationBuilder(locA.build()).build()));
+ assertFalse(DtoEquivalenceUtils.CONT_EP_LOC_EQ.equivalent(locA.build(), locA_extLoc.build()));
+ assertFalse(DtoEquivalenceUtils.CONT_EP_LOC_EQ.equivalent(locA_extLoc.build(), locA_intLoc.build()));
+ assertFalse(DtoEquivalenceUtils.CONT_EP_LOC_EQ.equivalent(locA_extLoc.build(), locA_bothLoc.build()));
+ assertFalse(DtoEquivalenceUtils.CONT_EP_LOC_EQ.equivalent(locA_intLoc.build(), locA_bothLoc.build()));
+ assertTrue(DtoEquivalenceUtils.CONT_EP_LOC_EQ.equivalent(locA_bothLoc.build(),
+ new ContainmentEndpointLocationBuilder(locA_bothLoc.build()).build()));
+ assertFalse(DtoEquivalenceUtils.CONT_EP_LOC_EQ.equivalent(locA.build(), locB.build()));
+ }
+
+ @Test
+ public void test_FWD_BY_TENANT_EQ() {
+ ForwardingContext fctx = new ForwardingContextBuilder().setContextId(new ContextId("contextId")).build();
+ NetworkDomain networkDomain =
+ new NetworkDomainBuilder().setNetworkDomainId(new NetworkDomainId("networkDomainId")).build();
+
+ ForwardingByTenantBuilder fwA = new ForwardingByTenantBuilder().setTenantId(new TenantId("tenantA"));
+ ForwardingByTenantBuilder fwA_fctx =
+ new ForwardingByTenantBuilder(fwA.build()).setForwardingContext(ImmutableList.of(fctx));
+ ForwardingByTenantBuilder fwA_network =
+ new ForwardingByTenantBuilder(fwA_fctx.build()).setNetworkDomain(ImmutableList.of(networkDomain));
+ ForwardingByTenantBuilder fwB = new ForwardingByTenantBuilder().setTenantId(new TenantId("tenantB"));
+
+ assertTrue(DtoEquivalenceUtils.FWD_BY_TENANT_EQ.equivalent(fwA.build(),
+ new ForwardingByTenantBuilder(fwA.build()).build()));
+ assertFalse(DtoEquivalenceUtils.FWD_BY_TENANT_EQ.equivalent(fwA.build(), fwA_fctx.build()));
+ assertFalse(DtoEquivalenceUtils.FWD_BY_TENANT_EQ.equivalent(fwA_fctx.build(), fwA_network.build()));
+ assertFalse(DtoEquivalenceUtils.FWD_BY_TENANT_EQ.equivalent(fwA.build(), fwB.build()));
+ }
+
+}
// Labels
// ******
- Quality q1 = new QualityBuilder().setName(new QualityName("q1")).build();
- Quality q1Include = new QualityBuilder(q1).setInclusionRule(InclusionRule.Include).build();
- Quality q1Exclude = new QualityBuilder(q1).setInclusionRule(InclusionRule.Exclude).build();
- Quality q2 = new QualityBuilder().setName(new QualityName("q2")).build();
- Quality q2Exclude =
+ 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();
- Quality q3 = new QualityBuilder().setName(new QualityName("q3")).build();
+ private Quality q3 = new QualityBuilder().setName(new QualityName("q3")).build();
- Requirement r1 = new RequirementBuilder().setName(new RequirementName("r1")).build();
- Requirement r2 = new RequirementBuilder().setName(new RequirementName("r2")).build();
- Requirement r1exclude =
+ 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();
- Requirement r3 = new RequirementBuilder().setName(new RequirementName("r3")).build();
+ private Requirement r3 = new RequirementBuilder().setName(new RequirementName("r3")).build();
- Capability c1 = new CapabilityBuilder().setName(new CapabilityName("c1")).build();
- Capability c2 = new CapabilityBuilder().setName(new CapabilityName("c2")).build();
- Capability c1exclude =
+ 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();
- Capability c3 = new CapabilityBuilder().setName(new CapabilityName("c3")).build();
+ private Capability c3 = new CapabilityBuilder().setName(new CapabilityName("c3")).build();
- Condition cond1 = new ConditionBuilder().setName(new ConditionName("cond1")).build();
- Condition cond2 = new ConditionBuilder().setName(new ConditionName("cond2")).build();
- Condition cond2exlude =
+ 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
// *********
- TargetName q2TargetName = new TargetName("q2");
- Target q2Target = new TargetBuilder().setName(q2TargetName).setQuality(ImmutableList.of(q2)).build();
+ private TargetName q2TargetName = new TargetName("q2");
+ private Target q2Target = new TargetBuilder().setName(q2TargetName).setQuality(ImmutableList.of(q2)).build();
- TargetName q1ExcludeTargetName = new TargetName("q1_exclude");
- Target q1ExcludeTarget =
+ private TargetName q1ExcludeTargetName = new TargetName("q1_exclude");
+ private Target q1ExcludeTarget =
new TargetBuilder().setName(q1ExcludeTargetName).setQuality(ImmutableList.of(q1Exclude, q2)).build();
- TargetName q1IncludeTargetName = new TargetName("q1_include");
- Target q1IncludeTarget =
+ private TargetName q1IncludeTargetName = new TargetName("q1_include");
+ private Target q1IncludeTarget =
new TargetBuilder().setName(q1IncludeTargetName).setQuality(ImmutableList.of(q1Include)).build();
- Target q2PlusTarget = new TargetBuilder().setName(q2TargetName).setQuality(ImmutableList.of(q3)).build();
+ private Target q2PlusTarget = new TargetBuilder().setName(q2TargetName).setQuality(ImmutableList.of(q3)).build();
- SubjectName subject1 = new SubjectName("subject1");
- SubjectName subject2 = new SubjectName("subject2");
- SubjectName subject3 = new SubjectName("subject3");
+ private SubjectName subject1 = new SubjectName("subject1");
+ private SubjectName subject2 = new SubjectName("subject2");
+ private SubjectName subject3 = new SubjectName("subject3");
- RequirementMatcher rm_r1 = new RequirementMatcherBuilder().setName(new RequirementMatcherName("rm_r1"))
+ private RequirementMatcher rm_r1 = new RequirementMatcherBuilder().setName(new RequirementMatcherName("rm_r1"))
.setMatcherRequirement(ImmutableList.of(new MatcherRequirementBuilder(r1).build()))
.build();
- RequirementMatcher rm_r1_plus = new RequirementMatcherBuilder().setName(new RequirementMatcherName("rm_r1"))
+ private RequirementMatcher rm_r1_plus = new RequirementMatcherBuilder().setName(new RequirementMatcherName("rm_r1"))
.setMatchType(MatchType.All)
.setMatcherRequirement(ImmutableList.of(new MatcherRequirementBuilder(r2).build()))
.build();
- CapabilityMatcher capm_c1 = new CapabilityMatcherBuilder().setName(new CapabilityMatcherName("capm_c1"))
+ private CapabilityMatcher capm_c1 = new CapabilityMatcherBuilder().setName(new CapabilityMatcherName("capm_c1"))
.setMatcherCapability(ImmutableList.of(new MatcherCapabilityBuilder(c1).build()))
.build();
- ConditionMatcher cm_c1 = new ConditionMatcherBuilder().setName(new ConditionMatcherName("cm_c1"))
+ private ConditionMatcher cm_c1 = new ConditionMatcherBuilder().setName(new ConditionMatcherName("cm_c1"))
.setCondition(ImmutableList.of(cond1))
.build();
- ConditionMatcher cm_c2 = new ConditionMatcherBuilder().setName(new ConditionMatcherName("cm_c2"))
+ private ConditionMatcher cm_c2 = new ConditionMatcherBuilder().setName(new ConditionMatcherName("cm_c2"))
.setMatchType(MatchType.All)
.setCondition(ImmutableList.of(cond2))
.build();
- ConditionMatcher cm_c2_plus = new ConditionMatcherBuilder().setName(new ConditionMatcherName("cm_c2"))
+ private ConditionMatcher cm_c2_plus = new ConditionMatcherBuilder().setName(new ConditionMatcherName("cm_c2"))
.setCondition(ImmutableList.of(cond2exlude))
.build();
- ClauseName clauseName1 = new ClauseName("clauseName1");
- Clause clause1 =
+ private ClauseName clauseName1 = new ClauseName("clauseName1");
+ private Clause clause1 =
new ClauseBuilder().setName(clauseName1)
.setSubjectRefs(ImmutableList.of(subject1))
.setProviderMatchers(new ProviderMatchersBuilder()
.build())
.build();
- Clause clause1withConsMatcher = new ClauseBuilder().setName(clauseName1)
+ private Clause clause1withConsMatcher = new ClauseBuilder().setName(clauseName1)
.setSubjectRefs(ImmutableList.of(subject2))
.setConsumerMatchers(new ConsumerMatchersBuilder()
.setGroupIdentificationConstraints(new GroupRequirementConstraintCaseBuilder()
.build())
.build();
- Clause clause1withProvMatcher =
+ private Clause clause1withProvMatcher =
new ClauseBuilder().setName(clauseName1)
.setSubjectRefs(ImmutableList.of(subject3))
.setProviderMatchers(new ProviderMatchersBuilder()
.build())
.build();
- ActionRef a1 = new ActionRefBuilder().setName(new ActionName("a1")).build();
- ClassifierRef cr1 = new ClassifierRefBuilder().setName(new ClassifierName("cr1")).build();
- Rule rule1 = new RuleBuilder().setName(new RuleName("r1"))
+ 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();
- Rule rule2 = new RuleBuilder().setName(new RuleName("r2")).setOrder(5).build();
- Rule rule3 = new RuleBuilder().setName(new RuleName("r3")).setOrder(7).build();
- Rule rule4 = new RuleBuilder().setName(new RuleName("r4")).setOrder(1).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();
- Subject s1 = new SubjectBuilder().setName(new SubjectName("s1")).setRule(ImmutableList.of(rule1, rule2)).build();
- Subject s1_plus =
+ 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();
- Subject s2 = new SubjectBuilder().setName(new SubjectName("s2")).setOrder(5).build();
- Subject s2_plus = new SubjectBuilder().setName(new SubjectName(s2.getName())).setOrder(6).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();
- ContractId contractId1 = new ContractId("e7e6804f-7fcb-46cf-9bc6-abfec0896d95");
- Contract contract1 = new ContractBuilder().setId(contractId1)
+ 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();
- ContractId contractId2 = new ContractId("3f56ae44-d1e4-4617-95af-c809dfc50149");
- Contract contract2 = new ContractBuilder().setId(contractId2)
+ 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();
- ContractId contractId3 = new ContractId("38d52ec1-301b-453a-88a6-3ffa777d7795");
- Contract contract3 = new ContractBuilder().setId(contractId3)
+ 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();
- ContractId cloop2Id = new ContractId("89700928-7316-4216-a853-a7ea3934b8f4");
- Contract cloop1 = new ContractBuilder().setId(new ContractId("56bbce36-e60b-473d-92de-bb63b5a6dbb5"))
+ 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();
- Contract cloop2 = new ContractBuilder().setId(cloop2Id).setParent(cloop1.getId()).build();
- ContractId cselfloopid = new ContractId("63edead2-d6f1-4acf-9f78-831595d194ee");
- Contract cselfloop = new ContractBuilder().setId(cselfloopid).setParent(cselfloopid).build();
- Contract corphan = new ContractBuilder().setId(new ContractId("f72c15f3-76ab-4c7e-a817-eb5f6efcb654"))
+ 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
// ***************
- SelectorName cnsName1 = new SelectorName("cns1");
- ConsumerNamedSelector cns1 = new ConsumerNamedSelectorBuilder().setName(cnsName1)
+ private SelectorName cnsName1 = new SelectorName("cns1");
+ private ConsumerNamedSelector cns1 = new ConsumerNamedSelectorBuilder().setName(cnsName1)
.setContract(ImmutableList.of(contractId1))
.setRequirement(ImmutableList.of(r2))
.build();
- ConsumerNamedSelector cns1_plus = new ConsumerNamedSelectorBuilder().setName(cnsName1)
+ private ConsumerNamedSelector cns1_plus = new ConsumerNamedSelectorBuilder().setName(cnsName1)
.setContract(ImmutableList.of(contractId2))
.setRequirement(ImmutableList.of(r3))
.build();
- ProviderNamedSelector pns1 = new ProviderNamedSelectorBuilder().setName(cnsName1)
+ private ProviderNamedSelector pns1 = new ProviderNamedSelectorBuilder().setName(cnsName1)
.setContract(ImmutableList.of(contractId1))
.setCapability(ImmutableList.of(c2))
.build();
- ProviderNamedSelector pns1_plus = new ProviderNamedSelectorBuilder().setName(cnsName1)
+ private ProviderNamedSelector pns1_plus = new ProviderNamedSelectorBuilder().setName(cnsName1)
.setContract(ImmutableList.of(contractId2))
.setCapability(ImmutableList.of(c3))
.build();
- QualityMatcher qm_q1_all = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q1_all"))
+ private QualityMatcher qm_q1_all = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q1_all"))
.setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q1).build()))
.setMatchType(MatchType.All)
.build();
- QualityMatcher qm_q1_any = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q1_any"))
+ private QualityMatcher qm_q1_any = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q1_any"))
.setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q1).build()))
.setMatchType(MatchType.Any)
.build();
- QualityMatcher qm_q2q3_any = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q2q3_any"))
+ 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();
- QualityMatcher qm_q2tq2 =
+ private QualityMatcher qm_q2tq2 =
new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q2tq2"))
.setMatcherQuality(
ImmutableList.of(new MatcherQualityBuilder(q2).setTargetNamespace(q2TargetName).build()))
.setMatchType(MatchType.Any)
.build();
- QualityMatcher qm_q2q3_plus =
+ 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();
- QualityMatcher qm_q1_plus = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q1_any")).build();
+ private QualityMatcher qm_q1_plus = new QualityMatcherBuilder().setName(new QualityMatcherName("qm_q1_any")).build();
- SelectorName ctsName1 = new SelectorName("cts1");
- ConsumerTargetSelector cts1 = new ConsumerTargetSelectorBuilder().setName(ctsName1)
+ 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();
- SelectorName ctsName2 = new SelectorName("cts2");
- ConsumerTargetSelector cts2 = new ConsumerTargetSelectorBuilder().setName(ctsName2)
+ 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();
- ConsumerTargetSelector cts1_plus = new ConsumerTargetSelectorBuilder().setName(ctsName1)
+ 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();
- ConsumerTargetSelector cts2_plus = new ConsumerTargetSelectorBuilder().setName(ctsName2)
+ private ConsumerTargetSelector cts2_plus = new ConsumerTargetSelectorBuilder().setName(ctsName2)
.setQualityMatcher(ImmutableList.of(qm_q2tq2, qm_q2q3_plus))
.setRequirement(ImmutableList.of(r3))
.build();
- SelectorName ptsName1 = new SelectorName("pts1");
- ProviderTargetSelector pts1 = new ProviderTargetSelectorBuilder().setName(ptsName1)
+ 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();
- SelectorName ptsName2 = new SelectorName("pts2");
- ProviderTargetSelector pts2 = new ProviderTargetSelectorBuilder().setName(ptsName2)
+ 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();
- ProviderTargetSelector pts1_plus = new ProviderTargetSelectorBuilder().setName(ptsName1)
+ 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();
- ProviderTargetSelector pts2_plus = new ProviderTargetSelectorBuilder().setName(ptsName2)
+ private ProviderTargetSelector pts2_plus = new ProviderTargetSelectorBuilder().setName(ptsName2)
.setQualityMatcher(ImmutableList.of(qm_q2tq2, qm_q2q3_plus))
.setCapability(ImmutableList.of(c3))
.build();
- EndpointGroupId egId1 = new EndpointGroupId("c0e5edfb-02d2-412b-8757-a77b3daeb5d4");
- EndpointGroup eg1 = new EndpointGroupBuilder().setId(egId1)
+ 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))
.setProviderTargetSelector(ImmutableList.of(pts1, pts2))
.setProviderNamedSelector(ImmutableList.of(pns1))
.build();
- EndpointGroupId egId2 = new EndpointGroupId("60483327-ad76-43dd-b3bf-54ffb73ef4b8");
- EndpointGroup eg2 = new EndpointGroupBuilder().setId(egId2)
+ 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))
.setProviderNamedSelector(ImmutableList.of(pns1_plus))
.build();
- EndpointGroupId egloop2Id = new EndpointGroupId("cb5be574-9836-4053-8ec4-4b4a43331d65");
- EndpointGroup egloop1 = new EndpointGroupBuilder()
+ 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))
.setConsumerTargetSelector(ImmutableList.of(cts1))
.setProviderTargetSelector(ImmutableList.of(pts1))
.build();
- EndpointGroup egloop2 = new EndpointGroupBuilder().setId(egloop2Id).setParent(egloop1.getId()).build();
- EndpointGroupId egselfloopid = new EndpointGroupId("996ad104-f852-4d77-96cf-cddde5cebb84");
- EndpointGroup egselfloop = new EndpointGroupBuilder().setId(egselfloopid).setParent(egselfloopid).build();
- EndpointGroup egorphan =
+ 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
// *******
- TenantId tenantId1 = new TenantId("0ac5d219-979c-4cca-8f90-83b69bc414ad");
- Tenant tenant1 = new TenantBuilder().setId(tenantId1)
+ 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();
- Tenant malformed = new TenantBuilder().setId(new TenantId("b26e6b18-8e74-4062-a7d2-e8437132030d"))
+ 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())
// Other test state
// ****************
- public boolean containsQuality(List<? extends QualityBase> qualities, QualityBase quality) {
+ private boolean containsQuality(List<? extends QualityBase> qualities, QualityBase quality) {
for (QualityBase q : qualities) {
if (q.getName().equals(quality.getName()))
return true;
--- /dev/null
+/*
+ * 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());
+ }
+
+}