blob: 47998510b32df97c5a0017060e66adf666866410 [file] [log] [blame]
/*
* 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.ydt;
import org.junit.Test;
import java.util.HashSet;
import java.util.Set;
import static org.onosproject.yms.app.ydt.YdtAppNodeOperationType.BOTH;
import static org.onosproject.yms.app.ydt.YdtTestConstants.A2L;
import static org.onosproject.yms.app.ydt.YdtTestConstants.A5L;
import static org.onosproject.yms.app.ydt.YdtTestConstants.A6L;
import static org.onosproject.yms.app.ydt.YdtTestConstants.AUG1;
import static org.onosproject.yms.app.ydt.YdtTestConstants.IETF;
import static org.onosproject.yms.app.ydt.YdtTestConstants.NETNS;
import static org.onosproject.yms.app.ydt.YdtTestConstants.SLINK;
import static org.onosproject.yms.app.ydt.YdtTestConstants.STP;
import static org.onosproject.yms.app.ydt.YdtTestConstants.TOPONS;
import static org.onosproject.yms.app.ydt.YdtTestUtils.augmentNetworkYdt;
import static org.onosproject.yms.app.ydt.YdtTestUtils.validateAppLogicalNodeContents;
import static org.onosproject.yms.app.ydt.YdtTestUtils.validateAppModuleNodeContents;
import static org.onosproject.yms.app.ydt.YdtTestUtils.validateAppNodeContents;
import static org.onosproject.yms.app.ydt.YdtTestUtils.validateLeafContents;
import static org.onosproject.yms.app.ydt.YdtTestUtils.validateLeafListContents;
import static org.onosproject.yms.app.ydt.YdtTestUtils.validateNodeContents;
import static org.onosproject.yms.app.ydt.YdtTestUtils.walkINTree;
import static org.onosproject.yms.ydt.YdtContextOperationType.DELETE;
import static org.onosproject.yms.ydt.YdtContextOperationType.MERGE;
public class AugmentTest {
private Set<String> valueSet = new HashSet();
private static final String[] EXPECTED = {
"Entry Node is yms-ietf-network.",
"Entry Node is yms-ietf-network.",
"Entry Node is networks.",
"Entry Node is network.",
"Entry Node is network-id.",
"Exit Node is network-id.",
"Entry Node is link.",
"Entry Node is link-id.",
"Exit Node is link-id.",
"Entry Node is source.",
"Entry Node is source-node.",
"Exit Node is source-node.",
"Entry Node is source-tp.",
"Exit Node is source-tp.",
"Exit Node is source.",
"Entry Node is destination.",
"Entry Node is dest-node.",
"Exit Node is dest-node.",
"Entry Node is dest-tp.",
"Exit Node is dest-tp.",
"Exit Node is destination.",
"Entry Node is supporting-link.",
"Entry Node is network-ref.",
"Exit Node is network-ref.",
"Entry Node is link-ref.",
"Exit Node is link-ref.",
"Exit Node is supporting-link.",
"Entry Node is supporting-link.",
"Entry Node is network-ref.",
"Exit Node is network-ref.",
"Entry Node is link-ref.",
"Exit Node is link-ref.",
"Exit Node is supporting-link.",
"Entry Node is augment1.",
"Entry Node is value1.",
"Exit Node is value1.",
"Exit Node is augment1.",
"Entry Node is augment2.",
"Entry Node is key1.",
"Exit Node is key1.",
"Entry Node is key2.",
"Exit Node is key2.",
"Entry Node is augment5.",
"Entry Node is augment6leafList.",
"Exit Node is augment6leafList.",
"Entry Node is value5.",
"Exit Node is value5.",
"Exit Node is augment5.",
"Entry Node is augment5leafList.",
"Exit Node is augment5leafList.",
"Entry Node is augment3.",
"Entry Node is augment4.",
"Entry Node is value4.",
"Exit Node is value4.",
"Exit Node is augment4.",
"Entry Node is augment5.",
"Entry Node is leaf6.",
"Exit Node is leaf6.",
"Entry Node is value5.",
"Exit Node is value5.",
"Exit Node is augment5.",
"Entry Node is augment6.",
"Entry Node is value6.",
"Exit Node is value6.",
"Exit Node is augment6.",
"Entry Node is value3.",
"Exit Node is value3.",
"Exit Node is augment3.",
"Entry Node is augment3leaf.",
"Exit Node is augment3leaf.",
"Exit Node is augment2.",
"Entry Node is augment2leafList.",
"Exit Node is augment2leafList.",
"Exit Node is link.",
"Entry Node is supporting-network.",
"Entry Node is network-ref.",
"Exit Node is network-ref.",
"Exit Node is supporting-network.",
"Entry Node is node.",
"Entry Node is node-id.",
"Exit Node is node-id.",
"Entry Node is t-point.",
"Entry Node is tp-id.",
"Exit Node is tp-id.",
"Entry Node is supporting-termination-point.",
"Entry Node is network-ref.",
"Exit Node is network-ref.",
"Entry Node is node-ref.",
"Exit Node is node-ref.",
"Entry Node is tp-ref.",
"Exit Node is tp-ref.",
"Entry Node is augment1.",
"Entry Node is value1.",
"Exit Node is value1.",
"Exit Node is augment1.",
"Entry Node is augment1-leaf.",
"Exit Node is augment1-leaf.",
"Entry Node is augment2.",
"Entry Node is augment3.",
"Entry Node is value3.",
"Exit Node is value3.",
"Exit Node is augment3.",
"Entry Node is augment4leaf.",
"Exit Node is augment4leaf.",
"Entry Node is value2.",
"Exit Node is value2.",
"Exit Node is augment2.",
"Entry Node is augment2leafList.",
"Exit Node is augment2leafList.",
"Entry Node is augment2leaf.",
"Exit Node is augment2leaf.",
"Exit Node is supporting-termination-point.",
"Exit Node is t-point.",
"Entry Node is supporting-node.",
"Entry Node is network-ref.",
"Exit Node is network-ref.",
"Entry Node is node-ref.",
"Exit Node is node-ref.",
"Exit Node is supporting-node.",
"Exit Node is node.",
// last augmented sibling in network
"Entry Node is link-id.",
"Exit Node is link-id.",
"Exit Node is network.",
"Exit Node is networks.",
"Entry Node is networks-state.",
"Entry Node is network.",
"Entry Node is network-ref.",
"Exit Node is network-ref.",
"Entry Node is server-provided.",
"Exit Node is server-provided.",
"Exit Node is network.",
"Exit Node is networks-state.",
"Exit Node is yms-ietf-network.",
"Entry Node is augmentNetwork.",
"Entry Node is node.",
"Entry Node is name.",
"Exit Node is name.",
"Entry Node is cont1s.",
"Entry Node is cont1s.",
"Entry Node is fine.",
"Exit Node is fine.",
// augmenting node augment1 under cont1s
"Entry Node is augment1.",
"Entry Node is value1.",
"Exit Node is value1.",
"Exit Node is augment1.",
"Exit Node is cont1s.",
"Exit Node is cont1s.",
"Exit Node is node.",
"Exit Node is augmentNetwork.",
"Exit Node is yms-ietf-network."
};
/**
* Creates and validates ietf network augment ydt.
*/
@Test
public void augmentTest() {
YangRequestWorkBench ydtBuilder = augmentNetworkYdt();
validateTree(ydtBuilder);
validateAppTree(ydtBuilder);
walkINTree(ydtBuilder, EXPECTED);
}
/**
* Validates the given built ydt.
*/
private void validateTree(YangRequestWorkBench ydtBuilder) {
// Assign root node to ydtNode for validating purpose.
YdtNode ydtNode = (YdtNode) ydtBuilder.getRootNode();
// Logical root node does not have operation type
validateNodeContents(ydtNode, "yms-ietf-network", null);
ydtNode = ydtNode.getFirstChild();
validateNodeContents(ydtNode, "yms-ietf-network", MERGE);
ydtNode = ydtNode.getFirstChild();
validateNodeContents(ydtNode, "networks", MERGE);
ydtNode = ydtNode.getFirstChild();
validateNodeContents(ydtNode, "network", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "network-id", "network1");
ydtNode = ydtNode.getNextSibling();
// Validating augmented child
validateNodeContents(ydtNode, "link", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "link-id", "id1");
ydtNode = ydtNode.getNextSibling();
// Inside source node
validateNodeContents(ydtNode, "source", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "source-node", "source1");
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "source-tp", "source2");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
//Inside destination node
validateNodeContents(ydtNode, "destination", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "dest-node", "dest1");
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "dest-tp", "dest2");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
//Inside supporting links
validateNodeContents(ydtNode, SLINK, MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "network-ref", "network1");
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "link-ref", "id2");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
//Inside another supporting links instance
validateNodeContents(ydtNode, SLINK, MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "network-ref", "network2");
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "link-ref", "id3");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "augment1", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "value1", "1");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "augment2", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "key1", "1");
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "key2", "2");
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "augment5", DELETE);
ydtNode = ydtNode.getFirstChild();
valueSet.add("1");
valueSet.add("2");
validateLeafListContents(ydtNode, A6L, valueSet);
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "value5", "5");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateLeafListContents(ydtNode, A5L, valueSet);
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "augment3", MERGE);
ydtNode = ydtNode.getFirstChild();
validateNodeContents(ydtNode, "augment4", DELETE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "value4", "4");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "augment5", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "leaf6", "6");
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "value5", "5");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "augment6", DELETE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "value6", "6");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "value3", "3");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "augment3leaf", "3");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateLeafListContents(ydtNode, A2L, valueSet);
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "supporting-network", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "network-ref", "network2");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "node", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "node-id", "node1");
ydtNode = ydtNode.getNextSibling();
//Inside termination-point
validateNodeContents(ydtNode, "t-point", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "tp-id", "tp_id1");
ydtNode = ydtNode.getNextSibling();
validateTerminationPointAugment(ydtNode);
}
/**
* Validates the termination point node in given built ydt.
*/
private void validateTerminationPointAugment(YdtNode ydtNode) {
//Inside supporting-termination-point
validateNodeContents(ydtNode, STP, MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "network-ref", "network-ref");
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "node-ref", "node-ref");
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "tp-ref", "tp-ref");
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "augment1", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "value1", "1");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "augment1-leaf", "1");
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "augment2", MERGE);
ydtNode = ydtNode.getFirstChild();
validateNodeContents(ydtNode, "augment3", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "value3", "3");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "augment4leaf", "4");
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "value2", "2");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateLeafListContents(ydtNode, A2L, valueSet);
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "augment2leaf", "2");
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getParent();
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "supporting-node", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "network-ref", "network3");
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "node-ref", "network4");
ydtNode = ydtNode.getParent().getParent();
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "link-id", "id1");
ydtNode = ydtNode.getParent().getParent();
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "networks-state", MERGE);
ydtNode = ydtNode.getFirstChild();
validateNodeContents(ydtNode, "network", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "network-ref", "network5");
ydtNode = ydtNode.getNextSibling();
validateLeafContents(ydtNode, "server-provided", "true");
ydtNode = ydtNode.getParent().getParent().getParent();
validateAugmentNetworkModule(ydtNode);
}
/**
* Validates the given built ydt for augment network module.
*/
private void validateAugmentNetworkModule(YdtNode ydtNode) {
ydtNode = ydtNode.getNextSibling();
//augmenting network module node
validateNodeContents(ydtNode, "augmentNetwork", MERGE);
ydtNode = ydtNode.getFirstChild();
validateNodeContents(ydtNode, "node", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "name", "node1");
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "cont1s", MERGE);
ydtNode = ydtNode.getFirstChild();
validateNodeContents(ydtNode, "cont1s", MERGE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "fine", "leaf");
// checking augmenting node augment1
ydtNode = ydtNode.getNextSibling();
validateNodeContents(ydtNode, "augment1", DELETE);
ydtNode = ydtNode.getFirstChild();
validateLeafContents(ydtNode, "value1", "1");
}
/**
* Validates the given built ydt application tree.
*/
private void validateAppTree(YangRequestWorkBench ydtBuilder) {
// Assign root node to ydtNode for validating purpose.
YdtAppContext ydtAppContext = ydtBuilder.getAppRootNode();
// Logical root node does not have operation type
validateAppLogicalNodeContents(ydtAppContext);
ydtAppContext = ydtAppContext.getFirstChild();
validateAppModuleNodeContents(ydtAppContext, IETF, BOTH);
ydtAppContext = ydtAppContext.getFirstChild();
//Inside link node
validateAppNodeContents(ydtAppContext, AUG1, TOPONS, BOTH);
ydtAppContext = ydtAppContext.getParent();
validateAugmentNetworkAppTree(ydtAppContext);
}
/**
* Validates the given built ydt application tree for augmenting network
* module.
*/
private void validateAugmentNetworkAppTree(YdtAppContext ydtAppContext) {
ydtAppContext = ydtAppContext.getNextSibling();
//augmenting network module node
validateAppModuleNodeContents(ydtAppContext, "augmentNetwork", BOTH);
ydtAppContext = ydtAppContext.getFirstChild();
validateAppNodeContents(ydtAppContext, "/node", NETNS, BOTH);
}
}