/*
* 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.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.opendaylight.groupbasedpolicy.util.MatcherUtils;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.QualityName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RequirementName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TargetName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Matcher.MatchType;
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.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.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.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.MatcherRequirement;
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.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.MatcherCapability;
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.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 com.google.common.collect.ImmutableList;
public class MatcherUtilsTest {
@Test
public void testApplyQualityMatcher() throws Exception {
Quality q1 = new QualityBuilder().setName(new QualityName("q1")).build();
Quality q2 = new QualityBuilder().setName(new QualityName("q2")).build();
Quality q3 = new QualityBuilder().setName(new QualityName("q3")).build();
Quality q4 = new QualityBuilder().setName(new QualityName("q4")).build();
Target t1 = new TargetBuilder()
.setName(new TargetName("t1"))
.setQuality(ImmutableList.of(q1, q2))
.build();
Target t2 = new TargetBuilder()
.setName(new TargetName("t2"))
.setQuality(ImmutableList.of(q3, q4))
.build();
MatcherQuality mq1 = new MatcherQualityBuilder(q1).build();
MatcherQuality mq2 = new MatcherQualityBuilder(q2).build();
MatcherQuality mq1_ns1 = new MatcherQualityBuilder(q1)
.setTargetNamespace(t1.getName())
.build();
MatcherQuality mq1_ns2 = new MatcherQualityBuilder(q1)
.setTargetNamespace(t2.getName())
.build();
MatcherQuality mq3 = new MatcherQualityBuilder(q3).build();
QualityMatcher qm = new QualityMatcherBuilder()
.setMatchType(MatchType.All)
.setMatcherQuality(ImmutableList.of(mq1, mq1_ns1))
.build();
assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
qm = new QualityMatcherBuilder()
.setMatcherQuality(ImmutableList.of(mq1_ns2))
.build();
assertFalse(MatcherUtils.applyQualityMatcher(qm, t1));
assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
qm = new QualityMatcherBuilder()
.setMatchType(MatchType.Any)
.setMatcherQuality(ImmutableList.of(mq1, mq3))
.build();
assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
assertTrue(MatcherUtils.applyQualityMatcher(qm, t2));
qm = new QualityMatcherBuilder()
.setMatchType(MatchType.Any)
.setMatcherQuality(ImmutableList.of(mq1, mq2))
.build();
assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
qm = new QualityMatcherBuilder()
.setMatchType(MatchType.None)
.setMatcherQuality(ImmutableList.of(mq3, mq1_ns2))
.build();
assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
qm = new QualityMatcherBuilder().build();
assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
qm = new QualityMatcherBuilder()
.setMatchType(MatchType.Any)
.build();
assertFalse(MatcherUtils.applyQualityMatcher(qm, t1));
}
@Test
public void testApplyCapMatcher() throws Exception {
Capability q1 = new CapabilityBuilder().setName(new CapabilityName("q1")).build();
Capability q2 = new CapabilityBuilder().setName(new CapabilityName("q2")).build();
Capability q3 = new CapabilityBuilder().setName(new CapabilityName("q3")).build();
Capability q4 = new CapabilityBuilder().setName(new CapabilityName("q4")).build();
ProviderTargetSelector t1 = new ProviderTargetSelectorBuilder()
.setName(new SelectorName("t1"))
.setCapability(ImmutableList.of(q1, q2))
.build();
ProviderNamedSelector t2 = new ProviderNamedSelectorBuilder()
.setName(new SelectorName("t2"))
.setCapability(ImmutableList.of(q3, q4))
.build();
MatcherCapability mq1 = new MatcherCapabilityBuilder(q1).build();
MatcherCapability mq2 = new MatcherCapabilityBuilder(q2).build();
MatcherCapability mq1_ns1 = new MatcherCapabilityBuilder(q1)
.setSelectorNamespace(t1.getName())
.build();
MatcherCapability mq1_ns2 = new MatcherCapabilityBuilder(q1)
.setSelectorNamespace(t2.getName())
.build();
MatcherCapability mq3 = new MatcherCapabilityBuilder(q3).build();
CapabilityMatcher qm = new CapabilityMatcherBuilder()
.setMatchType(MatchType.All)
.setMatcherCapability(ImmutableList.of(mq1, mq1_ns1))
.build();
assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
qm = new CapabilityMatcherBuilder()
.setMatcherCapability(ImmutableList.of(mq1_ns2))
.build();
assertFalse(MatcherUtils.applyCapMatcher(qm, t1));
assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
qm = new CapabilityMatcherBuilder()
.setMatchType(MatchType.Any)
.setMatcherCapability(ImmutableList.of(mq1, mq3))
.build();
assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
assertTrue(MatcherUtils.applyCapMatcher(qm, t2));
qm = new CapabilityMatcherBuilder()
.setMatchType(MatchType.Any)
.setMatcherCapability(ImmutableList.of(mq1, mq2))
.build();
assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
qm = new CapabilityMatcherBuilder()
.setMatchType(MatchType.None)
.setMatcherCapability(ImmutableList.of(mq3, mq1_ns2))
.build();
assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
qm = new CapabilityMatcherBuilder().build();
assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
qm = new CapabilityMatcherBuilder()
.setMatchType(MatchType.Any)
.build();
assertFalse(MatcherUtils.applyCapMatcher(qm, t1));
}
@Test
public void testApplyReqMatcher() throws Exception {
Requirement q1 = new RequirementBuilder().setName(new RequirementName("q1")).build();
Requirement q2 = new RequirementBuilder().setName(new RequirementName("q2")).build();
Requirement q3 = new RequirementBuilder().setName(new RequirementName("q3")).build();
Requirement q4 = new RequirementBuilder().setName(new RequirementName("q4")).build();
ConsumerNamedSelector t1 = new ConsumerNamedSelectorBuilder()
.setName(new SelectorName("t1"))
.setRequirement(ImmutableList.of(q1, q2))
.build();
ConsumerTargetSelector t2 = new ConsumerTargetSelectorBuilder()
.setName(new SelectorName("t2"))
.setRequirement(ImmutableList.of(q3, q4))
.build();
MatcherRequirement mq1 = new MatcherRequirementBuilder(q1).build();
MatcherRequirement mq2 = new MatcherRequirementBuilder(q2).build();
MatcherRequirement mq1_ns1 = new MatcherRequirementBuilder(q1)
.setSelectorNamespace(t1.getName())
.build();
MatcherRequirement mq1_ns2 = new MatcherRequirementBuilder(q1)
.setSelectorNamespace(t2.getName())
.build();
MatcherRequirement mq3 = new MatcherRequirementBuilder(q3).build();
RequirementMatcher qm = new RequirementMatcherBuilder()
.setMatchType(MatchType.All)
.setMatcherRequirement(ImmutableList.of(mq1, mq1_ns1))
.build();
assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
qm = new RequirementMatcherBuilder()
.setMatcherRequirement(ImmutableList.of(mq1_ns2))
.build();
assertFalse(MatcherUtils.applyReqMatcher(qm, t1));
assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
qm = new RequirementMatcherBuilder()
.setMatchType(MatchType.Any)
.setMatcherRequirement(ImmutableList.of(mq1, mq3))
.build();
assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
assertTrue(MatcherUtils.applyReqMatcher(qm, t2));
qm = new RequirementMatcherBuilder()
.setMatchType(MatchType.Any)
.setMatcherRequirement(ImmutableList.of(mq1, mq2))
.build();
assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
qm = new RequirementMatcherBuilder()
.setMatchType(MatchType.None)
.setMatcherRequirement(ImmutableList.of(mq3, mq1_ns2))
.build();
assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
qm = new RequirementMatcherBuilder().build();
assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
qm = new RequirementMatcherBuilder()
.setMatchType(MatchType.Any)
.build();
assertFalse(MatcherUtils.applyReqMatcher(qm, t1));
}
}