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
8 package org.opendaylight.yangtools.yang.parser.util;
10 import org.junit.Test;
11 import org.mockito.Mock;
12 import org.mockito.Mockito;
13 import org.mockito.MockitoAnnotations;
14 import org.opendaylight.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.model.api.ChoiceNode;
16 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
17 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
18 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
19 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
20 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
21 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
22 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
23 import org.opendaylight.yangtools.yang.model.api.Module;
24 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
25 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
26 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
27 import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
28 import org.opendaylight.yangtools.yang.model.util.Int32;
29 import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
30 import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
31 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
34 import java.io.IOException;
36 import java.net.URISyntaxException;
37 import java.text.ParseException;
38 import java.util.Collections;
41 import static org.junit.Assert.*;
43 public class SchemaContextUtilTest {
45 private SchemaContext mockSchemaContext;
47 private Module mockModule;
50 public void testFindDummyData() {
51 MockitoAnnotations.initMocks(this);
53 QName qName = QName.create("TestQName");
54 SchemaPath schemaPath = SchemaPath.create(Collections.singletonList(qName), true);
55 assertEquals("Should be null. Module TestQName not found", null,
56 SchemaContextUtil.findDataSchemaNode(mockSchemaContext, schemaPath));
58 RevisionAwareXPath xPath = new RevisionAwareXPathImpl("/bookstore/book/title", true);
59 assertEquals("Should be null. Module bookstore not found", null,
60 SchemaContextUtil.findDataSchemaNode(mockSchemaContext, mockModule, xPath));
62 SchemaNode schemaNode = Int32.getInstance();
63 RevisionAwareXPath xPathRelative = new RevisionAwareXPathImpl("../prefix", false);
64 assertEquals("Should be null, Module prefix not found", null,
65 SchemaContextUtil.findDataSchemaNodeForRelativeXPath(mockSchemaContext, mockModule, schemaNode,
68 assertEquals("Should be null. Module TestQName not found", null,
69 SchemaContextUtil.findNodeInSchemaContext(mockSchemaContext, Collections.singleton(qName)));
71 assertEquals("Should be null.", null, SchemaContextUtil.findParentModule(mockSchemaContext, schemaNode));
75 public void findNodeInSchemaContextTest() throws URISyntaxException, IOException, YangSyntaxErrorException,
78 File resourceFile = new File(getClass().getResource("/schema-context-util-test/my-module.yang").toURI());
79 File resourceDir = resourceFile.getParentFile();
81 YangParserImpl parser = YangParserImpl.getInstance();
82 SchemaContext context = parser.parseFile(resourceFile, resourceDir);
84 Module myModule = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"),
85 QName.parseRevision("2014-10-07"));
87 SchemaNode testNode = ((ContainerSchemaNode) myModule.getDataChildByName("my-container"))
88 .getDataChildByName("my-leaf-in-container");
90 SchemaPath path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"),
91 QName.create(myModule.getQNameModule(), "my-leaf-in-container"));
92 SchemaNode foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
94 assertNotNull(testNode);
95 assertNotNull(foundNode);
96 assertEquals(testNode, foundNode);
98 Set<RpcDefinition> rpcs = myModule.getRpcs();
99 RpcDefinition rpc = rpcs.iterator().next();
100 testNode = rpc.getInput().getDataChildByName("my-input-leaf");
102 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc"),
103 QName.create(myModule.getQNameModule(), "input"),
104 QName.create(myModule.getQNameModule(), "my-input-leaf"));
106 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
108 assertNotNull(testNode);
109 assertNotNull(foundNode);
110 assertEquals(testNode, foundNode);
112 rpc = myModule.getRpcs().iterator().next();
113 testNode = rpc.getOutput().getDataChildByName("my-output-leaf");
115 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc"),
116 QName.create(myModule.getQNameModule(), "output"),
117 QName.create(myModule.getQNameModule(), "my-output-leaf"));
119 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
121 assertNotNull(testNode);
122 assertNotNull(foundNode);
123 assertEquals(testNode, foundNode);
125 NotificationDefinition notification = myModule.getNotifications().iterator().next();
126 testNode = notification.getDataChildByName("my-notification-leaf");
128 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-notification"),
129 QName.create(myModule.getQNameModule(), "my-notification-leaf"));
131 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
133 assertNotNull(testNode);
134 assertNotNull(foundNode);
135 assertEquals(testNode, foundNode);
137 GroupingDefinition grouping = myModule.getGroupings().iterator().next();
138 testNode = ((ContainerSchemaNode) grouping.getDataChildByName("my-container-in-grouping"))
139 .getDataChildByName("my-leaf-in-grouping");
141 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-grouping"),
142 QName.create(myModule.getQNameModule(), "my-container-in-grouping"),
143 QName.create(myModule.getQNameModule(), "my-leaf-in-grouping"));
145 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
147 assertNotNull(testNode);
148 assertNotNull(foundNode);
149 assertEquals(testNode, foundNode);
151 testNode = ((ChoiceNode) myModule.getDataChildByName("my-choice")).getCaseNodeByName("one").getDataChildByName(
152 "my-choice-leaf-one");
154 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-choice"),
155 QName.create(myModule.getQNameModule(), "one"),
156 QName.create(myModule.getQNameModule(), "my-choice-leaf-one"));
157 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
159 assertNotNull(testNode);
160 assertNotNull(foundNode);
161 assertEquals(testNode, foundNode);
163 ListSchemaNode listNode = (ListSchemaNode) ((ContainerSchemaNode) myModule.getDataChildByName("my-container"))
164 .getDataChildByName("my-list");
166 testNode = listNode.getDataChildByName("my-leaf-in-list");
168 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"),
169 QName.create(myModule.getQNameModule(), "my-list"),
170 QName.create(myModule.getQNameModule(), "my-leaf-in-list"));
171 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
173 assertNotNull(testNode);
174 assertNotNull(foundNode);
175 assertEquals(testNode, foundNode);
177 listNode = (ListSchemaNode) ((ContainerSchemaNode) myModule.getDataChildByName("my-container"))
178 .getDataChildByName("my-list");
180 testNode = listNode.getDataChildByName("my-leaf-list-in-list");
182 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"),
183 QName.create(myModule.getQNameModule(), "my-list"),
184 QName.create(myModule.getQNameModule(), "my-leaf-list-in-list"));
185 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
187 assertNotNull(testNode);
188 assertNotNull(foundNode);
189 assertEquals(testNode, foundNode);
194 public void findNodeInSchemaContextTest2() throws URISyntaxException, IOException, YangSyntaxErrorException,
197 File resourceFile = new File(getClass().getResource("/schema-context-util-test/my-module.yang").toURI());
198 File resourceDir = resourceFile.getParentFile();
200 YangParserImpl parser = YangParserImpl.getInstance();
201 SchemaContext context = parser.parseFile(resourceFile, resourceDir);
203 Module myModule = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"),
204 QName.parseRevision("2014-10-07"));
206 SchemaNode testNode = ((ContainerSchemaNode) myModule.getDataChildByName("my-container"))
207 .getDataChildByName("my-leaf-not-in-container");
209 SchemaPath path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"),
210 QName.create(myModule.getQNameModule(), "my-leaf-not-in-container"));
211 SchemaNode foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
213 assertNull(testNode);
214 assertNull(foundNode);
216 Set<RpcDefinition> rpcs = myModule.getRpcs();
217 RpcDefinition rpc = rpcs.iterator().next();
218 testNode = rpc.getInput().getDataChildByName("no-input-leaf");
220 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc"),
221 QName.create(myModule.getQNameModule(), "input"),
222 QName.create(myModule.getQNameModule(), "no-input-leaf"));
224 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
226 assertNull(testNode);
227 assertNull(foundNode);
229 NotificationDefinition notification = myModule.getNotifications().iterator().next();
230 testNode = notification.getDataChildByName("no-notification-leaf");
232 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-notification"),
233 QName.create(myModule.getQNameModule(), "no-notification-leaf"));
235 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
237 assertNull(testNode);
238 assertNull(foundNode);
240 GroupingDefinition grouping = myModule.getGroupings().iterator().next();
241 testNode = ((ContainerSchemaNode) grouping.getDataChildByName("my-container-in-grouping"))
242 .getDataChildByName("no-leaf-in-grouping");
244 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-grouping"),
245 QName.create(myModule.getQNameModule(), "my-container-in-grouping"),
246 QName.create(myModule.getQNameModule(), "no-leaf-in-grouping"));
248 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
250 assertNull(testNode);
251 assertNull(foundNode);
253 testNode = ((ChoiceNode) myModule.getDataChildByName("my-choice")).getCaseNodeByName("one").getDataChildByName(
256 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-choice"),
257 QName.create(myModule.getQNameModule(), "one"),
258 QName.create(myModule.getQNameModule(), "no-choice-leaf"));
259 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
261 assertNull(testNode);
262 assertNull(foundNode);
264 ListSchemaNode listNode = (ListSchemaNode) ((ContainerSchemaNode) myModule.getDataChildByName("my-container"))
265 .getDataChildByName("my-list");
267 testNode = listNode.getDataChildByName("no-leaf-in-list");
269 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"),
270 QName.create(myModule.getQNameModule(), "my-list"),
271 QName.create(myModule.getQNameModule(), "no-leaf-in-list"));
272 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
274 assertNull(testNode);
275 assertNull(foundNode);
277 listNode = (ListSchemaNode) ((ContainerSchemaNode) myModule.getDataChildByName("my-container"))
278 .getDataChildByName("my-list");
280 testNode = listNode.getDataChildByName("no-leaf-list-in-list");
282 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"),
283 QName.create(myModule.getQNameModule(), "my-list"),
284 QName.create(myModule.getQNameModule(), "no-leaf-list-in-list"));
285 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
287 assertNull(testNode);
288 assertNull(foundNode);
293 public void findNodeInSchemaContextTest3() throws URISyntaxException, IOException, YangSyntaxErrorException,
296 File resourceFile = new File(getClass().getResource("/schema-context-util-test/my-module.yang").toURI());
297 File resourceDir = resourceFile.getParentFile();
299 YangParserImpl parser = YangParserImpl.getInstance();
300 SchemaContext context = parser.parseFile(resourceFile, resourceDir);
302 Module myModule = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"),
303 QName.parseRevision("2014-10-07"));
305 SchemaNode testNode = myModule.getDataChildByName("my-container");
307 SchemaPath path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"));
308 SchemaNode foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
310 assertNotNull(testNode);
311 assertNotNull(foundNode);
312 assertEquals(testNode, foundNode);
314 testNode = myModule.getRpcs().iterator().next();
316 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc"));
317 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
319 assertNotNull(testNode);
320 assertNotNull(foundNode);
321 assertEquals(testNode, foundNode);
323 testNode = myModule.getNotifications().iterator().next();
325 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-notification"));
326 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
328 assertNotNull(testNode);
329 assertNotNull(foundNode);
330 assertEquals(testNode, foundNode);
332 testNode = myModule.getGroupings().iterator().next();
334 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-grouping"));
335 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
337 assertNotNull(testNode);
338 assertNotNull(foundNode);
339 assertEquals(testNode, foundNode);
341 testNode = myModule.getDataChildByName("my-choice");
343 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-choice"));
344 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
346 assertNotNull(testNode);
347 assertNotNull(foundNode);
348 assertEquals(testNode, foundNode);
350 testNode = ((ContainerSchemaNode) myModule.getDataChildByName("my-container")).getDataChildByName("my-list");
352 path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"),
353 QName.create(myModule.getQNameModule(), "my-list"));
354 foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot());
356 assertNotNull(testNode);
357 assertNotNull(foundNode);
358 assertEquals(testNode, foundNode);
363 public void findParentModuleTest() throws URISyntaxException, IOException, YangSyntaxErrorException, ParseException {
365 File resourceFile = new File(getClass().getResource("/schema-context-util-test/my-module.yang").toURI());
366 File resourceDir = resourceFile.getParentFile();
368 YangParserImpl parser = YangParserImpl.getInstance();
369 SchemaContext context = parser.parseFile(resourceFile, resourceDir);
371 Module myModule = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"),
372 QName.parseRevision("2014-10-07"));
374 DataSchemaNode node = myModule.getDataChildByName("my-container");
376 Module foundModule = SchemaContextUtil.findParentModule(context, node);
378 assertEquals(myModule, foundModule);
381 @Test(expected = IllegalArgumentException.class)
382 public void findParentModuleIllegalArgumentTest() {
384 SchemaContext mockContext = Mockito.mock(SchemaContext.class);
385 SchemaContextUtil.findParentModule(mockContext, null);
389 @Test(expected = IllegalArgumentException.class)
390 public void findParentModuleIllegalArgumentTest2() {
392 SchemaNode mockSchemaNode = Mockito.mock(SchemaNode.class);
393 SchemaContextUtil.findParentModule(null, mockSchemaNode);
397 @Test(expected = IllegalStateException.class)
398 public void findParentModuleIllegalStateTest() {
400 SchemaContext mockContext = Mockito.mock(SchemaContext.class);
401 SchemaNode mockSchemaNode = Mockito.mock(SchemaNode.class);
402 Mockito.when(mockSchemaNode.getPath()).thenReturn(null);
403 SchemaContextUtil.findParentModule(mockContext, mockSchemaNode);
407 @Test(expected = IllegalArgumentException.class)
408 public void findDataSchemaNodeIllegalArgumentTest() {
410 SchemaContext mockContext = Mockito.mock(SchemaContext.class);
411 SchemaContextUtil.findDataSchemaNode(mockContext, null);
415 @Test(expected = IllegalArgumentException.class)
416 public void findDataSchemaNodeIllegalArgumentTest2() {
418 SchemaPath mockSchemaPath = Mockito.mock(SchemaPath.class);
419 SchemaContextUtil.findDataSchemaNode(null, mockSchemaPath);
424 public void findDataSchemaNodeTest() throws URISyntaxException, IOException, YangSyntaxErrorException {
426 File resourceFile = new File(getClass().getResource("/schema-context-util-test/my-module.yang").toURI());
427 File resourceDir = resourceFile.getParentFile();
429 YangParserImpl parser = YangParserImpl.getInstance();
430 SchemaContext context = parser.parseFile(resourceFile, resourceDir);
432 Module module = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"),
433 QName.parseRevision("2014-10-07"));
434 Module importedModule = context.findModuleByNamespaceAndRevision(new URI("uri:imported-module"),
435 QName.parseRevision("2014-10-07"));
437 SchemaNode testNode = ((ContainerSchemaNode) importedModule.getDataChildByName("my-imported-container"))
438 .getDataChildByName("my-imported-leaf");
440 RevisionAwareXPath xpath = new RevisionAwareXPathImpl("imp:my-imported-container/imp:my-imported-leaf", true);
442 SchemaNode foundNode = SchemaContextUtil.findDataSchemaNode(context, module, xpath);
444 assertNotNull(foundNode);
445 assertNotNull(testNode);
446 assertEquals(testNode, foundNode);
451 public void findDataSchemaNodeTest2() throws URISyntaxException, IOException, YangSyntaxErrorException {
452 // findDataSchemaNode(final SchemaContext context, final Module module,
453 // final RevisionAwareXPath nonCondXPath) {
455 File resourceFile = new File(getClass().getResource("/schema-context-util-test/my-module.yang").toURI());
456 File resourceDir = resourceFile.getParentFile();
458 YangParserImpl parser = YangParserImpl.getInstance();
459 SchemaContext context = parser.parseFile(resourceFile, resourceDir);
461 Module module = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"),
462 QName.parseRevision("2014-10-07"));
464 GroupingDefinition grouping = module.getGroupings().iterator().next();
465 SchemaNode testNode = grouping.getDataChildByName("my-leaf-in-gouping2");
467 RevisionAwareXPath xpath = new RevisionAwareXPathImpl("my:my-grouping/my:my-leaf-in-gouping2", true);
469 SchemaNode foundNode = SchemaContextUtil.findDataSchemaNode(context, module, xpath);
471 assertNotNull(foundNode);
472 assertNotNull(testNode);
473 assertEquals(testNode, foundNode);
477 @Test(expected = IllegalArgumentException.class)
478 public void findDataSchemaNodeFromXPathIllegalArgumentTest() {
480 SchemaContext mockContext = Mockito.mock(SchemaContext.class);
481 Module module = Mockito.mock(Module.class);
483 SchemaContextUtil.findDataSchemaNode(mockContext, module, null);
487 @Test(expected = IllegalArgumentException.class)
488 public void findDataSchemaNodeFromXPathIllegalArgumentTest2() {
490 SchemaContext mockContext = Mockito.mock(SchemaContext.class);
491 RevisionAwareXPath xpath = new RevisionAwareXPathImpl("my:my-grouping/my:my-leaf-in-gouping2", true);
493 SchemaContextUtil.findDataSchemaNode(mockContext, null, xpath);
497 @Test(expected = IllegalArgumentException.class)
498 public void findDataSchemaNodeFromXPathIllegalArgumentTest3() {
500 Module module = Mockito.mock(Module.class);
501 RevisionAwareXPath xpath = new RevisionAwareXPathImpl("my:my-grouping/my:my-leaf-in-gouping2", true);
503 SchemaContextUtil.findDataSchemaNode(null, module, xpath);
507 @Test(expected = IllegalArgumentException.class)
508 public void findDataSchemaNodeFromXPathIllegalArgumentTest4() {
510 SchemaContext mockContext = Mockito.mock(SchemaContext.class);
511 Module module = Mockito.mock(Module.class);
512 RevisionAwareXPath xpath = new RevisionAwareXPathImpl("my:my-grouping[@con='NULL']/my:my-leaf-in-gouping2",
515 SchemaContextUtil.findDataSchemaNode(mockContext, module, xpath);
520 public void findDataSchemaNodeFromXPathNullTest() {
522 SchemaContext mockContext = Mockito.mock(SchemaContext.class);
523 Module module = Mockito.mock(Module.class);
524 RevisionAwareXPath xpath = Mockito.mock(RevisionAwareXPath.class);
526 Mockito.when(xpath.toString()).thenReturn(null);
527 assertNull(SchemaContextUtil.findDataSchemaNode(mockContext, module, xpath));
532 public void findDataSchemaNodeFromXPathNullTest2() {
534 SchemaContext mockContext = Mockito.mock(SchemaContext.class);
535 Module module = Mockito.mock(Module.class);
536 RevisionAwareXPath xpath = new RevisionAwareXPathImpl("my:my-grouping/my:my-leaf-in-gouping2", false);
538 assertNull(SchemaContextUtil.findDataSchemaNode(mockContext, module, xpath));