/* * Copyright 2016-present Open Networking Laboratory * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onosproject.yms.app.yab; import org.junit.Test; import org.onosproject.yangutils.datamodel.YangAugment; import org.onosproject.yangutils.datamodel.YangNode; import org.onosproject.yms.app.ydt.YangRequestWorkBench; import org.onosproject.yms.app.ydt.YdtAppContext; import org.onosproject.yms.app.ydt.YdtAppNodeOperationType; import org.onosproject.yms.app.ydt.YdtNode; import org.onosproject.yms.ydt.YdtContext; import java.io.IOException; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; import static org.onosproject.yms.ydt.YdtContextOperationType.DELETE; import static org.onosproject.yms.ydt.YdtContextOperationType.MERGE; import static org.onosproject.yms.ydt.YmsOperationType.EDIT_CONFIG_REQUEST; import static org.onosproject.yms.ydt.YmsOperationType.QUERY_CONFIG_REQUEST; import static org.onosproject.yms.ydt.YmsOperationType.RPC_REQUEST; /** * Unit test case for YANG application broker. */ public class YangApplicationBrokerTest { MockYmsManager ymsManager = new MockYmsManager(); /** * Returns YANG data tree to check edit operation of container. * * @return YANG data tree */ private YangRequestWorkBench buildYdtForEditOperationWithoutDelete() { String rootName = "root"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, EDIT_CONFIG_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test", MERGE); defaultYdtBuilder.addChild("cont1", null, MERGE); defaultYdtBuilder.addChild("cont2", null, MERGE); defaultYdtBuilder.addChild("cont3", null, MERGE); defaultYdtBuilder.addLeaf("leaf1", null, "1"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf4", null, "4"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addChild("cont4", null, MERGE); defaultYdtBuilder.addChild("cont5", null, MERGE); defaultYdtBuilder.addLeaf("leaf9", null, "9"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf10", null, "10"); return defaultYdtBuilder; } private YangRequestWorkBench buildYdtForKeyLeavesInDeleteTree() { String rootName = "root"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, EDIT_CONFIG_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test", MERGE); defaultYdtBuilder.addChild("list2", null, MERGE); defaultYdtBuilder.addLeaf("leaf5", null, "5"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf6", null, "6"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf7", null, "7"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addChild("cont7", null, DELETE); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); return defaultYdtBuilder; } /** * Returns YANG data tree to check delete operation of container. * * @return YANG data tree */ private YangRequestWorkBench buildYdtForEditOperationWithDelete() { String rootName = "rootNode"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, EDIT_CONFIG_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test", MERGE); defaultYdtBuilder.addChild("cont1", null, MERGE); defaultYdtBuilder.addChild("cont2", null, DELETE); defaultYdtBuilder.addChild("cont3", null, DELETE); defaultYdtBuilder.addLeaf("leaf1", null, "1"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf4", null, "4"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addChild("cont4", null, DELETE); defaultYdtBuilder.addChild("cont5", null, DELETE); defaultYdtBuilder.addLeaf("leaf9", null, "9"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf10", null, "10"); return defaultYdtBuilder; } /** * Returns YANG data tree to check edit operation of list. * * @return YANG data tree */ private YangRequestWorkBench buildYdtForListEditOperationWithoutDelete() { String rootName = "listWithoutDelete"; Set<String> valueSet = new LinkedHashSet<>(); valueSet.add("10"); YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, EDIT_CONFIG_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test", MERGE); defaultYdtBuilder.addChild("cont1", null, MERGE); defaultYdtBuilder.addChild("list1", null, MERGE); defaultYdtBuilder.addLeaf("leaf2", null, "2"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf3", null, "3"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf4", null, "4"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addChild("list2", null, MERGE); defaultYdtBuilder.addLeaf("leaf5", null, "5"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf6", null, "6"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf7", null, "7"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaflist8", null, valueSet); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf10", null, "10"); return defaultYdtBuilder; } /** * Returns YANG data tree to check delete operation of list. * * @return YANG data tree */ private YangRequestWorkBench buildYdtForListEditOperationWithDelete() { String rootName = "listWithDelete"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, EDIT_CONFIG_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test", MERGE); defaultYdtBuilder.addChild("cont1", null, MERGE); defaultYdtBuilder.addChild("list1", null, DELETE); defaultYdtBuilder.addLeaf("leaf2", null, "2"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf3", null, "3"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf4", null, "4"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addChild("list2", null, DELETE); defaultYdtBuilder.addLeaf("leaf5", null, "5"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf6", null, "6"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf10", null, "10"); return defaultYdtBuilder; } /** * Returns YANG data tree to check query operation of container. * * @return YANG data tree */ private YangRequestWorkBench buildYdtForQueryOperation() { String rootName = "root"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, QUERY_CONFIG_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test"); defaultYdtBuilder.addChild("cont1", null); defaultYdtBuilder.addChild("cont2", null); defaultYdtBuilder.addChild("cont3", null); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addChild("cont4", null); defaultYdtBuilder.addChild("cont5", null); return defaultYdtBuilder; } /** * Returns YANG data tree to check query operation of list. * * @return YANG data tree */ private YangRequestWorkBench buildYdtForListQueryOperation() { String rootName = "listQuery"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, QUERY_CONFIG_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test"); defaultYdtBuilder.addChild("cont1", null); defaultYdtBuilder.addChild("list1", null); defaultYdtBuilder.addLeaf("leaf2", null, "2"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addChild("list2", null); defaultYdtBuilder.addLeaf("leaf5", null, "5"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf6", null, "6"); return defaultYdtBuilder; } /** * Returns YANG data tree to check delete operation of a node. * * @return YANG data tree */ private YangRequestWorkBench buildYdtWithOneDeleteNode() { String rootName = "root"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, EDIT_CONFIG_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test"); defaultYdtBuilder.addChild("cont1", null, MERGE); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addChild("cont4", null, DELETE); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf10", null, "10"); return defaultYdtBuilder; } /** * Returns YANG data tree to check delete operation of last node. * * @return YANG data tree */ private YangRequestWorkBench buildYdtWithDeleteNodeAsLastChild() { String rootName = "root"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, EDIT_CONFIG_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test", MERGE); defaultYdtBuilder.addChild("cont1", null, MERGE); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addChild("list2", null, MERGE); defaultYdtBuilder.addLeaf("leaf5", null, "10"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf6", null, "10"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addChild("cont4", null, DELETE); return defaultYdtBuilder; } /** * Returns YANG data tree to with delete operation of all the nodes. * * @return YANG data tree */ private YangRequestWorkBench buildYdtWithAllDeleteNode() { String rootName = "root"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, EDIT_CONFIG_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test", DELETE); defaultYdtBuilder.addChild("cont1", null, DELETE); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addChild("list2", null, DELETE); defaultYdtBuilder.addLeaf("leaf5", null, "10"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addLeaf("leaf6", null, "10"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addChild("cont4", null, DELETE); return defaultYdtBuilder; } /** * Returns YANG data tree to check rpc operation with only input. * * @return YANG data tree */ private YangRequestWorkBench buildYdtForRpcWithOnlyInput() { String rootName = "root"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, RPC_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test"); defaultYdtBuilder.addChild("rock-the-house1", null); defaultYdtBuilder.addChild("input", null); defaultYdtBuilder.addLeaf("leaf13", null, "5"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); return defaultYdtBuilder; } /** * Returns YANG data tree to check rpc operation with only output. * * @return YANG data tree */ private YangRequestWorkBench buildYdtForRpcWithOnlyOutput() { String rootName = "root"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, RPC_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test"); defaultYdtBuilder.addChild("rock-the-house2", null); defaultYdtBuilder.addChild("output", null); defaultYdtBuilder.addLeaf("leaf14", null, "14"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); return defaultYdtBuilder; } /** * Returns YANG data tree to check rpc operation with both input and output. * * @return YANG data tree */ private YangRequestWorkBench buildYdtForRpcWithBothInputOutput() { String rootName = "root"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, RPC_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test"); defaultYdtBuilder.addChild("rock-the-house", null); defaultYdtBuilder.addChild("input", null); defaultYdtBuilder.addLeaf("zip-code", null, "5"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.addChild("output", null); defaultYdtBuilder.addLeaf("hello", null, "5"); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); return defaultYdtBuilder; } /** * Returns YANG data tree to check rpc operation. * * @return YANG data tree */ private YangRequestWorkBench buildYdtForRpc() { String rootName = "root"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, RPC_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test"); defaultYdtBuilder.addChild("rock-the-house3", null); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); return defaultYdtBuilder; } /** * Returns YANG data tree to check query operation with multiple level of * augment. * * @return YANG data tree */ private YangRequestWorkBench buildYdtForQueryWithMultipleAugment() { String rootName = "root"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, QUERY_CONFIG_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test"); defaultYdtBuilder.traverseToParent(); return defaultYdtBuilder; } /** * Returns YANG data tree to check delete operation with multiple level of * augment. * * @return YANG data tree */ private YangRequestWorkBench buildYdtForDeleteWithMultipleAugment() { String rootName = "root"; YangRequestWorkBench defaultYdtBuilder = (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null, EDIT_CONFIG_REQUEST); defaultYdtBuilder.addChild("test", "ydt.test"); defaultYdtBuilder.addChild("cont4", null, DELETE); defaultYdtBuilder.traverseToParent(); defaultYdtBuilder.traverseToParent(); return defaultYdtBuilder; } /** * Checks whether YANG data tree and delete tree is correct. */ @Test public void validateDeleteTreeOnlyOneNodeInDeleteList() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForEditOperationWithDelete(); YdtAppContext appContext = defaultYdtBuilder.getAppRootNode().getFirstChild(); YdtContext ydtContext = appContext.getModuleContext(); List<YdtContext> deleteNodes = appContext.getDeleteNodes(); YdtContext cont1YdtContext; YdtContext cont2YdtContext; YdtContext cont3YdtContext; YdtContext cont4YdtContext; YdtContext deleteTree; // verify whether ydt tree is correct assertThat(ydtContext.getName(), is("test")); cont1YdtContext = ydtContext.getFirstChild(); assertThat(cont1YdtContext.getName(), is("cont1")); cont2YdtContext = cont1YdtContext.getFirstChild(); assertThat(cont2YdtContext.getName(), is("cont2")); cont3YdtContext = cont2YdtContext.getFirstChild(); assertThat(cont3YdtContext.getName(), is("cont3")); ydtContext = cont3YdtContext.getFirstChild(); assertThat(ydtContext.getName(), is("leaf1")); assertThat(ydtContext.getValue(), is("1")); ydtContext = cont2YdtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf4")); assertThat(ydtContext.getValue(), is("4")); cont4YdtContext = cont1YdtContext.getNextSibling(); assertThat(cont4YdtContext.getName(), is("cont4")); ydtContext = cont4YdtContext.getFirstChild(); assertThat(ydtContext.getName(), is("cont5")); ydtContext = ydtContext.getFirstChild(); assertThat(ydtContext.getName(), is("leaf9")); assertThat(ydtContext.getValue(), is("9")); ydtContext = cont4YdtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf10")); assertThat(ydtContext.getValue(), is("10")); // build delete tree YangApplicationBroker yab = new YangApplicationBroker(null); deleteTree = yab.buildDeleteTree(deleteNodes); // verify whether delete ydt tree is correct assertThat(deleteTree.getFirstChild().getName(), is("test")); cont1YdtContext = deleteTree.getFirstChild().getFirstChild(); assertThat(cont1YdtContext.getName(), is("cont1")); cont2YdtContext = cont1YdtContext.getFirstChild(); assertThat(cont2YdtContext.getName(), is("cont2")); cont3YdtContext = cont2YdtContext.getFirstChild(); assertThat(cont3YdtContext.getName(), is("cont3")); ydtContext = cont3YdtContext.getFirstChild(); assertThat(ydtContext.getName(), is("leaf1")); assertThat(ydtContext.getValue(), is("1")); assertThat(cont2YdtContext.getNextSibling(), nullValue()); cont4YdtContext = cont1YdtContext.getNextSibling(); assertThat(cont4YdtContext.getName(), is("cont4")); ydtContext = cont4YdtContext.getFirstChild(); assertThat(ydtContext.getName(), is("cont5")); ydtContext = ydtContext.getFirstChild(); assertThat(ydtContext.getName(), is("leaf9")); assertThat(ydtContext.getValue(), is("9")); assertThat(cont4YdtContext.getNextSibling(), nullValue()); // ydtTree after removing delete nodes ydtContext = appContext.getModuleContext(); assertThat(ydtContext.getName(), is("test")); cont1YdtContext = ydtContext.getFirstChild(); assertThat(cont1YdtContext.getName(), is("cont1")); ydtContext = cont1YdtContext.getFirstChild(); assertThat(ydtContext.getName(), is("leaf4")); assertThat(ydtContext.getValue(), is("4")); ydtContext = cont1YdtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf10")); assertThat(ydtContext.getValue(), is("10")); } /** * Checks whether YANG data tree and delete tree is correct. */ @Test public void validateListDeleteTree() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForListEditOperationWithDelete(); YdtAppContext appContext = defaultYdtBuilder.getAppRootNode().getFirstChild(); YdtContext ydtContext = appContext.getModuleContext(); List<YdtContext> deleteNodes = appContext.getDeleteNodes(); YdtContext cont1YdtContext; YdtContext list1YdtContext; YdtContext list2YdtContext; YdtContext deleteTree; // verify whether ydt tree is correct assertThat(ydtContext.getName(), is("test")); cont1YdtContext = ydtContext.getFirstChild(); assertThat(cont1YdtContext.getName(), is("cont1")); list1YdtContext = cont1YdtContext.getFirstChild(); assertThat(list1YdtContext.getName(), is("list1")); ydtContext = list1YdtContext.getFirstChild(); assertThat(ydtContext.getName(), is("leaf2")); assertThat(ydtContext.getValue(), is("2")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf3")); assertThat(ydtContext.getValue(), is("3")); ydtContext = list1YdtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf4")); assertThat(ydtContext.getValue(), is("4")); list2YdtContext = cont1YdtContext.getNextSibling(); assertThat(list2YdtContext.getName(), is("list2")); ydtContext = list2YdtContext.getFirstChild(); assertThat(ydtContext.getName(), is("leaf5")); assertThat(ydtContext.getValue(), is("5")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf6")); assertThat(ydtContext.getValue(), is("6")); ydtContext = list2YdtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf10")); assertThat(ydtContext.getValue(), is("10")); // build delete tree YangApplicationBroker yab = new YangApplicationBroker(null); deleteTree = yab.buildDeleteTree(deleteNodes); assertThat(deleteTree.getFirstChild().getName(), is("test")); cont1YdtContext = deleteTree.getFirstChild().getFirstChild(); assertThat(cont1YdtContext.getName(), is("cont1")); list1YdtContext = cont1YdtContext.getFirstChild(); assertThat(list1YdtContext.getName(), is("list1")); ydtContext = list1YdtContext.getFirstChild(); assertThat(ydtContext.getName(), is("leaf2")); assertThat(ydtContext.getValue(), is("2")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf3")); assertThat(ydtContext.getValue(), is("3")); assertThat(list1YdtContext.getNextSibling(), nullValue()); list2YdtContext = cont1YdtContext.getNextSibling(); assertThat(list2YdtContext.getName(), is("list2")); ydtContext = list2YdtContext.getFirstChild(); assertThat(ydtContext.getName(), is("leaf5")); assertThat(ydtContext.getValue(), is("5")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf6")); assertThat(ydtContext.getValue(), is("6")); assertThat(ydtContext.getNextSibling(), nullValue()); // verify whether ydt tree is correct ydtContext = appContext.getModuleContext(); assertThat(ydtContext.getName(), is("test")); cont1YdtContext = ydtContext.getFirstChild(); assertThat(cont1YdtContext.getName(), is("cont1")); ydtContext = cont1YdtContext.getFirstChild(); assertThat(ydtContext.getName(), is("leaf4")); assertThat(ydtContext.getValue(), is("4")); ydtContext = cont1YdtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf10")); assertThat(ydtContext.getValue(), is("10")); } /** * Checks whether there is no exception when there is valid edit * request. */ @Test public void testExecuteEditOperationWithoutDelete() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForEditOperationWithoutDelete(); ymsManager.executeOperation(defaultYdtBuilder); } /** * Checks whether there is no exception when there is valid delete * request. */ @Test public void testExecuteEditOperationWithDelete() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForEditOperationWithDelete(); ymsManager.executeOperation(defaultYdtBuilder); } /** * Checks whether there is no exception when there is valid edit * request for list. */ @Test public void testExecuteListEditOperationWithoutDelete() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForListEditOperationWithoutDelete(); ymsManager.executeOperation(defaultYdtBuilder); } /** * Checks whether there is no exception when there is valid delete * request for list. */ @Test public void testExecuteListEditOperationWithDelete() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForListEditOperationWithDelete(); ymsManager.executeOperation(defaultYdtBuilder); } /** * Checks whether there is no exception when there is valid query * request. */ @Test public void testExecuteQueryOperation() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForQueryOperation(); ymsManager.executeOperation(defaultYdtBuilder); } /** * Checks whether there is no exception when there is valid query * request for list. */ @Test public void testExecuteListQueryOperation() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForListQueryOperation(); ymsManager.executeOperation(defaultYdtBuilder); } /** * Checks whether delete tree is updated correctly. */ @Test public void testSiblingsInDeleteTree() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtWithOneDeleteNode(); YdtAppContext appContext = defaultYdtBuilder.getAppRootNode().getFirstChild(); YdtContext ydtContext = appContext.getModuleContext(); List<YdtContext> deleteNodes = appContext.getDeleteNodes(); // verify whether ydt tree is correct assertThat(ydtContext.getName(), is("test")); ydtContext = ydtContext.getFirstChild(); assertThat(ydtContext.getName(), is("cont1")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("cont4")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf10")); assertThat(ydtContext.getValue(), is("10")); // build delete tree YangApplicationBroker yab = new YangApplicationBroker(null); YdtContext deleteTree = yab.buildDeleteTree(deleteNodes); assertThat(deleteTree.getFirstChild().getName(), is("test")); ydtContext = deleteTree.getFirstChild().getFirstChild(); assertThat(ydtContext.getName(), is("cont4")); assertThat(ydtContext.getNextSibling(), nullValue()); assertThat(ydtContext.getPreviousSibling(), nullValue()); ydtContext = appContext.getModuleContext(); // verify whether ydt tree is correct assertThat(ydtContext.getName(), is("test")); ydtContext = ydtContext.getFirstChild(); assertThat(ydtContext.getName(), is("cont1")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf10")); assertThat(ydtContext.getValue(), is("10")); assertThat(ydtContext.getNextSibling(), nullValue()); } /** * Checks last child is updated correctly after delete tree is built. */ @Test public void testLastChildInYdtTree() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtWithDeleteNodeAsLastChild(); YdtAppContext appContext = defaultYdtBuilder.getAppRootNode().getFirstChild(); YdtContext ydtContext = appContext.getModuleContext(); List<YdtContext> deleteNodes = appContext.getDeleteNodes(); assertThat(YdtAppNodeOperationType.BOTH, is(appContext.getOperationType())); // verify whether ydt tree is correct assertThat(ydtContext.getName(), is("test")); ydtContext = ydtContext.getFirstChild(); assertThat(ydtContext.getName(), is("cont1")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("list2")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("cont4")); assertThat(ydtContext.getNextSibling(), nullValue()); // build delete tree YangApplicationBroker yab = new YangApplicationBroker(null); YdtContext deleteTree = yab.buildDeleteTree(deleteNodes); assertThat(deleteTree.getFirstChild().getName(), is("test")); ydtContext = deleteTree.getFirstChild().getFirstChild(); assertThat(ydtContext.getName(), is("cont4")); ydtContext = deleteTree.getFirstChild().getLastChild(); assertThat(ydtContext.getName(), is("cont4")); assertThat(ydtContext.getNextSibling(), nullValue()); assertThat(ydtContext.getPreviousSibling(), nullValue()); ydtContext = appContext.getModuleContext(); assertThat(ydtContext.getLastChild().getName(), is("list2")); // verify whether ydt tree is correct assertThat(ydtContext.getName(), is("test")); ydtContext = ydtContext.getFirstChild(); assertThat(ydtContext.getName(), is("cont1")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("list2")); assertThat(ydtContext.getNextSibling(), nullValue()); } /** * Checks YDT tree with all delete nodes. */ @Test public void testYdtTreeWithAllDeleteNodes() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtWithAllDeleteNode(); YdtAppContext appContext = defaultYdtBuilder.getAppRootNode().getFirstChild(); YdtContext ydtContext = appContext.getModuleContext(); List<YdtContext> deleteNodes = appContext.getDeleteNodes(); assertThat(YdtAppNodeOperationType.DELETE_ONLY, is(appContext.getOperationType())); // verify whether ydt tree is correct assertThat(ydtContext.getName(), is("test")); ydtContext = ydtContext.getFirstChild(); assertThat(ydtContext.getName(), is("cont1")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("list2")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("cont4")); assertThat(ydtContext.getNextSibling(), nullValue()); // build delete tree YangApplicationBroker yab = new YangApplicationBroker(null); YdtContext deleteTree = yab.buildDeleteTree(deleteNodes); assertThat(deleteTree.getFirstChild().getName(), is("test")); ydtContext = deleteTree.getFirstChild().getFirstChild(); assertThat(ydtContext.getName(), is("cont1")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("list2")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("cont4")); assertThat(ydtContext.getNextSibling(), nullValue()); } /** * Checks whether key leaves are also available when there is delete * request for list. */ @Test public void testKeyLeavesInDeleteTree() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForKeyLeavesInDeleteTree(); YdtAppContext appContext = defaultYdtBuilder.getAppRootNode().getFirstChild(); YdtContext ydtContext = appContext.getModuleContext(); List<YdtContext> deleteNodes = appContext.getDeleteNodes(); assertThat(YdtAppNodeOperationType.BOTH, is(appContext.getOperationType())); // verify whether ydt tree is correct assertThat(ydtContext.getName(), is("test")); ydtContext = ydtContext.getFirstChild(); assertThat(ydtContext.getName(), is("list2")); ydtContext = ydtContext.getFirstChild(); assertThat(ydtContext.getName(), is("leaf5")); assertThat(ydtContext.getValue(), is("5")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf6")); assertThat(ydtContext.getValue(), is("6")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf7")); assertThat(ydtContext.getValue(), is("7")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("cont7")); assertThat(ydtContext.getNextSibling(), nullValue()); // build delete tree YangApplicationBroker yab = new YangApplicationBroker(null); YdtContext deleteTree = yab.buildDeleteTree(deleteNodes); assertThat(deleteTree.getFirstChild().getName(), is("test")); ydtContext = deleteTree.getFirstChild().getFirstChild(); assertThat(ydtContext.getName(), is("list2")); ydtContext = ydtContext.getFirstChild(); assertThat(ydtContext, notNullValue()); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext, notNullValue()); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("cont7")); assertThat(ydtContext.getNextSibling(), nullValue()); ydtContext = appContext.getModuleContext(); // verify whether ydt tree is correct assertThat(ydtContext.getName(), is("test")); ydtContext = ydtContext.getFirstChild(); assertThat(ydtContext.getName(), is("list2")); ydtContext = ydtContext.getFirstChild(); assertThat(ydtContext.getName(), is("leaf5")); assertThat(ydtContext.getValue(), is("5")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf6")); assertThat(ydtContext.getValue(), is("6")); ydtContext = ydtContext.getNextSibling(); assertThat(ydtContext.getName(), is("leaf7")); assertThat(ydtContext.getValue(), is("7")); assertThat(ydtContext.getNextSibling(), nullValue()); } /** * Checks YDT tree and application tree for query request with mutiple * augments. */ @Test public void testApptreeForQueryWithMultipleAugment() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForQueryWithMultipleAugment(); YdtAppContext appContext = defaultYdtBuilder.getAppRootNode() .getFirstChild(); YdtContext ydtNode = appContext.getModuleContext(); YangNode yangNode = (YangNode) ((YdtNode) ydtNode).getYangSchemaNode(); YangApplicationBroker yab = new YangApplicationBroker(defaultYdtBuilder. getYangSchemaRegistry()); yab.setAugGenMethodSet(defaultYdtBuilder.getAugGenMethodSet()); yab.processAugmentForChildNode(appContext, yangNode); assertThat(appContext.getModuleContext().getName(), is("test")); appContext = appContext.getFirstChild(); String augmentName = ((YangAugment) appContext .getAugmentingSchemaNode()).getTargetNode().get(0) .getResolvedNode().getJavaClassNameOrBuiltInType(); assertThat(augmentName, is("cont4")); assertThat(appContext.getFirstChild(), nullValue()); assertThat(appContext.getLastChild(), nullValue()); } /** * Checks whether there is no exception when there is valid query request * for data resource with multiple augments. */ @Test public void testQueryWithMultipleAugment() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForQueryWithMultipleAugment(); ymsManager.executeOperation(defaultYdtBuilder); } /** * Checks whether YDT is updated correctly for delete with multiple augment. */ @Test public void testYdtForDeleteWithMultipleAugment() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForDeleteWithMultipleAugment(); YdtAppContext appContext = defaultYdtBuilder.getAppRootNode() .getFirstChild(); YangApplicationBroker yab = new YangApplicationBroker(defaultYdtBuilder. getYangSchemaRegistry()); yab.setAugGenMethodSet(defaultYdtBuilder.getAugGenMethodSet()); YdtContext deleteTree = yab.buildDeleteTree(appContext.getDeleteNodes()); yab.processAugmentedNodesForDelete(deleteTree.getFirstChild(), appContext); assertThat(appContext.getModuleContext().getName(), is("test")); appContext = appContext.getFirstChild(); String augmentName = ((YangAugment) appContext .getAugmentingSchemaNode()).getTargetNode().get(0) .getResolvedNode().getJavaClassNameOrBuiltInType(); assertThat(augmentName, is("cont4")); assertThat(appContext.getFirstChild(), nullValue()); assertThat(appContext.getLastChild(), nullValue()); YdtContext ydtContext = deleteTree.getFirstChild(); assertThat(ydtContext.getName(), is("test")); ydtContext = ydtContext.getFirstChild(); assertThat(ydtContext.getName(), is("cont4")); } /** * Checks whether there is no exception when there is valid delete request * for data resource with multiple augments. */ @Test public void testDeleteWithMultipleAugment() { YangRequestWorkBench defaultYdtBuilder = buildYdtForDeleteWithMultipleAugment(); ymsManager.executeOperation(defaultYdtBuilder); } /** * Checks execute operation for rpc request with only output. */ @Test public void testRpcWithOutput() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForRpcWithOnlyOutput(); ymsManager.executeOperation(defaultYdtBuilder); } /** * Checks execute operation for rpc request with only input. */ @Test public void testRpcWithInput() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForRpcWithOnlyInput(); ymsManager.executeOperation(defaultYdtBuilder); } /** * Checks execute operation for rpc request with input and output. */ @Test public void testRpcWithInputOutput() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForRpcWithBothInputOutput(); ymsManager.executeOperation(defaultYdtBuilder); } /** * Checks execute operation for rpc request without input and * output. */ @Test public void testRpcWithoutInputOutput() throws IOException, CloneNotSupportedException { YangRequestWorkBench defaultYdtBuilder = buildYdtForRpc(); ymsManager.executeOperation(defaultYdtBuilder); } }