2 * Copyright (c) 2016 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.yangtools.yang.stmt;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
15 import java.util.HashSet;
17 import java.util.function.Predicate;
18 import org.junit.Test;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.Module;
24 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
25 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
26 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
27 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
28 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
29 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
31 public class IfFeatureResolutionTest {
33 private static final StatementStreamSource FOO_MODULE =
34 new YangStatementSourceImpl("/if-feature-resolution-test/foo.yang", false);
35 private static final StatementStreamSource BAR_MODULE =
36 new YangStatementSourceImpl("/if-feature-resolution-test/bar.yang", false);
39 public void testSomeFeaturesSupported() throws ReactorException {
40 Predicate<QName> isFeatureSupported = qName -> {
41 Set<QName> supportedFeatures = new HashSet<>();
42 supportedFeatures.add(QName.create("foo-namespace", "1970-01-01", "test-feature-1"));
43 supportedFeatures.add(QName.create("foo-namespace", "1970-01-01", "test-feature-2"));
44 supportedFeatures.add(QName.create("foo-namespace", "1970-01-01", "test-feature-3"));
45 supportedFeatures.add(QName.create("bar-namespace", "1970-01-01", "imp-feature"));
47 return supportedFeatures.contains(qName);
50 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(isFeatureSupported);
51 reactor.addSources(FOO_MODULE, BAR_MODULE);
53 SchemaContext schemaContext = reactor.buildEffective();
54 assertNotNull(schemaContext);
56 Module testModule = schemaContext.findModuleByName("foo", null);
57 assertNotNull(testModule);
59 assertEquals(9, testModule.getChildNodes().size());
61 ContainerSchemaNode testContainerA = (ContainerSchemaNode) testModule.getDataChildByName(
62 QName.create(testModule.getQNameModule(), "test-container-a"));
63 assertNull(testContainerA);
65 ContainerSchemaNode testContainerB = (ContainerSchemaNode) testModule.getDataChildByName(
66 QName.create(testModule.getQNameModule(), "test-container-b"));
67 assertNotNull(testContainerB);
68 LeafSchemaNode testLeafB = (LeafSchemaNode) testContainerB.getDataChildByName(
69 QName.create(testModule.getQNameModule(), "test-leaf-b"));
70 assertNotNull(testLeafB);
72 ContainerSchemaNode testContainerC = (ContainerSchemaNode) testModule.getDataChildByName(
73 QName.create(testModule.getQNameModule(), "test-container-c"));
74 assertNotNull(testContainerC);
75 LeafSchemaNode testLeafC = (LeafSchemaNode) testContainerC.getDataChildByName(
76 QName.create(testModule.getQNameModule(), "test-leaf-c"));
77 assertNotNull(testLeafC);
79 ContainerSchemaNode testContainerD = (ContainerSchemaNode) testModule.getDataChildByName(
80 QName.create(testModule.getQNameModule(), "test-container-d"));
81 assertNull(testContainerD);
83 ContainerSchemaNode testContainerE = (ContainerSchemaNode) testModule.getDataChildByName(
84 QName.create(testModule.getQNameModule(), "test-container-e"));
85 assertNotNull(testContainerE);
86 ContainerSchemaNode testSubContainerE = (ContainerSchemaNode) testContainerE.getDataChildByName(
87 QName.create(testModule.getQNameModule(), "test-subcontainer-e"));
88 assertNotNull(testSubContainerE);
89 LeafSchemaNode testLeafE = (LeafSchemaNode) testSubContainerE.getDataChildByName(
90 QName.create(testModule.getQNameModule(), "test-leaf-e"));
91 assertNull(testLeafE);
93 ContainerSchemaNode testContainerF = (ContainerSchemaNode) testModule.getDataChildByName(
94 QName.create(testModule.getQNameModule(), "test-container-f"));
95 assertNotNull(testContainerF);
96 ContainerSchemaNode testSubContainerF = (ContainerSchemaNode) testContainerF.getDataChildByName(
97 QName.create(testModule.getQNameModule(), "test-subcontainer-f"));
98 assertNull(testSubContainerF);
100 ContainerSchemaNode testContainerG = (ContainerSchemaNode) testModule.getDataChildByName(
101 QName.create(testModule.getQNameModule(), "test-container-g"));
102 assertNotNull(testContainerG);
103 assertEquals(1, testContainerG.getAvailableAugmentations().size());
104 LeafSchemaNode testLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
105 QName.create(testModule.getQNameModule(), "test-leaf-g"));
106 assertNotNull(testLeafG);
107 LeafSchemaNode augmentingTestLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
108 QName.create(testModule.getQNameModule(), "augmenting-test-leaf-g"));
109 assertNull(augmentingTestLeafG);
110 AnyXmlSchemaNode augmentingTestAnyxmlG = (AnyXmlSchemaNode) testContainerG.getDataChildByName(
111 QName.create(testModule.getQNameModule(), "augmenting-test-anyxml-g"));
112 assertNotNull(augmentingTestAnyxmlG);
114 ContainerSchemaNode testContainerH = (ContainerSchemaNode) testModule.getDataChildByName(
115 QName.create(testModule.getQNameModule(), "test-container-h"));
116 assertNotNull(testContainerH);
117 assertEquals(0, testContainerH.getChildNodes().size());
118 assertEquals(0, testContainerH.getUses().size());
120 ContainerSchemaNode testContainerI = (ContainerSchemaNode) testModule.getDataChildByName(
121 QName.create(testModule.getQNameModule(), "test-container-i"));
122 assertNotNull(testContainerI);
123 assertEquals(1, testContainerI.getUses().size());
124 ContainerSchemaNode testGroupingSubContainer = (ContainerSchemaNode) testContainerI.getDataChildByName(
125 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
126 assertNotNull(testGroupingSubContainer);
127 LeafSchemaNode testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
128 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
129 assertNull(testGroupingLeaf);
131 ContainerSchemaNode testContainerJ = (ContainerSchemaNode) testModule.getDataChildByName(
132 QName.create(testModule.getQNameModule(), "test-container-j"));
133 assertNotNull(testContainerJ);
134 LeafSchemaNode testLeafJ = (LeafSchemaNode) testContainerJ.getDataChildByName(
135 QName.create(testModule.getQNameModule(), "test-leaf-j"));
136 assertNotNull(testLeafJ);
138 ContainerSchemaNode testContainerK = (ContainerSchemaNode) testModule.getDataChildByName(
139 QName.create(testModule.getQNameModule(), "test-container-k"));
140 assertNotNull(testContainerK);
141 assertEquals(1, testContainerK.getUses().size());
142 testGroupingSubContainer = (ContainerSchemaNode) testContainerK.getDataChildByName(
143 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
144 assertNotNull(testGroupingSubContainer);
145 assertEquals(1, testGroupingSubContainer.getAvailableAugmentations().size());
146 LeafSchemaNode augmentingTestGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
147 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf"));
148 assertNotNull(augmentingTestGroupingLeaf);
149 LeafSchemaNode augmentingTestGroupingLeaf2 = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
150 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf-2"));
151 assertNull(augmentingTestGroupingLeaf2);
155 public void testAllFeaturesSupported() throws ReactorException {
156 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
157 reactor.addSources(FOO_MODULE, BAR_MODULE);
159 SchemaContext schemaContext = reactor.buildEffective();
160 assertNotNull(schemaContext);
162 Module testModule = schemaContext.findModuleByName("foo", null);
163 assertNotNull(testModule);
165 assertEquals(11, testModule.getChildNodes().size());
167 ContainerSchemaNode testContainerA = (ContainerSchemaNode) testModule.getDataChildByName(
168 QName.create(testModule.getQNameModule(), "test-container-a"));
169 assertNotNull(testContainerA);
170 LeafSchemaNode testLeafA = (LeafSchemaNode) testContainerA.getDataChildByName(
171 QName.create(testModule.getQNameModule(), "test-leaf-a"));
172 assertNotNull(testLeafA);
175 ContainerSchemaNode testContainerB = (ContainerSchemaNode) testModule.getDataChildByName(
176 QName.create(testModule.getQNameModule(), "test-container-b"));
177 assertNotNull(testContainerB);
178 LeafSchemaNode testLeafB = (LeafSchemaNode) testContainerB.getDataChildByName(
179 QName.create(testModule.getQNameModule(), "test-leaf-b"));
180 assertNotNull(testLeafB);
182 ContainerSchemaNode testContainerC = (ContainerSchemaNode) testModule.getDataChildByName(
183 QName.create(testModule.getQNameModule(), "test-container-c"));
184 assertNotNull(testContainerC);
185 LeafSchemaNode testLeafC = (LeafSchemaNode) testContainerC.getDataChildByName(
186 QName.create(testModule.getQNameModule(), "test-leaf-c"));
187 assertNotNull(testLeafC);
189 ContainerSchemaNode testContainerD = (ContainerSchemaNode) testModule.getDataChildByName(
190 QName.create(testModule.getQNameModule(), "test-container-d"));
191 assertNotNull(testContainerD);
192 LeafSchemaNode testLeafD = (LeafSchemaNode) testContainerD.getDataChildByName(
193 QName.create(testModule.getQNameModule(), "test-leaf-d"));
194 assertNotNull(testLeafD);
196 ContainerSchemaNode testContainerE = (ContainerSchemaNode) testModule.getDataChildByName(
197 QName.create(testModule.getQNameModule(), "test-container-e"));
198 assertNotNull(testContainerE);
199 ContainerSchemaNode testSubContainerE = (ContainerSchemaNode) testContainerE.getDataChildByName(
200 QName.create(testModule.getQNameModule(), "test-subcontainer-e"));
201 assertNotNull(testSubContainerE);
202 LeafSchemaNode testLeafE = (LeafSchemaNode) testSubContainerE.getDataChildByName(
203 QName.create(testModule.getQNameModule(), "test-leaf-e"));
204 assertNotNull(testLeafE);
206 ContainerSchemaNode testContainerF = (ContainerSchemaNode) testModule.getDataChildByName(
207 QName.create(testModule.getQNameModule(), "test-container-f"));
208 assertNotNull(testContainerF);
209 ContainerSchemaNode testSubContainerF = (ContainerSchemaNode) testContainerF.getDataChildByName(
210 QName.create(testModule.getQNameModule(), "test-subcontainer-f"));
211 assertNotNull(testSubContainerF);
212 ContainerSchemaNode testSubSubContainerF = (ContainerSchemaNode) testSubContainerF.getDataChildByName(
213 QName.create(testModule.getQNameModule(), "test-subsubcontainer-f"));
214 assertNotNull(testSubSubContainerF);
215 LeafSchemaNode testLeafF = (LeafSchemaNode) testSubSubContainerF.getDataChildByName(
216 QName.create(testModule.getQNameModule(), "test-leaf-f"));
217 assertNotNull(testLeafF);
219 ContainerSchemaNode testContainerG = (ContainerSchemaNode) testModule.getDataChildByName(
220 QName.create(testModule.getQNameModule(), "test-container-g"));
221 assertNotNull(testContainerG);
222 assertEquals(2, testContainerG.getAvailableAugmentations().size());
223 LeafSchemaNode testLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
224 QName.create(testModule.getQNameModule(), "test-leaf-g"));
225 assertNotNull(testLeafG);
226 LeafSchemaNode augmentingTestLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
227 QName.create(testModule.getQNameModule(), "augmenting-test-leaf-g"));
228 assertNotNull(augmentingTestLeafG);
229 AnyXmlSchemaNode augmentingTestAnyxmlG = (AnyXmlSchemaNode) testContainerG.getDataChildByName(
230 QName.create(testModule.getQNameModule(), "augmenting-test-anyxml-g"));
231 assertNotNull(augmentingTestAnyxmlG);
233 ContainerSchemaNode testContainerH = (ContainerSchemaNode) testModule.getDataChildByName(
234 QName.create(testModule.getQNameModule(), "test-container-h"));
235 assertNotNull(testContainerH);
236 assertEquals(1, testContainerH.getUses().size());
237 ContainerSchemaNode testGroupingSubContainer = (ContainerSchemaNode) testContainerH.getDataChildByName(
238 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
239 assertNotNull(testGroupingSubContainer);
240 LeafSchemaNode testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
241 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
242 assertNotNull(testGroupingLeaf);
244 ContainerSchemaNode testContainerI = (ContainerSchemaNode) testModule.getDataChildByName(
245 QName.create(testModule.getQNameModule(), "test-container-i"));
246 assertNotNull(testContainerI);
247 assertEquals(1, testContainerI.getUses().size());
248 testGroupingSubContainer = (ContainerSchemaNode) testContainerI.getDataChildByName(
249 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
250 assertNotNull(testGroupingSubContainer);
251 testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
252 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
253 assertNotNull(testGroupingLeaf);
255 ContainerSchemaNode testContainerJ = (ContainerSchemaNode) testModule.getDataChildByName(
256 QName.create(testModule.getQNameModule(), "test-container-j"));
257 assertNotNull(testContainerJ);
258 LeafSchemaNode testLeafJ = (LeafSchemaNode) testContainerJ.getDataChildByName(
259 QName.create(testModule.getQNameModule(), "test-leaf-j"));
260 assertNotNull(testLeafJ);
262 ContainerSchemaNode testContainerK = (ContainerSchemaNode) testModule.getDataChildByName(
263 QName.create(testModule.getQNameModule(), "test-container-k"));
264 assertNotNull(testContainerK);
265 assertEquals(1, testContainerK.getUses().size());
266 testGroupingSubContainer = (ContainerSchemaNode) testContainerK.getDataChildByName(
267 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
268 assertNotNull(testGroupingSubContainer);
269 assertEquals(1, testGroupingSubContainer.getAvailableAugmentations().size());
270 LeafSchemaNode augmentingTestGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
271 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf"));
272 assertNotNull(augmentingTestGroupingLeaf);
273 LeafSchemaNode augmentingTestGroupingLeaf2 = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
274 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf-2"));
275 assertNotNull(augmentingTestGroupingLeaf2);
276 testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
277 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
278 assertNotNull(testGroupingLeaf);
282 public void testNoFeaturesSupported() throws ReactorException {
283 Predicate<QName> isFeatureSupported = qName -> false;
285 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(isFeatureSupported);
286 reactor.addSources(FOO_MODULE, BAR_MODULE);
288 SchemaContext schemaContext = reactor.buildEffective();
289 assertNotNull(schemaContext);
291 Module testModule = schemaContext.findModuleByName("foo", null);
292 assertNotNull(testModule);
294 assertEquals(6, testModule.getChildNodes().size());
296 ContainerSchemaNode testContainerE = (ContainerSchemaNode) testModule.getDataChildByName(
297 QName.create(testModule.getQNameModule(), "test-container-e"));
298 assertNotNull(testContainerE);
299 ContainerSchemaNode testSubContainerE = (ContainerSchemaNode) testContainerE.getDataChildByName(
300 QName.create(testModule.getQNameModule(), "test-subcontainer-e"));
301 assertNotNull(testSubContainerE);
302 LeafSchemaNode testLeafE = (LeafSchemaNode) testSubContainerE.getDataChildByName(
303 QName.create(testModule.getQNameModule(), "test-leaf-e"));
304 assertNull(testLeafE);
306 ContainerSchemaNode testContainerF = (ContainerSchemaNode) testModule.getDataChildByName(
307 QName.create(testModule.getQNameModule(), "test-container-f"));
308 assertNotNull(testContainerF);
309 ContainerSchemaNode testSubContainerF = (ContainerSchemaNode) testContainerF.getDataChildByName(
310 QName.create(testModule.getQNameModule(), "test-subcontainer-f"));
311 assertNull(testSubContainerF);
313 ContainerSchemaNode testContainerG = (ContainerSchemaNode) testModule.getDataChildByName(
314 QName.create(testModule.getQNameModule(), "test-container-g"));
315 assertNotNull(testContainerG);
316 assertEquals(1, testContainerG.getAvailableAugmentations().size());
317 LeafSchemaNode testLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
318 QName.create(testModule.getQNameModule(), "test-leaf-g"));
319 assertNotNull(testLeafG);
320 LeafSchemaNode augmentingTestLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
321 QName.create(testModule.getQNameModule(), "augmenting-test-leaf-g"));
322 assertNull(augmentingTestLeafG);
323 AnyXmlSchemaNode augmentingTestAnyxmlG = (AnyXmlSchemaNode) testContainerG.getDataChildByName(
324 QName.create(testModule.getQNameModule(), "augmenting-test-anyxml-g"));
325 assertNotNull(augmentingTestAnyxmlG);
327 ContainerSchemaNode testContainerH = (ContainerSchemaNode) testModule.getDataChildByName(
328 QName.create(testModule.getQNameModule(), "test-container-h"));
329 assertNotNull(testContainerH);
330 assertEquals(0, testContainerH.getChildNodes().size());
331 assertEquals(0, testContainerH.getUses().size());
333 ContainerSchemaNode testContainerI = (ContainerSchemaNode) testModule.getDataChildByName(
334 QName.create(testModule.getQNameModule(), "test-container-i"));
335 assertNotNull(testContainerI);
336 assertEquals(1, testContainerI.getUses().size());
337 ContainerSchemaNode testGroupingSubContainer = (ContainerSchemaNode) testContainerI.getDataChildByName(
338 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
339 assertNotNull(testGroupingSubContainer);
340 LeafSchemaNode testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
341 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
342 assertNull(testGroupingLeaf);
344 ContainerSchemaNode testContainerK = (ContainerSchemaNode) testModule.getDataChildByName(
345 QName.create(testModule.getQNameModule(), "test-container-k"));
346 assertNotNull(testContainerK);
347 assertEquals(1, testContainerK.getUses().size());
348 testGroupingSubContainer = (ContainerSchemaNode) testContainerK.getDataChildByName(
349 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
350 assertNotNull(testGroupingSubContainer);
351 assertEquals(1, testGroupingSubContainer.getAvailableAugmentations().size());
352 LeafSchemaNode augmentingTestGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
353 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf"));
354 assertNull(augmentingTestGroupingLeaf);
355 LeafSchemaNode augmentingTestGroupingLeaf2 = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
356 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf-2"));
357 assertNull(augmentingTestGroupingLeaf2);
358 testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
359 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
360 assertNull(testGroupingLeaf);