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;
14 import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResource;
16 import com.google.common.collect.ImmutableSet;
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.rfc7950.reactor.RFC7950Reactors;
26 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
27 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
29 public class IfFeatureResolutionTest {
31 private static final StatementStreamSource FOO_MODULE = sourceForResource("/if-feature-resolution-test/foo.yang");
32 private static final StatementStreamSource BAR_MODULE = sourceForResource("/if-feature-resolution-test/bar.yang");
35 public void testSomeFeaturesSupported() throws ReactorException {
36 final Set<QName> supportedFeatures = ImmutableSet.of(
37 QName.create("foo-namespace", "test-feature-1"),
38 QName.create("foo-namespace", "test-feature-2"),
39 QName.create("foo-namespace", "test-feature-3"),
40 QName.create("bar-namespace", "imp-feature"));
42 final SchemaContext schemaContext = RFC7950Reactors.defaultReactor().newBuild()
43 .addSources(FOO_MODULE, BAR_MODULE)
44 .setSupportedFeatures(supportedFeatures)
46 assertNotNull(schemaContext);
48 final Module testModule = schemaContext.findModule("foo").get();
49 assertEquals(9, testModule.getChildNodes().size());
51 final ContainerSchemaNode testContainerA = (ContainerSchemaNode) testModule.getDataChildByName(
52 QName.create(testModule.getQNameModule(), "test-container-a"));
53 assertNull(testContainerA);
55 final ContainerSchemaNode testContainerB = (ContainerSchemaNode) testModule.getDataChildByName(
56 QName.create(testModule.getQNameModule(), "test-container-b"));
57 assertNotNull(testContainerB);
58 final LeafSchemaNode testLeafB = (LeafSchemaNode) testContainerB.getDataChildByName(
59 QName.create(testModule.getQNameModule(), "test-leaf-b"));
60 assertNotNull(testLeafB);
62 final ContainerSchemaNode testContainerC = (ContainerSchemaNode) testModule.getDataChildByName(
63 QName.create(testModule.getQNameModule(), "test-container-c"));
64 assertNotNull(testContainerC);
65 final LeafSchemaNode testLeafC = (LeafSchemaNode) testContainerC.getDataChildByName(
66 QName.create(testModule.getQNameModule(), "test-leaf-c"));
67 assertNotNull(testLeafC);
69 final ContainerSchemaNode testContainerD = (ContainerSchemaNode) testModule.getDataChildByName(
70 QName.create(testModule.getQNameModule(), "test-container-d"));
71 assertNull(testContainerD);
73 final ContainerSchemaNode testContainerE = (ContainerSchemaNode) testModule.getDataChildByName(
74 QName.create(testModule.getQNameModule(), "test-container-e"));
75 assertNotNull(testContainerE);
76 final ContainerSchemaNode testSubContainerE = (ContainerSchemaNode) testContainerE.getDataChildByName(
77 QName.create(testModule.getQNameModule(), "test-subcontainer-e"));
78 assertNotNull(testSubContainerE);
79 final LeafSchemaNode testLeafE = (LeafSchemaNode) testSubContainerE.getDataChildByName(
80 QName.create(testModule.getQNameModule(), "test-leaf-e"));
81 assertNull(testLeafE);
83 final ContainerSchemaNode testContainerF = (ContainerSchemaNode) testModule.getDataChildByName(
84 QName.create(testModule.getQNameModule(), "test-container-f"));
85 assertNotNull(testContainerF);
86 final ContainerSchemaNode testSubContainerF = (ContainerSchemaNode) testContainerF.getDataChildByName(
87 QName.create(testModule.getQNameModule(), "test-subcontainer-f"));
88 assertNull(testSubContainerF);
90 final ContainerSchemaNode testContainerG = (ContainerSchemaNode) testModule.getDataChildByName(
91 QName.create(testModule.getQNameModule(), "test-container-g"));
92 assertNotNull(testContainerG);
93 assertEquals(1, testContainerG.getAvailableAugmentations().size());
94 final LeafSchemaNode testLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
95 QName.create(testModule.getQNameModule(), "test-leaf-g"));
96 assertNotNull(testLeafG);
97 final LeafSchemaNode augmentingTestLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
98 QName.create(testModule.getQNameModule(), "augmenting-test-leaf-g"));
99 assertNull(augmentingTestLeafG);
100 final AnyxmlSchemaNode augmentingTestAnyxmlG = (AnyxmlSchemaNode) testContainerG.getDataChildByName(
101 QName.create(testModule.getQNameModule(), "augmenting-test-anyxml-g"));
102 assertNotNull(augmentingTestAnyxmlG);
104 final ContainerSchemaNode testContainerH = (ContainerSchemaNode) testModule.getDataChildByName(
105 QName.create(testModule.getQNameModule(), "test-container-h"));
106 assertNotNull(testContainerH);
107 assertEquals(0, testContainerH.getChildNodes().size());
108 assertEquals(0, testContainerH.getUses().size());
110 final ContainerSchemaNode testContainerI = (ContainerSchemaNode) testModule.getDataChildByName(
111 QName.create(testModule.getQNameModule(), "test-container-i"));
112 assertNotNull(testContainerI);
113 assertEquals(1, testContainerI.getUses().size());
114 ContainerSchemaNode testGroupingSubContainer = (ContainerSchemaNode) testContainerI.getDataChildByName(
115 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
116 assertNotNull(testGroupingSubContainer);
117 final LeafSchemaNode testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
118 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
119 assertNull(testGroupingLeaf);
121 final ContainerSchemaNode testContainerJ = (ContainerSchemaNode) testModule.getDataChildByName(
122 QName.create(testModule.getQNameModule(), "test-container-j"));
123 assertNotNull(testContainerJ);
124 final LeafSchemaNode testLeafJ = (LeafSchemaNode) testContainerJ.getDataChildByName(
125 QName.create(testModule.getQNameModule(), "test-leaf-j"));
126 assertNotNull(testLeafJ);
128 final ContainerSchemaNode testContainerK = (ContainerSchemaNode) testModule.getDataChildByName(
129 QName.create(testModule.getQNameModule(), "test-container-k"));
130 assertNotNull(testContainerK);
131 assertEquals(1, testContainerK.getUses().size());
132 testGroupingSubContainer = (ContainerSchemaNode) testContainerK.getDataChildByName(
133 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
134 assertNotNull(testGroupingSubContainer);
135 assertEquals(1, testGroupingSubContainer.getAvailableAugmentations().size());
136 final LeafSchemaNode augmentingTestGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
137 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf"));
138 assertNotNull(augmentingTestGroupingLeaf);
139 final LeafSchemaNode augmentingTestGroupingLeaf2 = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
140 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf-2"));
141 assertNull(augmentingTestGroupingLeaf2);
145 public void testAllFeaturesSupported() throws ReactorException {
146 final SchemaContext schemaContext = RFC7950Reactors.defaultReactor().newBuild()
147 .addSources(FOO_MODULE, BAR_MODULE)
149 assertNotNull(schemaContext);
151 final Module testModule = schemaContext.findModules("foo").iterator().next();
152 assertNotNull(testModule);
154 assertEquals(11, testModule.getChildNodes().size());
156 final ContainerSchemaNode testContainerA = (ContainerSchemaNode) testModule.getDataChildByName(
157 QName.create(testModule.getQNameModule(), "test-container-a"));
158 assertNotNull(testContainerA);
159 final LeafSchemaNode testLeafA = (LeafSchemaNode) testContainerA.getDataChildByName(
160 QName.create(testModule.getQNameModule(), "test-leaf-a"));
161 assertNotNull(testLeafA);
164 final ContainerSchemaNode testContainerB = (ContainerSchemaNode) testModule.getDataChildByName(
165 QName.create(testModule.getQNameModule(), "test-container-b"));
166 assertNotNull(testContainerB);
167 final LeafSchemaNode testLeafB = (LeafSchemaNode) testContainerB.getDataChildByName(
168 QName.create(testModule.getQNameModule(), "test-leaf-b"));
169 assertNotNull(testLeafB);
171 final ContainerSchemaNode testContainerC = (ContainerSchemaNode) testModule.getDataChildByName(
172 QName.create(testModule.getQNameModule(), "test-container-c"));
173 assertNotNull(testContainerC);
174 final LeafSchemaNode testLeafC = (LeafSchemaNode) testContainerC.getDataChildByName(
175 QName.create(testModule.getQNameModule(), "test-leaf-c"));
176 assertNotNull(testLeafC);
178 final ContainerSchemaNode testContainerD = (ContainerSchemaNode) testModule.getDataChildByName(
179 QName.create(testModule.getQNameModule(), "test-container-d"));
180 assertNotNull(testContainerD);
181 final LeafSchemaNode testLeafD = (LeafSchemaNode) testContainerD.getDataChildByName(
182 QName.create(testModule.getQNameModule(), "test-leaf-d"));
183 assertNotNull(testLeafD);
185 final ContainerSchemaNode testContainerE = (ContainerSchemaNode) testModule.getDataChildByName(
186 QName.create(testModule.getQNameModule(), "test-container-e"));
187 assertNotNull(testContainerE);
188 final ContainerSchemaNode testSubContainerE = (ContainerSchemaNode) testContainerE.getDataChildByName(
189 QName.create(testModule.getQNameModule(), "test-subcontainer-e"));
190 assertNotNull(testSubContainerE);
191 final LeafSchemaNode testLeafE = (LeafSchemaNode) testSubContainerE.getDataChildByName(
192 QName.create(testModule.getQNameModule(), "test-leaf-e"));
193 assertNotNull(testLeafE);
195 final ContainerSchemaNode testContainerF = (ContainerSchemaNode) testModule.getDataChildByName(
196 QName.create(testModule.getQNameModule(), "test-container-f"));
197 assertNotNull(testContainerF);
198 final ContainerSchemaNode testSubContainerF = (ContainerSchemaNode) testContainerF.getDataChildByName(
199 QName.create(testModule.getQNameModule(), "test-subcontainer-f"));
200 assertNotNull(testSubContainerF);
201 final ContainerSchemaNode testSubSubContainerF = (ContainerSchemaNode) testSubContainerF.getDataChildByName(
202 QName.create(testModule.getQNameModule(), "test-subsubcontainer-f"));
203 assertNotNull(testSubSubContainerF);
204 final LeafSchemaNode testLeafF = (LeafSchemaNode) testSubSubContainerF.getDataChildByName(
205 QName.create(testModule.getQNameModule(), "test-leaf-f"));
206 assertNotNull(testLeafF);
208 final ContainerSchemaNode testContainerG = (ContainerSchemaNode) testModule.getDataChildByName(
209 QName.create(testModule.getQNameModule(), "test-container-g"));
210 assertNotNull(testContainerG);
211 assertEquals(2, testContainerG.getAvailableAugmentations().size());
212 final LeafSchemaNode testLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
213 QName.create(testModule.getQNameModule(), "test-leaf-g"));
214 assertNotNull(testLeafG);
215 final LeafSchemaNode augmentingTestLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
216 QName.create(testModule.getQNameModule(), "augmenting-test-leaf-g"));
217 assertNotNull(augmentingTestLeafG);
218 final AnyxmlSchemaNode augmentingTestAnyxmlG = (AnyxmlSchemaNode) testContainerG.getDataChildByName(
219 QName.create(testModule.getQNameModule(), "augmenting-test-anyxml-g"));
220 assertNotNull(augmentingTestAnyxmlG);
222 final ContainerSchemaNode testContainerH = (ContainerSchemaNode) testModule.getDataChildByName(
223 QName.create(testModule.getQNameModule(), "test-container-h"));
224 assertNotNull(testContainerH);
225 assertEquals(1, testContainerH.getUses().size());
226 ContainerSchemaNode testGroupingSubContainer = (ContainerSchemaNode) testContainerH.getDataChildByName(
227 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
228 assertNotNull(testGroupingSubContainer);
229 LeafSchemaNode testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
230 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
231 assertNotNull(testGroupingLeaf);
233 final ContainerSchemaNode testContainerI = (ContainerSchemaNode) testModule.getDataChildByName(
234 QName.create(testModule.getQNameModule(), "test-container-i"));
235 assertNotNull(testContainerI);
236 assertEquals(1, testContainerI.getUses().size());
237 testGroupingSubContainer = (ContainerSchemaNode) testContainerI.getDataChildByName(
238 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
239 assertNotNull(testGroupingSubContainer);
240 testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
241 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
242 assertNotNull(testGroupingLeaf);
244 final ContainerSchemaNode testContainerJ = (ContainerSchemaNode) testModule.getDataChildByName(
245 QName.create(testModule.getQNameModule(), "test-container-j"));
246 assertNotNull(testContainerJ);
247 final LeafSchemaNode testLeafJ = (LeafSchemaNode) testContainerJ.getDataChildByName(
248 QName.create(testModule.getQNameModule(), "test-leaf-j"));
249 assertNotNull(testLeafJ);
251 final ContainerSchemaNode testContainerK = (ContainerSchemaNode) testModule.getDataChildByName(
252 QName.create(testModule.getQNameModule(), "test-container-k"));
253 assertNotNull(testContainerK);
254 assertEquals(1, testContainerK.getUses().size());
255 testGroupingSubContainer = (ContainerSchemaNode) testContainerK.getDataChildByName(
256 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
257 assertNotNull(testGroupingSubContainer);
258 assertEquals(1, testGroupingSubContainer.getAvailableAugmentations().size());
259 final LeafSchemaNode augmentingTestGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
260 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf"));
261 assertNotNull(augmentingTestGroupingLeaf);
262 final LeafSchemaNode augmentingTestGroupingLeaf2 = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
263 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf-2"));
264 assertNotNull(augmentingTestGroupingLeaf2);
265 testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
266 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
267 assertNotNull(testGroupingLeaf);
271 public void testNoFeaturesSupported() throws ReactorException {
272 final SchemaContext schemaContext = RFC7950Reactors.defaultReactor().newBuild()
273 .addSources(FOO_MODULE, BAR_MODULE)
274 .setSupportedFeatures(ImmutableSet.of())
276 assertNotNull(schemaContext);
278 final Module testModule = schemaContext.findModules("foo").iterator().next();
279 assertNotNull(testModule);
281 assertEquals(6, testModule.getChildNodes().size());
283 final ContainerSchemaNode testContainerE = (ContainerSchemaNode) testModule.getDataChildByName(
284 QName.create(testModule.getQNameModule(), "test-container-e"));
285 assertNotNull(testContainerE);
286 final ContainerSchemaNode testSubContainerE = (ContainerSchemaNode) testContainerE.getDataChildByName(
287 QName.create(testModule.getQNameModule(), "test-subcontainer-e"));
288 assertNotNull(testSubContainerE);
289 final LeafSchemaNode testLeafE = (LeafSchemaNode) testSubContainerE.getDataChildByName(
290 QName.create(testModule.getQNameModule(), "test-leaf-e"));
291 assertNull(testLeafE);
293 final ContainerSchemaNode testContainerF = (ContainerSchemaNode) testModule.getDataChildByName(
294 QName.create(testModule.getQNameModule(), "test-container-f"));
295 assertNotNull(testContainerF);
296 final ContainerSchemaNode testSubContainerF = (ContainerSchemaNode) testContainerF.getDataChildByName(
297 QName.create(testModule.getQNameModule(), "test-subcontainer-f"));
298 assertNull(testSubContainerF);
300 final ContainerSchemaNode testContainerG = (ContainerSchemaNode) testModule.getDataChildByName(
301 QName.create(testModule.getQNameModule(), "test-container-g"));
302 assertNotNull(testContainerG);
303 assertEquals(1, testContainerG.getAvailableAugmentations().size());
304 final LeafSchemaNode testLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
305 QName.create(testModule.getQNameModule(), "test-leaf-g"));
306 assertNotNull(testLeafG);
307 final LeafSchemaNode augmentingTestLeafG = (LeafSchemaNode) testContainerG.getDataChildByName(
308 QName.create(testModule.getQNameModule(), "augmenting-test-leaf-g"));
309 assertNull(augmentingTestLeafG);
310 final AnyxmlSchemaNode augmentingTestAnyxmlG = (AnyxmlSchemaNode) testContainerG.getDataChildByName(
311 QName.create(testModule.getQNameModule(), "augmenting-test-anyxml-g"));
312 assertNotNull(augmentingTestAnyxmlG);
314 final ContainerSchemaNode testContainerH = (ContainerSchemaNode) testModule.getDataChildByName(
315 QName.create(testModule.getQNameModule(), "test-container-h"));
316 assertNotNull(testContainerH);
317 assertEquals(0, testContainerH.getChildNodes().size());
318 assertEquals(0, testContainerH.getUses().size());
320 final ContainerSchemaNode testContainerI = (ContainerSchemaNode) testModule.getDataChildByName(
321 QName.create(testModule.getQNameModule(), "test-container-i"));
322 assertNotNull(testContainerI);
323 assertEquals(1, testContainerI.getUses().size());
324 ContainerSchemaNode testGroupingSubContainer = (ContainerSchemaNode) testContainerI.getDataChildByName(
325 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
326 assertNotNull(testGroupingSubContainer);
327 LeafSchemaNode testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
328 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
329 assertNull(testGroupingLeaf);
331 final ContainerSchemaNode testContainerK = (ContainerSchemaNode) testModule.getDataChildByName(
332 QName.create(testModule.getQNameModule(), "test-container-k"));
333 assertNotNull(testContainerK);
334 assertEquals(1, testContainerK.getUses().size());
335 testGroupingSubContainer = (ContainerSchemaNode) testContainerK.getDataChildByName(
336 QName.create(testModule.getQNameModule(), "test-grouping-subcontainer"));
337 assertNotNull(testGroupingSubContainer);
338 assertEquals(1, testGroupingSubContainer.getAvailableAugmentations().size());
339 final LeafSchemaNode augmentingTestGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
340 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf"));
341 assertNull(augmentingTestGroupingLeaf);
342 final LeafSchemaNode augmentingTestGroupingLeaf2 = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
343 QName.create(testModule.getQNameModule(), "augmenting-test-grouping-leaf-2"));
344 assertNull(augmentingTestGroupingLeaf2);
345 testGroupingLeaf = (LeafSchemaNode) testGroupingSubContainer.getDataChildByName(
346 QName.create(testModule.getQNameModule(), "test-grouping-leaf"));
347 assertNull(testGroupingLeaf);