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 java.util.HashSet;
12 import java.util.List;
14 import org.junit.Test;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityMatcherName;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.CapabilityName;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionMatcherName;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.QualityMatcherName;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.QualityName;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RequirementMatcherName;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RequirementName;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TargetName;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.CapabilityBase;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Label.InclusionRule;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Matcher.MatchType;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.QualityBase;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.RequirementBase;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRefBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.Capability;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.capabilities.CapabilityBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRefBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.condition.matchers.ConditionMatcher;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.condition.matchers.ConditionMatcherBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.conditions.Condition;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.conditions.ConditionBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.Quality;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.qualities.QualityBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.Requirement;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.requirements.RequirementBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcher;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.QualityMatcherBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQuality;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.target.selector.quality.matcher.MatcherQualityBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.Tenant;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.TenantBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.ContractBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroupBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Clause;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.ClauseBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Subject;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.SubjectBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.Target;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.TargetBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ConsumerMatchersBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.ProviderMatchersBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcher;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.RequirementMatcherBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.consumer.matchers.requirement.matcher.MatcherRequirementBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcher;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.CapabilityMatcherBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.clause.provider.matchers.capability.matcher.MatcherCapabilityBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.Rule;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.RuleBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelector;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerNamedSelectorBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelector;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ConsumerTargetSelectorBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelector;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderNamedSelectorBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelector;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.endpoint.group.ProviderTargetSelectorBuilder;
87 import com.google.common.collect.ImmutableList;
88 import com.google.common.collect.ImmutableSet;
90 import static org.junit.Assert.*;
92 public class InheritanceUtilsTest {
97 Quality q1 = new QualityBuilder()
98 .setName(new QualityName("q1"))
100 Quality q1Include = new QualityBuilder(q1)
101 .setInclusionRule(InclusionRule.Include)
103 Quality q1Exclude = new QualityBuilder(q1)
104 .setInclusionRule(InclusionRule.Exclude)
106 Quality q2 = new QualityBuilder()
107 .setName(new QualityName("q2"))
109 Quality q2Exclude = new QualityBuilder()
110 .setName(new QualityName("q2"))
111 .setInclusionRule(InclusionRule.Exclude)
113 Quality q3 = new QualityBuilder()
114 .setName(new QualityName("q3"))
117 Requirement r1 = new RequirementBuilder()
118 .setName(new RequirementName("r1"))
120 Requirement r2 = new RequirementBuilder()
121 .setName(new RequirementName("r2"))
123 Requirement r1exclude = new RequirementBuilder()
124 .setName(new RequirementName("r1"))
125 .setInclusionRule(InclusionRule.Exclude)
127 Requirement r3 = new RequirementBuilder()
128 .setName(new RequirementName("r3"))
131 Capability c1 = new CapabilityBuilder()
132 .setName(new CapabilityName("c1"))
134 Capability c2 = new CapabilityBuilder()
135 .setName(new CapabilityName("c2"))
137 Capability c1exclude = new CapabilityBuilder()
138 .setName(new CapabilityName("c1"))
139 .setInclusionRule(InclusionRule.Exclude)
141 Capability c3 = new CapabilityBuilder()
142 .setName(new CapabilityName("c3"))
145 Condition cond1 = new ConditionBuilder()
146 .setName(new ConditionName("cond1"))
148 Condition cond2 = new ConditionBuilder()
149 .setName(new ConditionName("cond2"))
151 Condition cond2exlude = new ConditionBuilder()
152 .setName(new ConditionName("cond2"))
153 .setInclusionRule(InclusionRule.Exclude)
160 TargetName q2TargetName = new TargetName("q2");
161 Target q2Target = new TargetBuilder()
162 .setName(q2TargetName)
163 .setQuality(ImmutableList.of(q2))
166 TargetName q1ExcludeTargetName = new TargetName("q1_exclude");
167 Target q1ExcludeTarget = new TargetBuilder()
168 .setName(q1ExcludeTargetName)
169 .setQuality(ImmutableList.of(q1Exclude, q2))
172 TargetName q1IncludeTargetName = new TargetName("q1_include");
173 Target q1IncludeTarget = new TargetBuilder()
174 .setName(q1IncludeTargetName)
175 .setQuality(ImmutableList.of(q1Include))
178 Target q2PlusTarget = new TargetBuilder()
179 .setName(q2TargetName)
180 .setQuality(ImmutableList.of(q3))
183 SubjectName subject1 = new SubjectName("subject1");
184 SubjectName subject2 = new SubjectName("subject2");
186 RequirementMatcher rm_r1 = new RequirementMatcherBuilder()
187 .setName(new RequirementMatcherName("rm_r1"))
188 .setMatcherRequirement(ImmutableList.of(new MatcherRequirementBuilder(r1)
191 RequirementMatcher rm_r1_plus = new RequirementMatcherBuilder()
192 .setName(new RequirementMatcherName("rm_r1"))
193 .setMatchType(MatchType.All)
194 .setMatcherRequirement(ImmutableList.of(new MatcherRequirementBuilder(r2)
198 CapabilityMatcher capm_c1 = new CapabilityMatcherBuilder()
199 .setName(new CapabilityMatcherName("capm_c1"))
200 .setMatcherCapability(ImmutableList.of(new MatcherCapabilityBuilder(c1)
204 ConditionMatcher cm_c1 = new ConditionMatcherBuilder()
205 .setName(new ConditionMatcherName("cm_c1"))
206 .setCondition(ImmutableList.of(cond1))
208 ConditionMatcher cm_c2 = new ConditionMatcherBuilder()
209 .setName(new ConditionMatcherName("cm_c2"))
210 .setMatchType(MatchType.All)
211 .setCondition(ImmutableList.of(cond2))
213 ConditionMatcher cm_c2_plus = new ConditionMatcherBuilder()
214 .setName(new ConditionMatcherName("cm_c2"))
215 .setCondition(ImmutableList.of(cond2exlude))
218 ClauseName clauseName1 = new ClauseName("clauseName1");
219 Clause clause1 = new ClauseBuilder()
220 .setName(clauseName1)
221 .setSubjectRefs(ImmutableList.of(subject1))
222 .setProviderMatchers(new ProviderMatchersBuilder()
223 .setCapabilityMatcher(ImmutableList.of(capm_c1))
224 .setConditionMatcher(ImmutableList.of(cm_c1))
226 .setConsumerMatchers(new ConsumerMatchersBuilder()
227 .setRequirementMatcher(ImmutableList.of(rm_r1))
228 .setConditionMatcher(ImmutableList.of(cm_c2))
232 Clause clause1plus = new ClauseBuilder()
233 .setName(clauseName1)
234 .setSubjectRefs(ImmutableList.of(subject2))
235 .setConsumerMatchers(new ConsumerMatchersBuilder()
236 .setRequirementMatcher(ImmutableList.of(rm_r1_plus))
237 .setConditionMatcher(ImmutableList.of(cm_c2_plus))
241 ActionRef a1 = new ActionRefBuilder()
242 .setName(new ActionName("a1"))
244 ClassifierRef cr1 = new ClassifierRefBuilder()
245 .setName(new ClassifierName("cr1"))
247 Rule rule1 = new RuleBuilder()
248 .setName(new RuleName("r1"))
249 .setActionRef(ImmutableList.of(a1))
250 .setClassifierRef(ImmutableList.of(cr1))
252 Rule rule2 = new RuleBuilder()
253 .setName(new RuleName("r2"))
256 Rule rule3 = new RuleBuilder()
257 .setName(new RuleName("r3"))
260 Rule rule4 = new RuleBuilder()
261 .setName(new RuleName("r4"))
265 Subject s1 = new SubjectBuilder()
266 .setName(new SubjectName("s1"))
267 .setRule(ImmutableList.of(rule1, rule2))
269 Subject s1_plus = new SubjectBuilder()
270 .setName(s1.getName())
271 .setRule(ImmutableList.of(rule3, rule4))
274 Subject s2 = new SubjectBuilder()
275 .setName(new SubjectName("s2"))
279 ContractId contractId1 =
280 new ContractId("e7e6804f-7fcb-46cf-9bc6-abfec0896d95");
281 Contract contract1 = new ContractBuilder()
283 .setQuality(ImmutableList.of(q1))
284 .setTarget(ImmutableList.of(q2Target,
287 .setClause(ImmutableList.of(clause1))
288 .setSubject(ImmutableList.of(s1))
291 ContractId contractId2 =
292 new ContractId("3f56ae44-d1e4-4617-95af-c809dfc50149");
293 Contract contract2 = new ContractBuilder()
295 .setParent(contractId1)
296 .setTarget(ImmutableList.of(q2PlusTarget, q1IncludeTarget))
297 .setClause(ImmutableList.of(clause1plus))
298 .setSubject(ImmutableList.of(s1_plus, s2))
301 ContractId cloop2Id = new ContractId("89700928-7316-4216-a853-a7ea3934b8f4");
302 Contract cloop1 = new ContractBuilder()
303 .setId(new ContractId("56bbce36-e60b-473d-92de-bb63b5a6dbb5"))
305 .setClause(ImmutableList.of(clause1))
306 .setSubject(ImmutableList.of(s1, s2))
308 Contract cloop2 = new ContractBuilder()
310 .setParent(cloop1.getId())
312 ContractId cselfloopid =
313 new ContractId("63edead2-d6f1-4acf-9f78-831595d194ee");
314 Contract cselfloop = new ContractBuilder()
316 .setParent(cselfloopid)
318 Contract corphan = new ContractBuilder()
319 .setId(new ContractId("f72c15f3-76ab-4c7e-a817-eb5f6efcb654"))
320 .setParent(new ContractId("eca4d0d5-8c62-4f46-ad42-71c1f4d3da12"))
327 SelectorName cnsName1 = new SelectorName("cns1");
328 ConsumerNamedSelector cns1 = new ConsumerNamedSelectorBuilder()
330 .setContract(ImmutableList.of(contractId1))
331 .setRequirement(ImmutableList.of(r2))
334 ConsumerNamedSelector cns1_plus = new ConsumerNamedSelectorBuilder()
336 .setContract(ImmutableList.of(contractId2))
337 .setRequirement(ImmutableList.of(r3))
340 ProviderNamedSelector pns1 = new ProviderNamedSelectorBuilder()
342 .setContract(ImmutableList.of(contractId1))
343 .setCapability(ImmutableList.of(c2))
346 ProviderNamedSelector pns1_plus = new ProviderNamedSelectorBuilder()
348 .setContract(ImmutableList.of(contractId2))
349 .setCapability(ImmutableList.of(c3))
352 QualityMatcher qm_q1_all = new QualityMatcherBuilder()
353 .setName(new QualityMatcherName("qm_q1_all"))
354 .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q1)
356 .setMatchType(MatchType.All)
358 QualityMatcher qm_q1_any = new QualityMatcherBuilder()
359 .setName(new QualityMatcherName("qm_q1_any"))
360 .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q1)
362 .setMatchType(MatchType.Any)
364 QualityMatcher qm_q2q3_any = new QualityMatcherBuilder()
365 .setName(new QualityMatcherName("qm_q2q3_any"))
366 .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q2)
368 new MatcherQualityBuilder(q3)
370 .setMatchType(MatchType.Any)
373 QualityMatcher qm_q2tq2 = new QualityMatcherBuilder()
374 .setName(new QualityMatcherName("qm_q2tq2"))
375 .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q2)
376 .setTargetNamespace(q2TargetName)
378 .setMatchType(MatchType.Any)
380 QualityMatcher qm_q2q3_plus = new QualityMatcherBuilder()
381 .setName(new QualityMatcherName("qm_q2q3_any"))
382 .setMatcherQuality(ImmutableList.of(new MatcherQualityBuilder(q3)
383 .setTargetNamespace(q2TargetName)
385 new MatcherQualityBuilder(q2Exclude)
387 .setMatchType(MatchType.All)
389 QualityMatcher qm_q1_plus = new QualityMatcherBuilder()
390 .setName(new QualityMatcherName("qm_q1_any"))
393 SelectorName ctsName1 = new SelectorName("cts1");
394 ConsumerTargetSelector cts1 = new ConsumerTargetSelectorBuilder()
396 .setQualityMatcher(ImmutableList.of(qm_q1_all, qm_q1_any))
397 .setRequirement(ImmutableList.of(r2))
399 SelectorName ctsName2 = new SelectorName("cts2");
400 ConsumerTargetSelector cts2 = new ConsumerTargetSelectorBuilder()
402 .setQualityMatcher(ImmutableList.of(qm_q2q3_any))
403 .setRequirement(ImmutableList.of(r1exclude, r3))
405 ConsumerTargetSelector cts1_plus = new ConsumerTargetSelectorBuilder()
407 .setQualityMatcher(ImmutableList.of(qm_q1_plus,
410 .setRequirement(ImmutableList.of(r3))
412 ConsumerTargetSelector cts2_plus = new ConsumerTargetSelectorBuilder()
414 .setQualityMatcher(ImmutableList.of(qm_q2tq2,
416 .setRequirement(ImmutableList.of(r3))
419 SelectorName ptsName1 = new SelectorName("pts1");
420 ProviderTargetSelector pts1 = new ProviderTargetSelectorBuilder()
422 .setQualityMatcher(ImmutableList.of(qm_q1_all, qm_q1_any))
423 .setCapability(ImmutableList.of(c2))
425 SelectorName ptsName2 = new SelectorName("pts2");
426 ProviderTargetSelector pts2 = new ProviderTargetSelectorBuilder()
428 .setQualityMatcher(ImmutableList.of(qm_q2q3_any))
429 .setCapability(ImmutableList.of(c1exclude, c3))
431 ProviderTargetSelector pts1_plus = new ProviderTargetSelectorBuilder()
433 .setQualityMatcher(ImmutableList.of(qm_q1_plus,
436 .setCapability(ImmutableList.of(c3))
438 ProviderTargetSelector pts2_plus = new ProviderTargetSelectorBuilder()
440 .setQualityMatcher(ImmutableList.of(qm_q2tq2,
442 .setCapability(ImmutableList.of(c3))
445 EndpointGroupId egId1 =
446 new EndpointGroupId("c0e5edfb-02d2-412b-8757-a77b3daeb5d4");
447 EndpointGroup eg1 = new EndpointGroupBuilder()
449 .setRequirement(ImmutableList.of(r1))
450 .setCapability(ImmutableList.of(c1))
451 .setConsumerTargetSelector(ImmutableList.of(cts1, cts2))
452 .setConsumerNamedSelector(ImmutableList.of(cns1))
453 .setProviderTargetSelector(ImmutableList.of(pts1, pts2))
454 .setProviderNamedSelector(ImmutableList.of(pns1))
456 EndpointGroupId egId2 =
457 new EndpointGroupId("60483327-ad76-43dd-b3bf-54ffb73ef4b8");
458 EndpointGroup eg2 = new EndpointGroupBuilder()
461 .setConsumerTargetSelector(ImmutableList.of(cts1_plus, cts2_plus))
462 .setConsumerNamedSelector(ImmutableList.of(cns1_plus))
463 .setProviderTargetSelector(ImmutableList.of(pts1_plus, pts2_plus))
464 .setProviderNamedSelector(ImmutableList.of(pns1_plus))
467 EndpointGroupId egloop2Id =
468 new EndpointGroupId("cb5be574-9836-4053-8ec4-4b4a43331d65");
469 EndpointGroup egloop1 = new EndpointGroupBuilder()
470 .setId(new EndpointGroupId("a33fdd4d-f58b-4741-a69f-08aecab9af2e"))
471 .setParent(egloop2Id)
472 .setConsumerNamedSelector(ImmutableList.of(cns1))
473 .setProviderNamedSelector(ImmutableList.of(pns1))
474 .setConsumerTargetSelector(ImmutableList.of(cts1))
475 .setProviderTargetSelector(ImmutableList.of(pts1))
477 EndpointGroup egloop2 = new EndpointGroupBuilder()
479 .setParent(egloop1.getId())
481 EndpointGroupId egselfloopid =
482 new EndpointGroupId("996ad104-f852-4d77-96cf-cddde5cebb84");
483 EndpointGroup egselfloop = new EndpointGroupBuilder()
485 .setParent(egselfloopid)
487 EndpointGroup egorphan = new EndpointGroupBuilder()
488 .setId(new EndpointGroupId("feafeac9-ce1a-4b19-8455-8fcc9a4ff013"))
489 .setParent(new EndpointGroupId("aa9dfcf1-610c-42f9-8c3a-f67b43196821"))
496 TenantId tenantId1 = new TenantId("0ac5d219-979c-4cca-8f90-83b69bc414ad");
497 Tenant tenant1 = new TenantBuilder()
499 .setEndpointGroup(ImmutableList.of(eg1, eg2))
500 .setContract(ImmutableList.of(contract1, contract2))
503 Tenant malformed = new TenantBuilder()
504 .setId(new TenantId("b26e6b18-8e74-4062-a7d2-e8437132030d"))
505 .setContract(ImmutableList.of(cloop1, cloop2, cselfloop, corphan))
506 .setEndpointGroup(ImmutableList.of(egloop1, egloop2, egselfloop, egorphan))
513 public boolean containsQuality(List<? extends QualityBase> qualities,
514 QualityBase quality) {
515 for (QualityBase q : qualities) {
516 if (q.getName().equals(quality.getName()))
523 public void testTargetSimple() throws Exception {
524 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
525 Contract c1 = TenantUtils.findContract(tenant, contractId1);
527 // target with a quality directly in the target and one in
528 // the containing contract
529 Target result = TenantUtils.findTarget(c1, q2TargetName);
530 assertEquals(q2TargetName, result.getName());
531 List<Quality> qualities = result.getQuality();
532 assertTrue(q1.getName() + " found in q2target",
533 containsQuality(qualities, q1));
534 assertTrue(q2.getName() + " found in q2target",
535 containsQuality(qualities, q2));
537 // target with a quality directly in the target with explicit "include"
538 result = TenantUtils.findTarget(c1, q1IncludeTargetName);
539 qualities = result.getQuality();
540 assertTrue(q1.getName() + " found in q1IncludeTargetName",
541 containsQuality(qualities, q1));
543 // target with a quality from the containing contract but overridden
545 result = TenantUtils.findTarget(c1, q1ExcludeTargetName);
546 qualities = result.getQuality();
547 assertFalse(q1.getName() + " found in q1ExcludeTargetName",
548 containsQuality(qualities, q1));
549 assertTrue(q2.getName() + " found in q1ExcludeTargetName",
550 containsQuality(qualities, q2));
554 public void testTargetInheritance() throws Exception {
555 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
556 Contract c2 = TenantUtils.findContract(tenant, contractId2);
558 // hits the q2PlusTarget which should include everything in q2Target
560 Target result = TenantUtils.findTarget(c2, q2TargetName);
561 List<Quality> qualities = result.getQuality();
562 assertTrue(q1.getName() + " found in q2target",
563 containsQuality(qualities, q1));
564 assertTrue(q2.getName() + " found in q2target",
565 containsQuality(qualities, q2));
566 assertTrue(q3.getName() + " found in q2target",
567 containsQuality(qualities, q3));
569 // Simple case of inheriting the behavior from the base but not messing
571 result = TenantUtils.findTarget(c2, q1IncludeTargetName);
572 qualities = result.getQuality();
573 assertTrue(q1.getName() + " found in q1IncludeTargetName",
574 containsQuality(qualities, q1));
575 assertFalse(q2.getName() + " found in q1IncludeTargetName",
576 containsQuality(qualities, q2));
577 assertFalse(q3.getName() + " found in q1IncludeTargetName",
578 containsQuality(qualities, q3));
580 // Inherit a target from the base that isn't found in the child at all
581 result = TenantUtils.findTarget(c2, q1ExcludeTargetName);
582 qualities = result.getQuality();
583 assertFalse(q1.getName() + " found in q1ExcludeTargetName",
584 containsQuality(qualities, q1));
585 assertTrue(q2.getName() + " found in q1ExcludeTargetName",
586 containsQuality(qualities, q2));
587 assertFalse(q3.getName() + " found in q1ExcludeTargetName",
588 containsQuality(qualities, q3));
591 private boolean containsRequirement(List<? extends RequirementBase> requirements,
592 RequirementBase requirement) {
593 for (RequirementBase r : requirements) {
594 if (r.getName().equals(requirement.getName()))
600 private boolean containsCapability(List<? extends CapabilityBase> capabilities,
601 CapabilityBase capability) {
602 for (CapabilityBase r : capabilities) {
603 if (r.getName().equals(capability.getName()))
609 private boolean containsCondition(List<? extends Condition> conditions,
610 Condition condition) {
611 for (Condition r : conditions) {
612 if (r.getName().equals(condition.getName()))
619 public void testConsumerTargetSelectorSimple() throws Exception {
620 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
621 EndpointGroup egResult1 = TenantUtils.findEndpointGroup(tenant, egId1);
623 // should get r1 from eg1 and r2 from target selector
624 ConsumerTargetSelector result =
625 TenantUtils.findCts(egResult1, ctsName1);
626 assertEquals(ctsName1, result.getName());
627 List<Requirement> requirements = result.getRequirement();
628 assertTrue(r1.getName() + " found in " + requirements,
629 containsRequirement(requirements, r1));
630 assertTrue(r2.getName() + " found in " + requirements,
631 containsRequirement(requirements, r2));
633 List<QualityMatcher> matchers = result.getQualityMatcher();
634 assertEquals(2, matchers.size());
635 for (QualityMatcher m : matchers) {
636 if (m.getName().equals(new QualityMatcherName("qm_q1_all"))) {
637 assertTrue(containsQuality(m.getMatcherQuality(), q1));
638 assertEquals(MatchType.All, m.getMatchType());
640 assertTrue(containsQuality(m.getMatcherQuality(), q1));
641 assertEquals(MatchType.Any, m.getMatchType());
645 // should get r1 from eg1 but excluded in target selector
646 // r3 comes from target selector
647 result = TenantUtils.findCts(egResult1, ctsName2);
648 assertEquals(ctsName2, result.getName());
649 requirements = result.getRequirement();
650 assertFalse(r1.getName() + " found in " + requirements,
651 containsRequirement(requirements, r1));
652 assertFalse(r2.getName() + " found in " + requirements,
653 containsRequirement(requirements, r2));
654 assertTrue(r3.getName() + " found in " + requirements,
655 containsRequirement(requirements, r3));
657 matchers = result.getQualityMatcher();
658 assertEquals(1, matchers.size());
659 assertTrue(containsQuality(matchers.get(0).getMatcherQuality(), q2));
660 assertTrue(containsQuality(matchers.get(0).getMatcherQuality(), q3));
661 assertEquals(MatchType.Any, matchers.get(0).getMatchType());
665 public void testConsumerTargetSelectorInheritance() throws Exception {
666 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
667 EndpointGroup egResult2 = TenantUtils.findEndpointGroup(tenant, egId2);
669 ConsumerTargetSelector result =
670 TenantUtils.findCts(egResult2, ctsName1);
672 List<Requirement> requirements = result.getRequirement();
673 assertTrue(r1.getName() + " found in " + requirements,
674 containsRequirement(requirements, r1));
675 assertTrue(r3.getName() + " found in " + requirements,
676 containsRequirement(requirements, r3));
678 // should have three matchers,
679 // (1) qm_q1_all inherited from endpoint group 1
680 // (2) qm_q1_any inherited from endpoint group 1, but overridden in
681 // endpoint group 2 with no new semantics
682 // (3) qm_q2q3_any defined in endpoint group 2
683 List<QualityMatcher> matchers = result.getQualityMatcher();
684 assertEquals(3, matchers.size());
685 for (QualityMatcher m : matchers) {
686 if (m.getName().equals(new QualityMatcherName("qm_q1_all"))) {
687 assertEquals(1, m.getMatcherQuality().size());
688 assertTrue(containsQuality(m.getMatcherQuality(), q1));
689 assertEquals(MatchType.All, m.getMatchType());
690 } else if (m.getName().equals(new QualityMatcherName("qm_q1_any"))) {
691 assertEquals(1, m.getMatcherQuality().size());
692 assertTrue(containsQuality(m.getMatcherQuality(), q1));
693 assertEquals(MatchType.Any, m.getMatchType());
695 assertTrue(containsQuality(m.getMatcherQuality(), q2));
696 assertTrue(containsQuality(m.getMatcherQuality(), q3));
697 assertEquals(MatchType.Any, m.getMatchType());
701 result = TenantUtils.findCts(egResult2, ctsName2);
702 assertEquals(ctsName2, result.getName());
703 requirements = result.getRequirement();
705 // should get r1 from eg1 but excluded in target selector
706 // r3 comes from target selector
707 assertFalse(r1.getName() + " found in " + requirements,
708 containsRequirement(requirements, r1));
709 assertFalse(r2.getName() + " found in " + requirements,
710 containsRequirement(requirements, r2));
711 assertTrue(r3.getName() + " found in " + requirements,
712 containsRequirement(requirements, r3));
714 // Should get 2 matchers:
715 // (1) qm_q2q2_any inherited from eg1, except that q2 is excluded
716 // by qm_q2q3_plus and q3 has a target namespace added
717 // (2) qm_q2tq2_any newly-defined with a target namespace
718 matchers = result.getQualityMatcher();
719 assertEquals(2, matchers.size());
720 for (QualityMatcher m : matchers) {
721 if (m.getName().equals(new QualityMatcherName("qm_q2q3_any"))) {
722 assertFalse(containsQuality(m.getMatcherQuality(), q1));
723 assertFalse(containsQuality(m.getMatcherQuality(), q2));
724 assertTrue(containsQuality(m.getMatcherQuality(), q3));
725 for (MatcherQuality mq : m.getMatcherQuality()) {
726 if (mq.getName().equals(q3.getName())) {
727 assertEquals(q2TargetName, mq.getTargetNamespace());
729 assertNull(mq.getTargetNamespace());
732 assertEquals(MatchType.All, m.getMatchType());
734 assertTrue(containsQuality(m.getMatcherQuality(), q2));
735 assertEquals(MatchType.Any, m.getMatchType());
736 assertEquals(1, m.getMatcherQuality().size());
737 assertEquals(q2TargetName,
738 m.getMatcherQuality().get(0).getTargetNamespace());
744 public void testConsumerNamedSelectorSimple() throws Exception {
745 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
746 EndpointGroup egResult1 = TenantUtils.findEndpointGroup(tenant, egId1);
748 // should get r1 from eg1 and r2 from selector
749 ConsumerNamedSelector result =
750 TenantUtils.findCns(egResult1, cnsName1);
751 assertEquals(cnsName1, result.getName());
752 List<Requirement> requirements = result.getRequirement();
753 assertEquals(2, requirements.size());
754 assertTrue(r1.getName() + " found in " + requirements,
755 containsRequirement(requirements, r1));
756 assertTrue(r2.getName() + " found in " + requirements,
757 containsRequirement(requirements, r2));
759 assertEquals(1, result.getContract().size());
760 HashSet<ContractId> cids = new HashSet<>();
761 cids.addAll(result.getContract());
762 assertEquals(ImmutableSet.of(contractId1), cids);
766 public void testConsumerNamedSelectorInheritance() throws Exception {
767 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
768 EndpointGroup egResult2 = TenantUtils.findEndpointGroup(tenant, egId2);
770 // should get r1 from eg1 and r2 from eg1 selector,
771 // and r3 from eg2 selector
772 ConsumerNamedSelector result =
773 TenantUtils.findCns(egResult2, cnsName1);
774 assertEquals(cnsName1, result.getName());
775 List<Requirement> requirements = result.getRequirement();
776 assertEquals(3, requirements.size());
777 assertTrue(r1.getName() + " found in " + requirements,
778 containsRequirement(requirements, r1));
779 assertTrue(r2.getName() + " found in " + requirements,
780 containsRequirement(requirements, r2));
781 assertTrue(r3.getName() + " found in " + requirements,
782 containsRequirement(requirements, r3));
784 assertEquals(2, result.getContract().size());
785 HashSet<ContractId> cids = new HashSet<>();
786 cids.addAll(result.getContract());
787 assertEquals(ImmutableSet.of(contractId1, contractId2), cids);
791 public void testProviderTargetSelectorSimple() throws Exception {
792 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
793 EndpointGroup egResult1 = TenantUtils.findEndpointGroup(tenant, egId1);
795 // should get c1 from eg1 and c2 from target selector
796 ProviderTargetSelector result =
797 TenantUtils.findPts(egResult1, ptsName1);
798 assertEquals(ptsName1, result.getName());
799 List<Capability> capabilities = result.getCapability();
800 assertTrue(c1.getName() + " found in " + capabilities,
801 containsCapability(capabilities, c1));
802 assertTrue(c2.getName() + " found in " + capabilities,
803 containsCapability(capabilities, c2));
805 List<QualityMatcher> matchers = result.getQualityMatcher();
806 assertEquals(2, matchers.size());
807 for (QualityMatcher m : matchers) {
808 if (m.getName().equals(new QualityMatcherName("qm_q1_all"))) {
809 assertTrue(containsQuality(m.getMatcherQuality(), q1));
810 assertEquals(MatchType.All, m.getMatchType());
812 assertTrue(containsQuality(m.getMatcherQuality(), q1));
813 assertEquals(MatchType.Any, m.getMatchType());
817 // should get c1 from eg1 but excluded in target selector
818 // c3 comes from target selector
819 result = TenantUtils.findPts(egResult1, ptsName2);
820 assertEquals(ptsName2, result.getName());
821 capabilities = result.getCapability();
822 assertFalse(c1.getName() + " found in " + capabilities,
823 containsCapability(capabilities, c1));
824 assertFalse(c2.getName() + " found in " + capabilities,
825 containsCapability(capabilities, c2));
826 assertTrue(c3.getName() + " found in " + capabilities,
827 containsCapability(capabilities, c3));
829 matchers = result.getQualityMatcher();
830 assertEquals(1, matchers.size());
831 assertTrue(containsQuality(matchers.get(0).getMatcherQuality(), q2));
832 assertTrue(containsQuality(matchers.get(0).getMatcherQuality(), q3));
833 assertEquals(MatchType.Any, matchers.get(0).getMatchType());
837 public void testProviderTargetSelectorInheritance() throws Exception {
838 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
839 EndpointGroup egResult2 = TenantUtils.findEndpointGroup(tenant, egId2);
841 ProviderTargetSelector result =
842 TenantUtils.findPts(egResult2, ptsName1);
844 List<Capability> capabilities = result.getCapability();
845 assertTrue(c1.getName() + " found in " + capabilities,
846 containsCapability(capabilities, c1));
847 assertTrue(c3.getName() + " found in " + capabilities,
848 containsCapability(capabilities, c3));
850 // should have three matchers,
851 // (1) qm_q1_all inherited from endpoint group 1
852 // (2) qm_q1_any inherited from endpoint group 1, but overridden in
853 // endpoint group 2 with no new semantics
854 // (3) qm_q2q3_any defined in endpoint group 2
855 List<QualityMatcher> matchers = result.getQualityMatcher();
856 assertEquals(3, matchers.size());
857 for (QualityMatcher m : matchers) {
858 if (m.getName().equals(new QualityMatcherName("qm_q1_all"))) {
859 assertEquals(1, m.getMatcherQuality().size());
860 assertTrue(containsQuality(m.getMatcherQuality(), q1));
861 assertEquals(MatchType.All, m.getMatchType());
862 } else if (m.getName().equals(new QualityMatcherName("qm_q1_any"))) {
863 assertEquals(1, m.getMatcherQuality().size());
864 assertTrue(containsQuality(m.getMatcherQuality(), q1));
865 assertEquals(MatchType.Any, m.getMatchType());
867 assertTrue(containsQuality(m.getMatcherQuality(), q2));
868 assertTrue(containsQuality(m.getMatcherQuality(), q3));
869 assertEquals(MatchType.Any, m.getMatchType());
873 result = TenantUtils.findPts(egResult2, ptsName2);
874 assertEquals(ptsName2, result.getName());
875 capabilities = result.getCapability();
877 // should get c1 from eg1 but excluded in target selector
878 // c3 comes from target selector
879 assertFalse(c1.getName() + " found in " + capabilities,
880 containsCapability(capabilities, c1));
881 assertFalse(c2.getName() + " found in " + capabilities,
882 containsCapability(capabilities, c2));
883 assertTrue(c3.getName() + " found in " + capabilities,
884 containsCapability(capabilities, c3));
886 // Should get 2 matchers:
887 // (1) qm_q2q2_any inherited from eg1, except that q2 is excluded
888 // by qm_q2q3_plus and q3 has a target namespace added
889 // (2) qm_q2tq2_any newly-defined with a target namespace
890 matchers = result.getQualityMatcher();
891 assertEquals(2, matchers.size());
892 for (QualityMatcher m : matchers) {
893 if (m.getName().equals(new QualityMatcherName("qm_q2q3_any"))) {
894 assertFalse(containsQuality(m.getMatcherQuality(), q1));
895 assertFalse(containsQuality(m.getMatcherQuality(), q2));
896 assertTrue(containsQuality(m.getMatcherQuality(), q3));
897 for (MatcherQuality mq : m.getMatcherQuality()) {
898 if (mq.getName().equals(q3.getName())) {
899 assertEquals(q2TargetName, mq.getTargetNamespace());
901 assertNull(mq.getTargetNamespace());
904 assertEquals(MatchType.All, m.getMatchType());
906 assertTrue(containsQuality(m.getMatcherQuality(), q2));
907 assertEquals(MatchType.Any, m.getMatchType());
908 assertEquals(1, m.getMatcherQuality().size());
909 assertEquals(q2TargetName,
910 m.getMatcherQuality().get(0).getTargetNamespace());
916 public void testProviderNamedSelectorSimple() throws Exception {
917 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
918 EndpointGroup egResult1 = TenantUtils.findEndpointGroup(tenant, egId1);
920 // should get c1 from eg1 and c2 from selector
921 ProviderNamedSelector result =
922 TenantUtils.findPns(egResult1, cnsName1);
923 assertEquals(cnsName1, result.getName());
924 List<Capability> capabilities = result.getCapability();
925 assertEquals(2, capabilities.size());
926 assertTrue(c1.getName() + " found in " + capabilities,
927 containsCapability(capabilities, c1));
928 assertTrue(c2.getName() + " found in " + capabilities,
929 containsCapability(capabilities, c2));
931 assertEquals(1, result.getContract().size());
932 HashSet<ContractId> cids = new HashSet<>();
933 cids.addAll(result.getContract());
934 assertEquals(ImmutableSet.of(contractId1), cids);
938 public void testProviderNamedSelectorInheritance() throws Exception {
939 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
940 EndpointGroup egResult2 = TenantUtils.findEndpointGroup(tenant, egId2);
942 // should get c1 from eg1 and c2 from eg1 selector,
943 // and c3 from eg2 selector
944 ProviderNamedSelector result =
945 TenantUtils.findPns(egResult2, cnsName1);
946 assertEquals(cnsName1, result.getName());
947 List<Capability> capabilities = result.getCapability();
948 assertEquals(3, capabilities.size());
949 assertTrue(c1.getName() + " found in " + capabilities,
950 containsCapability(capabilities, c1));
951 assertTrue(c2.getName() + " found in " + capabilities,
952 containsCapability(capabilities, c2));
953 assertTrue(c3.getName() + " found in " + capabilities,
954 containsCapability(capabilities, c3));
956 assertEquals(2, result.getContract().size());
957 HashSet<ContractId> cids = new HashSet<>();
958 cids.addAll(result.getContract());
959 assertEquals(ImmutableSet.of(contractId1, contractId2), cids);
963 public void testClauseSimple() throws Exception {
964 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
965 Contract cresult1 = TenantUtils.findContract(tenant, contractId1);
967 Clause result = TenantUtils.findClause(cresult1, clauseName1);
968 assertEquals(clauseName1, result.getName());
970 // subject refs: subject1 from clause1
971 assertEquals(1, result.getSubjectRefs().size());
972 assertEquals(ImmutableSet.of(subject1),
973 ImmutableSet.copyOf(result.getSubjectRefs()));
975 assertNotNull(result.getProviderMatchers());
976 List<ConditionMatcher> cm =
977 result.getProviderMatchers().getConditionMatcher();
978 assertEquals(1, cm.size());
979 assertEquals(1, cm.get(0).getCondition().size());
980 assertTrue(containsCondition(cm.get(0).getCondition(), cond1));
982 List<CapabilityMatcher> capm =
983 result.getProviderMatchers().getCapabilityMatcher();
984 assertEquals(1, capm.size());
985 assertEquals(1, capm.get(0).getMatcherCapability().size());
986 assertTrue(containsCapability(capm.get(0).getMatcherCapability(), c1));
988 assertNotNull(result.getConsumerMatchers());
989 cm = result.getConsumerMatchers().getConditionMatcher();
990 assertEquals(1, cm.size());
991 assertEquals(1, cm.get(0).getCondition().size());
992 assertTrue(containsCondition(cm.get(0).getCondition(), cond2));
994 List<RequirementMatcher> pm =
995 result.getConsumerMatchers().getRequirementMatcher();
996 assertEquals(1, pm.size());
997 assertEquals(1, pm.get(0).getMatcherRequirement().size());
998 assertTrue(containsRequirement(pm.get(0).getMatcherRequirement(), r1));
1003 public void testClauseInheritance() throws Exception {
1004 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
1005 Contract cresult2 = TenantUtils.findContract(tenant, contractId2);
1007 Clause result = TenantUtils.findClause(cresult2, clauseName1);
1008 assertEquals(clauseName1, result.getName());
1010 // subject refs: subject1 from clause1, subject2 from clause2
1011 assertEquals(2, result.getSubjectRefs().size());
1012 assertEquals(ImmutableSet.of(subject1, subject2),
1013 ImmutableSet.copyOf(result.getSubjectRefs()));
1015 assertNotNull(result.getProviderMatchers());
1016 List<ConditionMatcher> cm =
1017 result.getProviderMatchers().getConditionMatcher();
1018 assertEquals(1, cm.size());
1019 assertEquals(1, cm.get(0).getCondition().size());
1020 assertTrue(containsCondition(cm.get(0).getCondition(), cond1));
1022 List<CapabilityMatcher> capm =
1023 result.getProviderMatchers().getCapabilityMatcher();
1024 assertEquals(1, capm.size());
1025 assertEquals(1, capm.get(0).getMatcherCapability().size());
1026 assertTrue(containsCapability(capm.get(0).getMatcherCapability(), c1));
1028 assertNotNull(result.getConsumerMatchers());
1029 cm = result.getConsumerMatchers().getConditionMatcher();
1030 assertEquals(1, cm.size());
1031 assertEquals(cm_c2.getName(), cm.get(0).getName());
1032 assertEquals(MatchType.All, cm.get(0).getMatchType());
1033 assertEquals(0, cm.get(0).getCondition().size());
1035 List<RequirementMatcher> pm =
1036 result.getConsumerMatchers().getRequirementMatcher();
1037 assertEquals(1, pm.size());
1038 assertEquals(2, pm.get(0).getMatcherRequirement().size());
1039 assertTrue(containsRequirement(pm.get(0).getMatcherRequirement(), r1));
1040 assertTrue(containsRequirement(pm.get(0).getMatcherRequirement(), r2));
1044 public void testSubjectSimple() throws Exception {
1045 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
1047 Contract result = TenantUtils.findContract(tenant, contractId1);
1048 List<Subject> subjects = result.getSubject();
1049 assertEquals(1, subjects.size());
1051 assertEquals(s1.getName(), subjects.get(0).getName());
1052 List<Rule> rules = subjects.get(0).getRule();
1053 assertEquals(2, rules.size());
1054 assertEquals(rule2.getName(), rules.get(0).getName());
1055 assertEquals(rule1.getName(), rules.get(1).getName());
1059 public void testSubjectInheritance() throws Exception {
1060 Tenant tenant = InheritanceUtils.resolveTenant(tenant1);
1062 Contract result = TenantUtils.findContract(tenant, contractId2);
1063 List<Subject> subjects = result.getSubject();
1064 assertEquals(2, subjects.size());
1065 for (Subject s: subjects) {
1066 if (s1.getName().equals(s.getName())) {
1067 assertEquals(Integer.valueOf(4), s.getOrder());
1068 List<Rule> rules = s.getRule();
1069 assertEquals(4, rules.size());
1070 assertEquals(rule4.getName(), rules.get(0).getName());
1071 assertEquals(rule3.getName(), rules.get(1).getName());
1072 assertEquals(rule2.getName(), rules.get(2).getName());
1073 assertEquals(rule1.getName(), rules.get(3).getName());
1074 } else if (s2.getName().equals(s.getName())) {
1075 assertEquals(0, s.getRule().size());
1076 assertEquals(Integer.valueOf(5), s.getOrder());
1078 fail("extra subject?");
1084 public void testMalformedPolicy() throws Exception {
1086 InheritanceUtils.resolveTenant(malformed);
1087 Contract c = TenantUtils.findContract(tenant, cloop2Id);
1088 assertEquals(1, c.getClause().size());
1089 Clause clause = c.getClause().get(0);
1090 assertEquals(1, clause.getConsumerMatchers().getConditionMatcher().size());
1091 assertEquals(1, clause.getConsumerMatchers().getRequirementMatcher().size());
1092 assertEquals(1, clause.getProviderMatchers().getConditionMatcher().size());
1093 assertEquals(1, clause.getProviderMatchers().getCapabilityMatcher().size());
1094 assertEquals(2, c.getSubject().size());
1096 EndpointGroup eg = TenantUtils.findEndpointGroup(tenant, egloop2Id);
1097 assertEquals(1, eg.getConsumerNamedSelector().size());
1098 assertEquals(1, eg.getConsumerTargetSelector().size());
1099 assertEquals(1, eg.getProviderNamedSelector().size());
1100 assertEquals(1, eg.getProviderTargetSelector().size());