02dfcd8ba5cea370a2eb91f9f13338f328807aa0
[groupbasedpolicy.git] / groupbasedpolicy / src / test / java / org / opendaylight / groupbasedpolicy / resolver / MatcherUtilsTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.groupbasedpolicy.resolver;
10
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertTrue;
13
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;
50
51 import com.google.common.collect.ImmutableList;
52
53 public class MatcherUtilsTest {
54     
55     @Test
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();
61         
62         Target t1 = new TargetBuilder()
63             .setName(new TargetName("t1"))
64             .setQuality(ImmutableList.of(q1, q2))
65             .build();
66         Target t2 = new TargetBuilder()
67             .setName(new TargetName("t2"))
68             .setQuality(ImmutableList.of(q3, q4))
69             .build();
70
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())
75             .build();
76         MatcherQuality mq1_ns2 = new MatcherQualityBuilder(q1)
77             .setTargetNamespace(t2.getName())
78             .build();
79         MatcherQuality mq3 = new MatcherQualityBuilder(q3).build();
80         
81         QualityMatcher qm = new QualityMatcherBuilder()
82             .setMatchType(MatchType.All)
83             .setMatcherQuality(ImmutableList.of(mq1, mq1_ns1))
84             .build();
85
86         assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
87         assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
88         
89         qm = new QualityMatcherBuilder()
90             .setMatcherQuality(ImmutableList.of(mq1_ns2))
91             .build();
92
93         assertFalse(MatcherUtils.applyQualityMatcher(qm, t1));
94         assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
95
96         qm = new QualityMatcherBuilder()
97             .setMatchType(MatchType.Any)
98             .setMatcherQuality(ImmutableList.of(mq1, mq3))
99             .build();
100
101         assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
102         assertTrue(MatcherUtils.applyQualityMatcher(qm, t2));
103
104         qm = new QualityMatcherBuilder()
105             .setMatchType(MatchType.Any)
106             .setMatcherQuality(ImmutableList.of(mq1, mq2))
107             .build();
108
109         assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
110         assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
111
112         qm = new QualityMatcherBuilder()
113             .setMatchType(MatchType.None)
114             .setMatcherQuality(ImmutableList.of(mq3, mq1_ns2))
115             .build();
116
117         assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
118         assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
119         
120         qm = new QualityMatcherBuilder().build();
121         assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
122
123         qm = new QualityMatcherBuilder()
124             .setMatchType(MatchType.Any)
125             .build();
126         assertFalse(MatcherUtils.applyQualityMatcher(qm, t1));
127     }
128     
129     @Test
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();
135         
136         ProviderTargetSelector t1 = new ProviderTargetSelectorBuilder()
137             .setName(new SelectorName("t1"))
138             .setCapability(ImmutableList.of(q1, q2))
139             .build();
140         ProviderNamedSelector t2 = new ProviderNamedSelectorBuilder()
141             .setName(new SelectorName("t2"))
142             .setCapability(ImmutableList.of(q3, q4))
143             .build();
144
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())
149             .build();
150         MatcherCapability mq1_ns2 = new MatcherCapabilityBuilder(q1)
151             .setSelectorNamespace(t2.getName())
152             .build();
153         MatcherCapability mq3 = new MatcherCapabilityBuilder(q3).build();
154         
155         CapabilityMatcher qm = new CapabilityMatcherBuilder()
156             .setMatchType(MatchType.All)
157             .setMatcherCapability(ImmutableList.of(mq1, mq1_ns1))
158             .build();
159
160         assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
161         assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
162         
163         qm = new CapabilityMatcherBuilder()
164             .setMatcherCapability(ImmutableList.of(mq1_ns2))
165             .build();
166
167         assertFalse(MatcherUtils.applyCapMatcher(qm, t1));
168         assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
169
170         qm = new CapabilityMatcherBuilder()
171             .setMatchType(MatchType.Any)
172             .setMatcherCapability(ImmutableList.of(mq1, mq3))
173             .build();
174
175         assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
176         assertTrue(MatcherUtils.applyCapMatcher(qm, t2));
177
178         qm = new CapabilityMatcherBuilder()
179             .setMatchType(MatchType.Any)
180             .setMatcherCapability(ImmutableList.of(mq1, mq2))
181             .build();
182
183         assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
184         assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
185
186         qm = new CapabilityMatcherBuilder()
187             .setMatchType(MatchType.None)
188             .setMatcherCapability(ImmutableList.of(mq3, mq1_ns2))
189             .build();
190
191         assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
192         assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
193         
194         qm = new CapabilityMatcherBuilder().build();
195         assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
196
197         qm = new CapabilityMatcherBuilder()
198             .setMatchType(MatchType.Any)
199             .build();
200         assertFalse(MatcherUtils.applyCapMatcher(qm, t1));
201     }
202     
203     @Test
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();
209         
210         ConsumerNamedSelector t1 = new ConsumerNamedSelectorBuilder()
211             .setName(new SelectorName("t1"))
212             .setRequirement(ImmutableList.of(q1, q2))
213             .build();
214         ConsumerTargetSelector t2 = new ConsumerTargetSelectorBuilder()
215             .setName(new SelectorName("t2"))
216             .setRequirement(ImmutableList.of(q3, q4))
217             .build();
218
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())
223             .build();
224         MatcherRequirement mq1_ns2 = new MatcherRequirementBuilder(q1)
225             .setSelectorNamespace(t2.getName())
226             .build();
227         MatcherRequirement mq3 = new MatcherRequirementBuilder(q3).build();
228         
229         RequirementMatcher qm = new RequirementMatcherBuilder()
230             .setMatchType(MatchType.All)
231             .setMatcherRequirement(ImmutableList.of(mq1, mq1_ns1))
232             .build();
233
234         assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
235         assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
236         
237         qm = new RequirementMatcherBuilder()
238             .setMatcherRequirement(ImmutableList.of(mq1_ns2))
239             .build();
240
241         assertFalse(MatcherUtils.applyReqMatcher(qm, t1));
242         assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
243
244         qm = new RequirementMatcherBuilder()
245             .setMatchType(MatchType.Any)
246             .setMatcherRequirement(ImmutableList.of(mq1, mq3))
247             .build();
248
249         assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
250         assertTrue(MatcherUtils.applyReqMatcher(qm, t2));
251
252         qm = new RequirementMatcherBuilder()
253             .setMatchType(MatchType.Any)
254             .setMatcherRequirement(ImmutableList.of(mq1, mq2))
255             .build();
256
257         assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
258         assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
259
260         qm = new RequirementMatcherBuilder()
261             .setMatchType(MatchType.None)
262             .setMatcherRequirement(ImmutableList.of(mq3, mq1_ns2))
263             .build();
264
265         assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
266         assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
267
268         qm = new RequirementMatcherBuilder().build();
269         assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
270
271         qm = new RequirementMatcherBuilder()
272             .setMatchType(MatchType.Any)
273             .build();
274         assertFalse(MatcherUtils.applyReqMatcher(qm, t1));
275     }
276 }