/* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.yangtools.yang.parser.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.text.ParseException; import java.util.Collections; import org.junit.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl; import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.stmt.TestUtils; public class SchemaContextUtilTest { @Mock private SchemaContext mockSchemaContext; @Mock private Module mockModule; @Test public void testFindDummyData() { MockitoAnnotations.initMocks(this); final QName qName = QName.create("TestQName"); final SchemaPath schemaPath = SchemaPath.create(Collections.singletonList(qName), true); assertEquals("Should be null. Module TestQName not found", null, SchemaContextUtil.findDataSchemaNode(mockSchemaContext, schemaPath)); final RevisionAwareXPath xPath = new RevisionAwareXPathImpl("/bookstore/book/title", true); assertEquals("Should be null. Module bookstore not found", null, SchemaContextUtil.findDataSchemaNode(mockSchemaContext, mockModule, xPath)); final SchemaNode schemaNode = BaseTypes.int32Type(); final RevisionAwareXPath xPathRelative = new RevisionAwareXPathImpl("../prefix", false); assertEquals("Should be null, Module prefix not found", null, SchemaContextUtil.findDataSchemaNodeForRelativeXPath(mockSchemaContext, mockModule, schemaNode, xPathRelative)); assertEquals("Should be null. Module TestQName not found", null, SchemaContextUtil.findNodeInSchemaContext(mockSchemaContext, Collections.singleton(qName))); assertEquals("Should be null.", null, SchemaContextUtil.findParentModule(mockSchemaContext, schemaNode)); } @Test public void findNodeInSchemaContextTest() throws URISyntaxException, IOException, YangSyntaxErrorException, ParseException, ReactorException { final SchemaContext context = TestUtils.parseYangSources("/schema-context-util-test"); final Module myModule = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"), QName.parseRevision("2014-10-07")); SchemaNode testNode = ((ContainerSchemaNode) myModule.getDataChildByName(QName.create( myModule.getQNameModule(), "my-container"))).getDataChildByName(QName.create(myModule.getQNameModule(), "my-leaf-in-container")); SchemaPath path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"), QName.create(myModule.getQNameModule(), "my-leaf-in-container")); SchemaNode foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); RpcDefinition rpc = getRpcByName(myModule, "my-rpc"); testNode = rpc.getInput().getDataChildByName(QName.create(myModule.getQNameModule(), "my-input-leaf")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc"), QName.create(myModule.getQNameModule(), "input"), QName.create(myModule.getQNameModule(), "my-input-leaf")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); rpc = getRpcByName(myModule, "my-rpc"); testNode = rpc.getOutput().getDataChildByName(QName.create(myModule.getQNameModule(), "my-output-leaf")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc"), QName.create(myModule.getQNameModule(), "output"), QName.create(myModule.getQNameModule(), "my-output-leaf")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); final NotificationDefinition notification = myModule.getNotifications().iterator().next(); testNode = notification.getDataChildByName(QName.create(myModule.getQNameModule(), "my-notification-leaf")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-notification"), QName.create(myModule.getQNameModule(), "my-notification-leaf")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); final GroupingDefinition grouping = getGroupingByName(myModule, "my-grouping"); testNode = ((ContainerSchemaNode) grouping.getDataChildByName(QName.create(myModule.getQNameModule(), "my-container-in-grouping"))).getDataChildByName(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-grouping"), QName.create(myModule.getQNameModule(), "my-container-in-grouping"), QName.create(myModule.getQNameModule(), "my-leaf-in-grouping")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = ((ChoiceSchemaNode) myModule .getDataChildByName(QName.create(myModule.getQNameModule(), "my-choice"))).getCaseNodeByName("one") .getDataChildByName(QName.create(myModule.getQNameModule(), "my-choice-leaf-one")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-choice"), QName.create(myModule.getQNameModule(), "one"), QName.create(myModule.getQNameModule(), "my-choice-leaf-one")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); ListSchemaNode listNode = (ListSchemaNode) ((ContainerSchemaNode) myModule.getDataChildByName(QName.create( myModule.getQNameModule(), "my-container"))).getDataChildByName(QName.create(myModule.getQNameModule(), "my-list")); testNode = listNode.getDataChildByName(QName.create(myModule.getQNameModule(), "my-leaf-in-list")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"), QName.create(myModule.getQNameModule(), "my-list"), QName.create(myModule.getQNameModule(), "my-leaf-in-list")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); listNode = (ListSchemaNode) ((ContainerSchemaNode) myModule.getDataChildByName(QName.create( myModule.getQNameModule(), "my-container"))).getDataChildByName(QName.create(myModule.getQNameModule(), "my-list")); testNode = listNode.getDataChildByName(QName.create(myModule.getQNameModule(), "my-leaf-list-in-list")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"), QName.create(myModule.getQNameModule(), "my-list"), QName.create(myModule.getQNameModule(), "my-leaf-list-in-list")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); } @Test public void findNodeInSchemaContextTest2() throws URISyntaxException, IOException, YangSyntaxErrorException, ParseException, ReactorException { final SchemaContext context = TestUtils.parseYangSources("/schema-context-util-test"); final Module myModule = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"), QName.parseRevision("2014-10-07")); SchemaNode testNode = ((ContainerSchemaNode) myModule.getDataChildByName(QName.create( myModule.getQNameModule(), "my-container"))).getDataChildByName(QName.create(myModule.getQNameModule(), "my-leaf-not-in-container")); SchemaPath path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"), QName.create(myModule.getQNameModule(), "my-leaf-not-in-container")); SchemaNode foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); final RpcDefinition rpc = getRpcByName(myModule, "my-rpc"); testNode = rpc.getInput().getDataChildByName(QName.create(myModule.getQNameModule(), "no-input-leaf")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc"), QName.create(myModule.getQNameModule(), "input"), QName.create(myModule.getQNameModule(), "no-input-leaf")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); final NotificationDefinition notification = myModule.getNotifications().iterator().next(); testNode = notification.getDataChildByName(QName.create(myModule.getQNameModule(), "no-notification-leaf")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-notification"), QName.create(myModule.getQNameModule(), "no-notification-leaf")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); final GroupingDefinition grouping = getGroupingByName(myModule, "my-grouping"); testNode = ((ContainerSchemaNode) grouping.getDataChildByName(QName.create(myModule.getQNameModule(), "my-container-in-grouping"))).getDataChildByName(QName.create(myModule.getQNameModule(), "no-leaf-in-grouping")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-grouping"), QName.create(myModule.getQNameModule(), "my-container-in-grouping"), QName.create(myModule.getQNameModule(), "no-leaf-in-grouping")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); testNode = ((ChoiceSchemaNode) myModule .getDataChildByName(QName.create(myModule.getQNameModule(), "my-choice"))).getCaseNodeByName("one") .getDataChildByName(QName.create(myModule.getQNameModule(), "no-choice-leaf")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-choice"), QName.create(myModule.getQNameModule(), "one"), QName.create(myModule.getQNameModule(), "no-choice-leaf")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); ListSchemaNode listNode = (ListSchemaNode) ((ContainerSchemaNode) myModule.getDataChildByName(QName.create( myModule.getQNameModule(), "my-container"))).getDataChildByName(QName.create(myModule.getQNameModule(), "my-list")); testNode = listNode.getDataChildByName(QName.create(myModule.getQNameModule(), "no-leaf-in-list")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"), QName.create(myModule.getQNameModule(), "my-list"), QName.create(myModule.getQNameModule(), "no-leaf-in-list")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); listNode = (ListSchemaNode) ((ContainerSchemaNode) myModule.getDataChildByName(QName.create( myModule.getQNameModule(), "my-container"))).getDataChildByName(QName.create(myModule.getQNameModule(), "my-list")); testNode = listNode.getDataChildByName(QName.create(myModule.getQNameModule(), "no-leaf-list-in-list")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"), QName.create(myModule.getQNameModule(), "my-list"), QName.create(myModule.getQNameModule(), "no-leaf-list-in-list")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); } @Test public void findNodeInSchemaContextTest3() throws URISyntaxException, IOException, YangSyntaxErrorException, ParseException, ReactorException { final SchemaContext context = TestUtils.parseYangSources("/schema-context-util-test"); final Module myModule = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"), QName.parseRevision("2014-10-07")); SchemaNode testNode = myModule.getDataChildByName(QName.create(myModule.getQNameModule(), "my-container")); SchemaPath path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container")); SchemaNode foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = getRpcByName(myModule, "my-rpc"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = myModule.getNotifications().iterator().next(); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-notification")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = getGroupingByName(myModule, "my-grouping"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-grouping")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = myModule.getDataChildByName(QName.create(myModule.getQNameModule(), "my-choice")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-choice")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = ((ContainerSchemaNode) myModule.getDataChildByName(QName.create(myModule.getQNameModule(), "my-container"))).getDataChildByName(QName.create(myModule.getQNameModule(), "my-list")); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"), QName.create(myModule.getQNameModule(), "my-list")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); } @Test public void findParentModuleTest() throws URISyntaxException, IOException, YangSyntaxErrorException, ParseException, ReactorException { final SchemaContext context = TestUtils.parseYangSources("/schema-context-util-test"); final Module myModule = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"), QName.parseRevision("2014-10-07")); final DataSchemaNode node = myModule .getDataChildByName(QName.create(myModule.getQNameModule(), "my-container")); final Module foundModule = SchemaContextUtil.findParentModule(context, node); assertEquals(myModule, foundModule); } @Test(expected = IllegalArgumentException.class) public void findParentModuleIllegalArgumentTest() { final SchemaContext mockContext = Mockito.mock(SchemaContext.class); SchemaContextUtil.findParentModule(mockContext, null); } @Test(expected = IllegalArgumentException.class) public void findParentModuleIllegalArgumentTest2() { final SchemaNode mockSchemaNode = Mockito.mock(SchemaNode.class); SchemaContextUtil.findParentModule(null, mockSchemaNode); } @Test(expected = IllegalStateException.class) public void findParentModuleIllegalStateTest() { final SchemaContext mockContext = Mockito.mock(SchemaContext.class); final SchemaNode mockSchemaNode = Mockito.mock(SchemaNode.class); Mockito.when(mockSchemaNode.getPath()).thenReturn(null); SchemaContextUtil.findParentModule(mockContext, mockSchemaNode); } @Test(expected = IllegalArgumentException.class) public void findDataSchemaNodeIllegalArgumentTest() { final SchemaContext mockContext = Mockito.mock(SchemaContext.class); SchemaContextUtil.findDataSchemaNode(mockContext, null); } @Test(expected = IllegalArgumentException.class) public void findDataSchemaNodeIllegalArgumentTest2() { final SchemaPath mockSchemaPath = Mockito.mock(SchemaPath.class); SchemaContextUtil.findDataSchemaNode(null, mockSchemaPath); } @Test public void findDataSchemaNodeTest() throws URISyntaxException, IOException, YangSyntaxErrorException, ReactorException { final SchemaContext context = TestUtils.parseYangSources("/schema-context-util-test"); final Module module = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"), QName.parseRevision("2014-10-07")); final Module importedModule = context.findModuleByNamespaceAndRevision(new URI("uri:imported-module"), QName.parseRevision("2014-10-07")); final SchemaNode testNode = ((ContainerSchemaNode) importedModule.getDataChildByName(QName.create( importedModule.getQNameModule(), "my-imported-container"))).getDataChildByName(QName.create( importedModule.getQNameModule(), "my-imported-leaf")); final RevisionAwareXPath xpath = new RevisionAwareXPathImpl("imp:my-imported-container/imp:my-imported-leaf", true); final SchemaNode foundNode = SchemaContextUtil.findDataSchemaNode(context, module, xpath); assertNotNull(foundNode); assertNotNull(testNode); assertEquals(testNode, foundNode); } @Test public void findDataSchemaNodeTest2() throws URISyntaxException, IOException, YangSyntaxErrorException, ReactorException { // findDataSchemaNode(final SchemaContext context, final Module module, // final RevisionAwareXPath nonCondXPath) { final SchemaContext context = TestUtils.parseYangSources("/schema-context-util-test"); final Module module = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"), QName.parseRevision("2014-10-07")); final GroupingDefinition grouping = getGroupingByName(module, "my-grouping"); final SchemaNode testNode = grouping.getDataChildByName(QName.create(module.getQNameModule(), "my-leaf-in-gouping2")); final RevisionAwareXPath xpath = new RevisionAwareXPathImpl("my:my-grouping/my:my-leaf-in-gouping2", true); final SchemaNode foundNode = SchemaContextUtil.findDataSchemaNode(context, module, xpath); assertNotNull(foundNode); assertNotNull(testNode); assertEquals(testNode, foundNode); } @Test(expected = IllegalArgumentException.class) public void findDataSchemaNodeFromXPathIllegalArgumentTest() { final SchemaContext mockContext = Mockito.mock(SchemaContext.class); final Module module = Mockito.mock(Module.class); SchemaContextUtil.findDataSchemaNode(mockContext, module, null); } @Test(expected = IllegalArgumentException.class) public void findDataSchemaNodeFromXPathIllegalArgumentTest2() { final SchemaContext mockContext = Mockito.mock(SchemaContext.class); final RevisionAwareXPath xpath = new RevisionAwareXPathImpl("my:my-grouping/my:my-leaf-in-gouping2", true); SchemaContextUtil.findDataSchemaNode(mockContext, null, xpath); } @Test(expected = IllegalArgumentException.class) public void findDataSchemaNodeFromXPathIllegalArgumentTest3() { final Module module = Mockito.mock(Module.class); final RevisionAwareXPath xpath = new RevisionAwareXPathImpl("my:my-grouping/my:my-leaf-in-gouping2", true); SchemaContextUtil.findDataSchemaNode(null, module, xpath); } @Test(expected = IllegalArgumentException.class) public void findDataSchemaNodeFromXPathIllegalArgumentTest4() { final SchemaContext mockContext = Mockito.mock(SchemaContext.class); final Module module = Mockito.mock(Module.class); final RevisionAwareXPath xpath = new RevisionAwareXPathImpl( "my:my-grouping[@con='NULL']/my:my-leaf-in-gouping2", true); SchemaContextUtil.findDataSchemaNode(mockContext, module, xpath); } @Test public void findDataSchemaNodeFromXPathNullTest() { final SchemaContext mockContext = Mockito.mock(SchemaContext.class); final Module module = Mockito.mock(Module.class); final RevisionAwareXPath xpath = Mockito.mock(RevisionAwareXPath.class); Mockito.when(xpath.toString()).thenReturn(null); assertNull(SchemaContextUtil.findDataSchemaNode(mockContext, module, xpath)); } @Test public void findDataSchemaNodeFromXPathNullTest2() { final SchemaContext mockContext = Mockito.mock(SchemaContext.class); final Module module = Mockito.mock(Module.class); final RevisionAwareXPath xpath = new RevisionAwareXPathImpl("my:my-grouping/my:my-leaf-in-gouping2", false); assertNull(SchemaContextUtil.findDataSchemaNode(mockContext, module, xpath)); } @Test public void findNodeInSchemaContextGroupingsTest() throws URISyntaxException, IOException, YangSyntaxErrorException, ParseException, ReactorException { final SchemaContext context = TestUtils.parseYangSources("/schema-context-util-test"); final Module myModule = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"), QName.parseRevision("2014-10-07")); // find grouping in container DataNodeContainer dataContainer = (DataNodeContainer) myModule.getDataChildByName(QName.create( myModule.getQNameModule(), "my-container")); SchemaNode testNode = getGroupingByName(dataContainer, "my-grouping-in-container"); SchemaPath path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"), QName.create(myModule.getQNameModule(), "my-grouping-in-container")); SchemaNode foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = ((GroupingDefinition) testNode).getDataChildByName(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-container")); path = path.createChild(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-container")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); // find grouping in list dataContainer = (DataNodeContainer) ((DataNodeContainer) myModule.getDataChildByName(QName.create( myModule.getQNameModule(), "my-container"))).getDataChildByName(QName.create(myModule.getQNameModule(), "my-list")); testNode = getGroupingByName(dataContainer, "my-grouping-in-list"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"), QName.create(myModule.getQNameModule(), "my-list"), QName.create(myModule.getQNameModule(), "my-grouping-in-list")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = ((GroupingDefinition) testNode).getDataChildByName(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-list")); path = path.createChild(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-list")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); // find grouping in grouping dataContainer = getGroupingByName(myModule, "my-grouping"); testNode = getGroupingByName(dataContainer, "my-grouping-in-grouping"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-grouping"), QName.create(myModule.getQNameModule(), "my-grouping-in-grouping")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = ((GroupingDefinition) testNode).getDataChildByName(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-grouping")); path = path.createChild(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-grouping")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); // find grouping in rpc final RpcDefinition rpc = getRpcByName(myModule, "my-rpc"); for (final GroupingDefinition grouping : rpc.getGroupings()) { if (grouping.getQName().getLocalName().equals("my-grouping-in-rpc")) { testNode = grouping; } } path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc"), QName.create(myModule.getQNameModule(), "my-grouping-in-rpc")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = ((GroupingDefinition) testNode).getDataChildByName(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-rpc")); path = path.createChild(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-rpc")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); // find grouping in output dataContainer = getRpcByName(myModule, "my-rpc").getOutput(); testNode = getGroupingByName(dataContainer, "my-grouping-in-output"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc"), QName.create(myModule.getQNameModule(), "output"), QName.create(myModule.getQNameModule(), "my-grouping-in-output")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = ((GroupingDefinition) testNode).getDataChildByName(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-output")); path = path.createChild(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-output")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); // find grouping in input dataContainer = getRpcByName(myModule, "my-rpc").getInput(); testNode = getGroupingByName(dataContainer, "my-grouping-in-input"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc"), QName.create(myModule.getQNameModule(), "input"), QName.create(myModule.getQNameModule(), "my-grouping-in-input")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = ((GroupingDefinition) testNode).getDataChildByName(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-input")); path = path.createChild(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-input")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); // find grouping in notification dataContainer = getNotificationByName(myModule, "my-notification"); testNode = getGroupingByName(dataContainer, "my-grouping-in-notification"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-notification"), QName.create(myModule.getQNameModule(), "my-grouping-in-notification")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = ((GroupingDefinition) testNode).getDataChildByName(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-notification")); path = path.createChild(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-notification")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); // find grouping in case dataContainer = (DataNodeContainer) ((ChoiceSchemaNode) myModule.getDataChildByName(QName.create( myModule.getQNameModule(), "my-choice"))).getCaseNodeByName("one").getDataChildByName( QName.create(myModule.getQNameModule(), "my-container-in-case")); testNode = getGroupingByName(dataContainer, "my-grouping-in-case"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-choice"), QName.create(myModule.getQNameModule(), "one"), QName.create(myModule.getQNameModule(), "my-container-in-case"), QName.create(myModule.getQNameModule(), "my-grouping-in-case")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); testNode = ((GroupingDefinition) testNode).getDataChildByName(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-case")); path = path.createChild(QName.create(myModule.getQNameModule(), "my-leaf-in-grouping-in-case")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); } @Test public void findNodeInSchemaContextGroupingsTest2() throws URISyntaxException, IOException, YangSyntaxErrorException, ParseException, ReactorException { final SchemaContext context = TestUtils.parseYangSources("/schema-context-util-test"); final Module myModule = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"), QName.parseRevision("2014-10-07")); // find grouping in container DataNodeContainer dataContainer = (DataNodeContainer) myModule.getDataChildByName(QName.create( myModule.getQNameModule(), "my-container")); SchemaNode testNode = getGroupingByName(dataContainer, "my-grouping-in-container2"); SchemaPath path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"), QName.create(myModule.getQNameModule(), "my-grouping-in-container2")); SchemaNode foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); // find grouping in list dataContainer = (DataNodeContainer) ((DataNodeContainer) myModule.getDataChildByName(QName.create( myModule.getQNameModule(), "my-container"))).getDataChildByName(QName.create(myModule.getQNameModule(), "my-list")); testNode = getGroupingByName(dataContainer, "my-grouping-in-list2"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-container"), QName.create(myModule.getQNameModule(), "my-list"), QName.create(myModule.getQNameModule(), "my-grouping-in-list2")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); // find grouping in grouping dataContainer = getGroupingByName(myModule, "my-grouping"); testNode = getGroupingByName(dataContainer, "my-grouping-in-grouping2"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-grouping"), QName.create(myModule.getQNameModule(), "my-grouping-in-grouping2")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); // find grouping in rpc final RpcDefinition rpc = getRpcByName(myModule, "my-rpc"); for (final GroupingDefinition grouping : rpc.getGroupings()) { if (grouping.getQName().getLocalName().equals("my-grouping-in-rpc2")) { testNode = grouping; } } path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc"), QName.create(myModule.getQNameModule(), "my-grouping-in-rpc2")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); // find grouping in output dataContainer = getRpcByName(myModule, "my-rpc").getOutput(); testNode = getGroupingByName(dataContainer, "my-grouping-in-output2"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc"), QName.create(myModule.getQNameModule(), "output"), QName.create(myModule.getQNameModule(), "my-grouping-in-output2")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); // find grouping in input dataContainer = getRpcByName(myModule, "my-rpc").getInput(); testNode = getGroupingByName(dataContainer, "my-grouping-in-input2"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-rpc"), QName.create(myModule.getQNameModule(), "input"), QName.create(myModule.getQNameModule(), "my-grouping-in-input2")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); // find grouping in notification dataContainer = getNotificationByName(myModule, "my-notification"); testNode = getGroupingByName(dataContainer, "my-grouping-in-notification2"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-notification"), QName.create(myModule.getQNameModule(), "my-grouping-in-notification2")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); // find grouping in case dataContainer = (DataNodeContainer) ((ChoiceSchemaNode) myModule.getDataChildByName(QName.create( myModule.getQNameModule(), "my-choice"))).getCaseNodeByName("one").getDataChildByName( QName.create(myModule.getQNameModule(), "my-container-in-case")); testNode = getGroupingByName(dataContainer, "my-grouping-in-case2"); path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-choice"), QName.create(myModule.getQNameModule(), "one"), QName.create(myModule.getQNameModule(), "my-container-in-case"), QName.create(myModule.getQNameModule(), "my-grouping-in-case2")); foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNull(testNode); assertNull(foundNode); } private static GroupingDefinition getGroupingByName(final DataNodeContainer dataNodeContainer, final String name) { for (final GroupingDefinition grouping : dataNodeContainer.getGroupings()) { if (grouping.getQName().getLocalName().equals(name)) { return grouping; } } return null; } private static RpcDefinition getRpcByName(final Module module, final String name) { for (final RpcDefinition rpc : module.getRpcs()) { if (rpc.getQName().getLocalName().equals(name)) { return rpc; } } return null; } private static NotificationDefinition getNotificationByName(final Module module, final String name) { for (final NotificationDefinition notification : module.getNotifications()) { if (notification.getQName().getLocalName().equals(name)) { return notification; } } return null; } @Test public void findNodeInSchemaContextTheSameNameOfSiblingsTest() throws URISyntaxException, IOException, YangSyntaxErrorException, ParseException, ReactorException { final SchemaContext context = TestUtils.parseYangSources("/schema-context-util-test"); final Module myModule = context.findModuleByNamespaceAndRevision(new URI("uri:my-module"), QName.parseRevision("2014-10-07")); final ChoiceSchemaNode choice = (ChoiceSchemaNode) getRpcByName(myModule, "my-name").getInput() .getDataChildByName(QName.create(myModule.getQNameModule(), "my-choice")); final SchemaNode testNode = choice.getCaseNodeByName("case-two").getDataChildByName( QName.create(myModule.getQNameModule(), "two")); final SchemaPath path = SchemaPath.create(true, QName.create(myModule.getQNameModule(), "my-name"), QName.create(myModule.getQNameModule(), "input"), QName.create(myModule.getQNameModule(), "my-choice"), QName.create(myModule.getQNameModule(), "case-two"), QName.create(myModule.getQNameModule(), "two")); final SchemaNode foundNode = SchemaContextUtil.findNodeInSchemaContext(context, path.getPathFromRoot()); assertNotNull(testNode); assertNotNull(foundNode); assertEquals(testNode, foundNode); } }