2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.groupbasedpolicy.resolver;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertTrue;
14 import org.junit.Test;
15 import org.opendaylight.groupbasedpolicy.util.MatcherUtils;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityName;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.QualityName;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RequirementName;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TargetName;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Matcher.MatchType;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.Capability;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.CapabilityBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.Quality;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.QualityBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.Requirement;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.RequirementBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcher;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcherBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQuality;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQualityBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Target;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.TargetBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcher;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.RequirementMatcherBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.requirement.matcher.MatcherRequirement;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.group.identification.constraints.group.requirement.constraint._case.requirement.matcher.MatcherRequirementBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcher;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.CapabilityMatcherBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.capability.matcher.MatcherCapability;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.group.identification.constraints.group.capability.constraint._case.capability.matcher.MatcherCapabilityBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelector;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelectorBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelector;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelectorBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelector;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelectorBuilder;
51 import com.google.common.collect.ImmutableList;
53 public class MatcherUtilsTest {
56 public void testApplyQualityMatcher() throws Exception {
57 Quality q1 = new QualityBuilder().setName(new QualityName("q1")).build();
58 Quality q2 = new QualityBuilder().setName(new QualityName("q2")).build();
59 Quality q3 = new QualityBuilder().setName(new QualityName("q3")).build();
60 Quality q4 = new QualityBuilder().setName(new QualityName("q4")).build();
62 Target t1 = new TargetBuilder()
63 .setName(new TargetName("t1"))
64 .setQuality(ImmutableList.of(q1, q2))
66 Target t2 = new TargetBuilder()
67 .setName(new TargetName("t2"))
68 .setQuality(ImmutableList.of(q3, q4))
71 MatcherQuality mq1 = new MatcherQualityBuilder(q1).build();
72 MatcherQuality mq2 = new MatcherQualityBuilder(q2).build();
73 MatcherQuality mq1_ns1 = new MatcherQualityBuilder(q1)
74 .setTargetNamespace(t1.getName())
76 MatcherQuality mq1_ns2 = new MatcherQualityBuilder(q1)
77 .setTargetNamespace(t2.getName())
79 MatcherQuality mq3 = new MatcherQualityBuilder(q3).build();
81 QualityMatcher qm = new QualityMatcherBuilder()
82 .setMatchType(MatchType.All)
83 .setMatcherQuality(ImmutableList.of(mq1, mq1_ns1))
86 assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
87 assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
89 qm = new QualityMatcherBuilder()
90 .setMatcherQuality(ImmutableList.of(mq1_ns2))
93 assertFalse(MatcherUtils.applyQualityMatcher(qm, t1));
94 assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
96 qm = new QualityMatcherBuilder()
97 .setMatchType(MatchType.Any)
98 .setMatcherQuality(ImmutableList.of(mq1, mq3))
101 assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
102 assertTrue(MatcherUtils.applyQualityMatcher(qm, t2));
104 qm = new QualityMatcherBuilder()
105 .setMatchType(MatchType.Any)
106 .setMatcherQuality(ImmutableList.of(mq1, mq2))
109 assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
110 assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
112 qm = new QualityMatcherBuilder()
113 .setMatchType(MatchType.None)
114 .setMatcherQuality(ImmutableList.of(mq3, mq1_ns2))
117 assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
118 assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
120 qm = new QualityMatcherBuilder().build();
121 assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
123 qm = new QualityMatcherBuilder()
124 .setMatchType(MatchType.Any)
126 assertFalse(MatcherUtils.applyQualityMatcher(qm, t1));
130 public void testApplyCapMatcher() throws Exception {
131 Capability q1 = new CapabilityBuilder().setName(new CapabilityName("q1")).build();
132 Capability q2 = new CapabilityBuilder().setName(new CapabilityName("q2")).build();
133 Capability q3 = new CapabilityBuilder().setName(new CapabilityName("q3")).build();
134 Capability q4 = new CapabilityBuilder().setName(new CapabilityName("q4")).build();
136 ProviderTargetSelector t1 = new ProviderTargetSelectorBuilder()
137 .setName(new SelectorName("t1"))
138 .setCapability(ImmutableList.of(q1, q2))
140 ProviderNamedSelector t2 = new ProviderNamedSelectorBuilder()
141 .setName(new SelectorName("t2"))
142 .setCapability(ImmutableList.of(q3, q4))
145 MatcherCapability mq1 = new MatcherCapabilityBuilder(q1).build();
146 MatcherCapability mq2 = new MatcherCapabilityBuilder(q2).build();
147 MatcherCapability mq1_ns1 = new MatcherCapabilityBuilder(q1)
148 .setSelectorNamespace(t1.getName())
150 MatcherCapability mq1_ns2 = new MatcherCapabilityBuilder(q1)
151 .setSelectorNamespace(t2.getName())
153 MatcherCapability mq3 = new MatcherCapabilityBuilder(q3).build();
155 CapabilityMatcher qm = new CapabilityMatcherBuilder()
156 .setMatchType(MatchType.All)
157 .setMatcherCapability(ImmutableList.of(mq1, mq1_ns1))
160 assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
161 assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
163 qm = new CapabilityMatcherBuilder()
164 .setMatcherCapability(ImmutableList.of(mq1_ns2))
167 assertFalse(MatcherUtils.applyCapMatcher(qm, t1));
168 assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
170 qm = new CapabilityMatcherBuilder()
171 .setMatchType(MatchType.Any)
172 .setMatcherCapability(ImmutableList.of(mq1, mq3))
175 assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
176 assertTrue(MatcherUtils.applyCapMatcher(qm, t2));
178 qm = new CapabilityMatcherBuilder()
179 .setMatchType(MatchType.Any)
180 .setMatcherCapability(ImmutableList.of(mq1, mq2))
183 assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
184 assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
186 qm = new CapabilityMatcherBuilder()
187 .setMatchType(MatchType.None)
188 .setMatcherCapability(ImmutableList.of(mq3, mq1_ns2))
191 assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
192 assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
194 qm = new CapabilityMatcherBuilder().build();
195 assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
197 qm = new CapabilityMatcherBuilder()
198 .setMatchType(MatchType.Any)
200 assertFalse(MatcherUtils.applyCapMatcher(qm, t1));
204 public void testApplyReqMatcher() throws Exception {
205 Requirement q1 = new RequirementBuilder().setName(new RequirementName("q1")).build();
206 Requirement q2 = new RequirementBuilder().setName(new RequirementName("q2")).build();
207 Requirement q3 = new RequirementBuilder().setName(new RequirementName("q3")).build();
208 Requirement q4 = new RequirementBuilder().setName(new RequirementName("q4")).build();
210 ConsumerNamedSelector t1 = new ConsumerNamedSelectorBuilder()
211 .setName(new SelectorName("t1"))
212 .setRequirement(ImmutableList.of(q1, q2))
214 ConsumerTargetSelector t2 = new ConsumerTargetSelectorBuilder()
215 .setName(new SelectorName("t2"))
216 .setRequirement(ImmutableList.of(q3, q4))
219 MatcherRequirement mq1 = new MatcherRequirementBuilder(q1).build();
220 MatcherRequirement mq2 = new MatcherRequirementBuilder(q2).build();
221 MatcherRequirement mq1_ns1 = new MatcherRequirementBuilder(q1)
222 .setSelectorNamespace(t1.getName())
224 MatcherRequirement mq1_ns2 = new MatcherRequirementBuilder(q1)
225 .setSelectorNamespace(t2.getName())
227 MatcherRequirement mq3 = new MatcherRequirementBuilder(q3).build();
229 RequirementMatcher qm = new RequirementMatcherBuilder()
230 .setMatchType(MatchType.All)
231 .setMatcherRequirement(ImmutableList.of(mq1, mq1_ns1))
234 assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
235 assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
237 qm = new RequirementMatcherBuilder()
238 .setMatcherRequirement(ImmutableList.of(mq1_ns2))
241 assertFalse(MatcherUtils.applyReqMatcher(qm, t1));
242 assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
244 qm = new RequirementMatcherBuilder()
245 .setMatchType(MatchType.Any)
246 .setMatcherRequirement(ImmutableList.of(mq1, mq3))
249 assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
250 assertTrue(MatcherUtils.applyReqMatcher(qm, t2));
252 qm = new RequirementMatcherBuilder()
253 .setMatchType(MatchType.Any)
254 .setMatcherRequirement(ImmutableList.of(mq1, mq2))
257 assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
258 assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
260 qm = new RequirementMatcherBuilder()
261 .setMatchType(MatchType.None)
262 .setMatcherRequirement(ImmutableList.of(mq3, mq1_ns2))
265 assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
266 assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
268 qm = new RequirementMatcherBuilder().build();
269 assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
271 qm = new RequirementMatcherBuilder()
272 .setMatchType(MatchType.Any)
274 assertFalse(MatcherUtils.applyReqMatcher(qm, t1));