82b3dbc10989c904a1698bffbc3ad710d7b9c8e9
[yangtools.git] / yang / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / IfFeatureResolutionTest.java
1 /*
2  * Copyright (c) 2016 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.yangtools.yang.stmt;
10
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;
15
16 import com.google.common.collect.ImmutableSet;
17 import java.util.Set;
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;
28
29 public class IfFeatureResolutionTest {
30
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");
33
34     @Test
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"));
41
42         final SchemaContext schemaContext = RFC7950Reactors.defaultReactor().newBuild()
43                 .addSources(FOO_MODULE, BAR_MODULE)
44                 .setSupportedFeatures(supportedFeatures)
45                 .buildEffective();
46         assertNotNull(schemaContext);
47
48         final Module testModule = schemaContext.findModule("foo").get();
49         assertEquals(9, testModule.getChildNodes().size());
50
51         final ContainerSchemaNode testContainerA = (ContainerSchemaNode) testModule.getDataChildByName(
52                 QName.create(testModule.getQNameModule(), "test-container-a"));
53         assertNull(testContainerA);
54
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);
61
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);
68
69         final ContainerSchemaNode testContainerD = (ContainerSchemaNode) testModule.getDataChildByName(
70                 QName.create(testModule.getQNameModule(), "test-container-d"));
71         assertNull(testContainerD);
72
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);
82
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);
89
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);
103
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());
109
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);
120
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);
127
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);
142     }
143
144     @Test
145     public void testAllFeaturesSupported() throws ReactorException {
146         final SchemaContext schemaContext = RFC7950Reactors.defaultReactor().newBuild()
147                 .addSources(FOO_MODULE, BAR_MODULE)
148                 .buildEffective();
149         assertNotNull(schemaContext);
150
151         final Module testModule = schemaContext.findModules("foo").iterator().next();
152         assertNotNull(testModule);
153
154         assertEquals(11, testModule.getChildNodes().size());
155
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);
162
163
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);
170
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);
177
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);
184
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);
194
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);
207
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);
221
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);
232
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);
243
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);
250
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);
268     }
269
270     @Test
271     public void testNoFeaturesSupported() throws ReactorException {
272         final SchemaContext schemaContext = RFC7950Reactors.defaultReactor().newBuild()
273                 .addSources(FOO_MODULE, BAR_MODULE)
274                 .setSupportedFeatures(ImmutableSet.of())
275                 .buildEffective();
276         assertNotNull(schemaContext);
277
278         final Module testModule = schemaContext.findModules("foo").iterator().next();
279         assertNotNull(testModule);
280
281         assertEquals(6, testModule.getChildNodes().size());
282
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);
292
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);
299
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);
313
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());
319
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);
330
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);
348     }
349 }