Separating renderers into features.
[groupbasedpolicy.git] / renderers / ofoverlay / 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 org.junit.Test;
12 import org.opendaylight.groupbasedpolicy.resolver.MatcherUtils;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityName;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.QualityName;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RequirementName;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TargetName;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Matcher.MatchType;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.Capability;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.CapabilityBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.Quality;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.QualityBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.Requirement;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.RequirementBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcher;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcherBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQuality;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQualityBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Target;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.TargetBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcher;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcherBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.requirement.matcher.MatcherRequirement;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.requirement.matcher.MatcherRequirementBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcher;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcherBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.capability.matcher.MatcherCapability;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.capability.matcher.MatcherCapabilityBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelector;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelectorBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelector;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelectorBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelector;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelectorBuilder;
47
48 import com.google.common.collect.ImmutableList;
49
50 import static org.junit.Assert.*;
51
52 public class MatcherUtilsTest {
53     
54     @Test
55     public void testApplyQualityMatcher() throws Exception {
56         Quality q1 = new QualityBuilder().setName(new QualityName("q1")).build();
57         Quality q2 = new QualityBuilder().setName(new QualityName("q2")).build();
58         Quality q3 = new QualityBuilder().setName(new QualityName("q3")).build();
59         Quality q4 = new QualityBuilder().setName(new QualityName("q4")).build();
60         
61         Target t1 = new TargetBuilder()
62             .setName(new TargetName("t1"))
63             .setQuality(ImmutableList.of(q1, q2))
64             .build();
65         Target t2 = new TargetBuilder()
66             .setName(new TargetName("t2"))
67             .setQuality(ImmutableList.of(q3, q4))
68             .build();
69
70         MatcherQuality mq1 = new MatcherQualityBuilder(q1).build();
71         MatcherQuality mq2 = new MatcherQualityBuilder(q2).build();
72         MatcherQuality mq1_ns1 = new MatcherQualityBuilder(q1)
73             .setTargetNamespace(t1.getName())
74             .build();
75         MatcherQuality mq1_ns2 = new MatcherQualityBuilder(q1)
76             .setTargetNamespace(t2.getName())
77             .build();
78         MatcherQuality mq3 = new MatcherQualityBuilder(q3).build();
79         
80         QualityMatcher qm = new QualityMatcherBuilder()
81             .setMatchType(MatchType.All)
82             .setMatcherQuality(ImmutableList.of(mq1, mq1_ns1))
83             .build();
84
85         assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
86         assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
87         
88         qm = new QualityMatcherBuilder()
89             .setMatcherQuality(ImmutableList.of(mq1_ns2))
90             .build();
91
92         assertFalse(MatcherUtils.applyQualityMatcher(qm, t1));
93         assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
94
95         qm = new QualityMatcherBuilder()
96             .setMatchType(MatchType.Any)
97             .setMatcherQuality(ImmutableList.of(mq1, mq3))
98             .build();
99
100         assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
101         assertTrue(MatcherUtils.applyQualityMatcher(qm, t2));
102
103         qm = new QualityMatcherBuilder()
104             .setMatchType(MatchType.Any)
105             .setMatcherQuality(ImmutableList.of(mq1, mq2))
106             .build();
107
108         assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
109         assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
110
111         qm = new QualityMatcherBuilder()
112             .setMatchType(MatchType.None)
113             .setMatcherQuality(ImmutableList.of(mq3, mq1_ns2))
114             .build();
115
116         assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
117         assertFalse(MatcherUtils.applyQualityMatcher(qm, t2));
118         
119         qm = new QualityMatcherBuilder().build();
120         assertTrue(MatcherUtils.applyQualityMatcher(qm, t1));
121
122         qm = new QualityMatcherBuilder()
123             .setMatchType(MatchType.Any)
124             .build();
125         assertFalse(MatcherUtils.applyQualityMatcher(qm, t1));
126     }
127     
128     @Test
129     public void testApplyCapMatcher() throws Exception {
130         Capability q1 = new CapabilityBuilder().setName(new CapabilityName("q1")).build();
131         Capability q2 = new CapabilityBuilder().setName(new CapabilityName("q2")).build();
132         Capability q3 = new CapabilityBuilder().setName(new CapabilityName("q3")).build();
133         Capability q4 = new CapabilityBuilder().setName(new CapabilityName("q4")).build();
134         
135         ProviderTargetSelector t1 = new ProviderTargetSelectorBuilder()
136             .setName(new SelectorName("t1"))
137             .setCapability(ImmutableList.of(q1, q2))
138             .build();
139         ProviderNamedSelector t2 = new ProviderNamedSelectorBuilder()
140             .setName(new SelectorName("t2"))
141             .setCapability(ImmutableList.of(q3, q4))
142             .build();
143
144         MatcherCapability mq1 = new MatcherCapabilityBuilder(q1).build();
145         MatcherCapability mq2 = new MatcherCapabilityBuilder(q2).build();
146         MatcherCapability mq1_ns1 = new MatcherCapabilityBuilder(q1)
147             .setSelectorNamespace(t1.getName())
148             .build();
149         MatcherCapability mq1_ns2 = new MatcherCapabilityBuilder(q1)
150             .setSelectorNamespace(t2.getName())
151             .build();
152         MatcherCapability mq3 = new MatcherCapabilityBuilder(q3).build();
153         
154         CapabilityMatcher qm = new CapabilityMatcherBuilder()
155             .setMatchType(MatchType.All)
156             .setMatcherCapability(ImmutableList.of(mq1, mq1_ns1))
157             .build();
158
159         assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
160         assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
161         
162         qm = new CapabilityMatcherBuilder()
163             .setMatcherCapability(ImmutableList.of(mq1_ns2))
164             .build();
165
166         assertFalse(MatcherUtils.applyCapMatcher(qm, t1));
167         assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
168
169         qm = new CapabilityMatcherBuilder()
170             .setMatchType(MatchType.Any)
171             .setMatcherCapability(ImmutableList.of(mq1, mq3))
172             .build();
173
174         assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
175         assertTrue(MatcherUtils.applyCapMatcher(qm, t2));
176
177         qm = new CapabilityMatcherBuilder()
178             .setMatchType(MatchType.Any)
179             .setMatcherCapability(ImmutableList.of(mq1, mq2))
180             .build();
181
182         assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
183         assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
184
185         qm = new CapabilityMatcherBuilder()
186             .setMatchType(MatchType.None)
187             .setMatcherCapability(ImmutableList.of(mq3, mq1_ns2))
188             .build();
189
190         assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
191         assertFalse(MatcherUtils.applyCapMatcher(qm, t2));
192         
193         qm = new CapabilityMatcherBuilder().build();
194         assertTrue(MatcherUtils.applyCapMatcher(qm, t1));
195
196         qm = new CapabilityMatcherBuilder()
197             .setMatchType(MatchType.Any)
198             .build();
199         assertFalse(MatcherUtils.applyCapMatcher(qm, t1));
200     }
201     
202     @Test
203     public void testApplyReqMatcher() throws Exception {
204         Requirement q1 = new RequirementBuilder().setName(new RequirementName("q1")).build();
205         Requirement q2 = new RequirementBuilder().setName(new RequirementName("q2")).build();
206         Requirement q3 = new RequirementBuilder().setName(new RequirementName("q3")).build();
207         Requirement q4 = new RequirementBuilder().setName(new RequirementName("q4")).build();
208         
209         ConsumerNamedSelector t1 = new ConsumerNamedSelectorBuilder()
210             .setName(new SelectorName("t1"))
211             .setRequirement(ImmutableList.of(q1, q2))
212             .build();
213         ConsumerTargetSelector t2 = new ConsumerTargetSelectorBuilder()
214             .setName(new SelectorName("t2"))
215             .setRequirement(ImmutableList.of(q3, q4))
216             .build();
217
218         MatcherRequirement mq1 = new MatcherRequirementBuilder(q1).build();
219         MatcherRequirement mq2 = new MatcherRequirementBuilder(q2).build();
220         MatcherRequirement mq1_ns1 = new MatcherRequirementBuilder(q1)
221             .setSelectorNamespace(t1.getName())
222             .build();
223         MatcherRequirement mq1_ns2 = new MatcherRequirementBuilder(q1)
224             .setSelectorNamespace(t2.getName())
225             .build();
226         MatcherRequirement mq3 = new MatcherRequirementBuilder(q3).build();
227         
228         RequirementMatcher qm = new RequirementMatcherBuilder()
229             .setMatchType(MatchType.All)
230             .setMatcherRequirement(ImmutableList.of(mq1, mq1_ns1))
231             .build();
232
233         assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
234         assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
235         
236         qm = new RequirementMatcherBuilder()
237             .setMatcherRequirement(ImmutableList.of(mq1_ns2))
238             .build();
239
240         assertFalse(MatcherUtils.applyReqMatcher(qm, t1));
241         assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
242
243         qm = new RequirementMatcherBuilder()
244             .setMatchType(MatchType.Any)
245             .setMatcherRequirement(ImmutableList.of(mq1, mq3))
246             .build();
247
248         assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
249         assertTrue(MatcherUtils.applyReqMatcher(qm, t2));
250
251         qm = new RequirementMatcherBuilder()
252             .setMatchType(MatchType.Any)
253             .setMatcherRequirement(ImmutableList.of(mq1, mq2))
254             .build();
255
256         assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
257         assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
258
259         qm = new RequirementMatcherBuilder()
260             .setMatchType(MatchType.None)
261             .setMatcherRequirement(ImmutableList.of(mq3, mq1_ns2))
262             .build();
263
264         assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
265         assertFalse(MatcherUtils.applyReqMatcher(qm, t2));
266
267         qm = new RequirementMatcherBuilder().build();
268         assertTrue(MatcherUtils.applyReqMatcher(qm, t1));
269
270         qm = new RequirementMatcherBuilder()
271             .setMatchType(MatchType.Any)
272             .build();
273         assertFalse(MatcherUtils.applyReqMatcher(qm, t1));
274     }
275 }