blob: f27ae113f781938ba3b8d3de1da78d75609d9619 [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.yangutils.plugin.manager;
import org.apache.maven.plugin.MojoExecutionException;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.onosproject.yangutils.datamodel.YangContainer;
import org.onosproject.yangutils.datamodel.YangLeaf;
import org.onosproject.yangutils.datamodel.YangLeafRef;
import org.onosproject.yangutils.datamodel.YangList;
import org.onosproject.yangutils.datamodel.YangModule;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
import org.onosproject.yangutils.linker.impl.YangLinkerManager;
import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
import java.io.IOException;
import java.util.Iterator;
import java.util.ListIterator;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
/**
* Test cases for testing leafref inter file linking.
*/
public class InterFileLeafrefLinkingTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
private final YangUtilManager utilManager = new YangUtilManager();
private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
private final YangUtilsParserManager manager = new YangUtilsParserManager();
/**
* Checks inter file leafref linking.
*/
@Test
public void processInterFileLeafrefLinking()
throws IOException, ParserException, MojoExecutionException {
String searchDir = "src/test/resources/leafreflinker/interfile/interfileleafrefwithimport";
utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
utilManager.parseYangFileInfoSet();
utilManager.createYangNodeSet();
YangNode refNode = null;
YangNode selfNode = null;
// Create YANG node set
yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
// Add references to import list.
yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
// Carry out inter-file linking.
yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
YangNode rootNode = yangNodeIterator.next();
if (rootNode.getName().equals("module1")) {
selfNode = rootNode;
refNode = yangNodeIterator.next();
} else {
refNode = rootNode;
selfNode = yangNodeIterator.next();
}
// Check whether the data model tree returned is of type module.
assertThat(selfNode instanceof YangModule, is(true));
// Check whether the node type is set properly to module.
assertThat(selfNode.getNodeType(), is(MODULE_NODE));
// Check whether the module name is set correctly.
YangModule yangNode = (YangModule) selfNode;
assertThat(yangNode.getName(), is("module1"));
ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
YangLeaf leafInfo = leafIterator.next();
assertThat(leafInfo.getName(), is("invalid-interval"));
assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
// Check whether the data model tree returned is of type module.
assertThat(refNode instanceof YangModule, is(true));
// Check whether the node type is set properly to module.
assertThat(refNode.getNodeType(), is(MODULE_NODE));
// Check whether the module name is set correctly.
YangModule yangNode1 = (YangModule) refNode;
assertThat(yangNode1.getName(), is("module2"));
YangLeaf leafInfo1 = yangNode1.getListOfLeaf().listIterator().next();
YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo1));
assertThat(leafref.getResolvableStatus(), is(RESOLVED));
assertThat(leafref.getEffectiveDataType().getDataType(),
is(YangDataTypes.STRING));
}
/**
* Checks inter file resolution when leafref from grouping refers to other file.
*/
@Test
public void processInterFileLeafrefFromGroupingRefersToOtherFile()
throws IOException, ParserException {
String searchDir = "src/test/resources/leafreflinker/interfile/interfileleafreffromgroupingreferstootherfile";
utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
utilManager.parseYangFileInfoSet();
utilManager.createYangNodeSet();
YangNode selfNode = null;
YangNode refNode = null;
// Create YANG node set
yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
// Add references to import list.
yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
// Carry out inter-file linking.
yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
YangNode rootNode = yangNodeIterator.next();
if (rootNode.getName().equals("module1")) {
selfNode = rootNode;
refNode = yangNodeIterator.next();
} else {
refNode = rootNode;
selfNode = yangNodeIterator.next();
}
// Check whether the data model tree returned is of type module.
assertThat(selfNode instanceof YangModule, is(true));
// Check whether the node type is set properly to module.
assertThat(selfNode.getNodeType(), is(MODULE_NODE));
// Check whether the module name is set correctly.
YangModule yangNode = (YangModule) selfNode;
assertThat(yangNode.getName(), is("module1"));
YangList list = (YangList) yangNode.getChild().getChild();
ListIterator<YangLeaf> leafIterator = list.getListOfLeaf().listIterator();
YangLeaf leafInfo = leafIterator.next();
assertThat(leafInfo.getName(), is("link-tp"));
assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
assertThat(leafref.getResolvableStatus(), is(RESOLVED));
assertThat(leafref.getEffectiveDataType().getDataType(),
is(YangDataTypes.STRING));
}
/**
* Checks inter file resolution when leafref from grouping with prefix is changed properly during cloning.
*/
@Test
public void processInterFileLeafrefFromGroupingWithPrefixIsCloned()
throws IOException, ParserException {
String searchDir = "src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefix";
utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
utilManager.parseYangFileInfoSet();
utilManager.createYangNodeSet();
YangNode selfNode = null;
YangNode refNode = null;
// Create YANG node set
yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
// Add references to import list.
yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
// Carry out inter-file linking.
yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
YangNode rootNode = yangNodeIterator.next();
if (rootNode.getName().equals("LeafrefInGroupingOfModule1")) {
selfNode = rootNode;
refNode = yangNodeIterator.next();
} else {
refNode = rootNode;
selfNode = yangNodeIterator.next();
}
// Check whether the data model tree returned is of type module.
assertThat(selfNode instanceof YangModule, is(true));
// Check whether the node type is set properly to module.
assertThat(selfNode.getNodeType(), is(MODULE_NODE));
// Check whether the module name is set correctly.
YangModule yangNode = (YangModule) selfNode;
assertThat(yangNode.getName(), is("LeafrefInGroupingOfModule1"));
// Check whether the module name is set correctly.
YangModule yangNode1 = (YangModule) refNode;
assertThat(yangNode1.getName(), is("GroupingCopiedInModule2"));
YangContainer yangContainer = (YangContainer) yangNode1.getChild();
ListIterator<YangLeaf> leafIterator = yangContainer.getListOfLeaf().listIterator();
YangLeaf leafInfo = leafIterator.next();
assertThat(leafInfo.getName(), is("network-ref"));
assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
assertThat(leafref.getResolvableStatus(), is(RESOLVED));
assertThat(leafref.getEffectiveDataType().getDataType(),
is(YangDataTypes.STRING));
}
/**
* Checks inter file resolution when leafref from grouping with prefix is changed properly during cloning with
* multi reference.
*/
@Test
public void processInterFileLeafrefFromGroupingWithPrefixIsClonedMultiReference()
throws IOException, ParserException {
String searchDir = "src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefixAndManyReference";
utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
utilManager.parseYangFileInfoSet();
utilManager.createYangNodeSet();
YangNode selfNode = null;
YangNode refNode = null;
// Create YANG node set
yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
// Add references to import list.
yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
// Carry out inter-file linking.
yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
YangNode rootNode = yangNodeIterator.next();
if (rootNode.getName().equals("ietf-network")) {
selfNode = rootNode;
refNode = yangNodeIterator.next();
} else {
refNode = rootNode;
selfNode = yangNodeIterator.next();
}
// Check whether the data model tree returned is of type module.
assertThat(selfNode instanceof YangModule, is(true));
// Check whether the node type is set properly to module.
assertThat(selfNode.getNodeType(), is(MODULE_NODE));
// Check whether the module name is set correctly.
YangModule yangNode = (YangModule) selfNode;
assertThat(yangNode.getName(), is("ietf-network"));
// Check whether the module name is set correctly.
YangModule yangNode1 = (YangModule) refNode;
assertThat(yangNode1.getName(), is("ietf-te-topology"));
YangContainer yangContainer = (YangContainer) yangNode1.getChild().getNextSibling();
ListIterator<YangLeaf> leafIterator;
YangLeaf leafInfo;
leafIterator = yangContainer.getListOfLeaf().listIterator();
leafInfo = leafIterator.next();
leafInfo = leafIterator.next();
assertThat(leafInfo.getName(), is("node-ref"));
assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
assertThat(leafref.getResolvableStatus(), is(RESOLVED));
assertThat(leafref.getEffectiveDataType().getDataType(),
is(YangDataTypes.DERIVED));
leafInfo = leafIterator.next();
assertThat(leafInfo.getName(), is("network-ref"));
assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
YangLeafRef leafref1 = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
YangLeaf leafInfo4 = (YangLeaf) leafref1.getReferredLeafOrLeafList();
assertThat(leafref1.getReferredLeafOrLeafList(), is(leafInfo4));
assertThat(leafref1.getResolvableStatus(), is(RESOLVED));
assertThat(leafref1.getEffectiveDataType().getDataType(),
is(YangDataTypes.DERIVED));
}
}