YANG construct collision detection framework added
Change-Id: I1458f9e3192641f3f90c444798c31a64536ffa5d
diff --git a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListenerTest.java b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListenerTest.java
index aa86c51..961e902 100644
--- a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListenerTest.java
+++ b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListenerTest.java
@@ -69,6 +69,42 @@
}
/**
+ * Checks if container identifier in module is duplicate.
+ */
+ @Test(expected = ParserException.class)
+ public void processModuleDuplicateContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ModuleDuplicateContainer.yang");
+ }
+
+ /**
+ * Checks if container identifier in container is duplicate.
+ */
+ @Test(expected = ParserException.class)
+ public void processContainerDuplicateContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerDuplicateContainer.yang");
+ }
+
+ /**
+ * Checks if container identifier in list is duplicate.
+ */
+ @Test(expected = ParserException.class)
+ public void processListDuplicateContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListDuplicateContainer.yang");
+ }
+
+ /**
+ * Checks if container identifier collides with list at same level.
+ */
+ @Test(expected = ParserException.class)
+ public void processDuplicateContainerAndList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/DuplicateContainerAndList.yang");
+ }
+
+ /**
* Checks container statement as sub-statement of container.
*/
@Test
@@ -170,7 +206,7 @@
@Test
public void processContainerSubStatementCardinality() throws IOException, ParserException {
thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Invalid cardinality in reference before processing.");
+ thrown.expectMessage("YANG file error: Invalid cardinality of reference in container \"valid\".");
YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementCardinality.yang");
}
@@ -193,4 +229,4 @@
thrown.expectMessage("mismatched input '1valid' expecting IDENTIFIER");
YangNode node = manager.getDataModel("src/test/resources/ContainerInvalidIdentifier.yang");
}
-}
\ No newline at end of file
+}
diff --git a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListenerTest.java b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListenerTest.java
index 359b108..afa48da 100644
--- a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListenerTest.java
+++ b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListenerTest.java
@@ -120,7 +120,7 @@
@Test
public void processLeafListConfigInvalidCardinality() throws IOException, ParserException {
thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Invalid cardinality in config before processing.");
+ thrown.expectMessage("YANG file error: Invalid cardinality of config in leaf-list \"invalid-interval\".");
YangNode node = manager.getDataModel("src/test/resources/LeafListConfigInvalidCardinality.yang");
}
@@ -131,7 +131,7 @@
@Test
public void processLeafListUnitsInvalidCardinality() throws IOException, ParserException {
thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Invalid cardinality in units before processing.");
+ thrown.expectMessage("YANG file error: Invalid cardinality of units in leaf-list \"invalid-interval\".");
YangNode node = manager.getDataModel("src/test/resources/LeafListUnitsInvalidCardinality.yang");
}
diff --git a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListenerTest.java b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListenerTest.java
index df8f385..40afc03 100644
--- a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListenerTest.java
+++ b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListenerTest.java
@@ -120,7 +120,7 @@
@Test
public void processLeafConfigInvalidCardinality() throws IOException, ParserException {
thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Invalid cardinality in config before processing.");
+ thrown.expectMessage("YANG file error: Invalid cardinality of config in leaf \"invalid-interval\".");
YangNode node = manager.getDataModel("src/test/resources/LeafConfigInvalidCardinality.yang");
}
@@ -131,7 +131,7 @@
@Test
public void processLeafMandatoryInvalidCardinality() throws IOException, ParserException {
thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Invalid cardinality in mandatory before processing.");
+ thrown.expectMessage("YANG file error: Invalid cardinality of mandatory in leaf \"invalid-interval\".");
YangNode node = manager.getDataModel("src/test/resources/LeafMandatoryInvalidCardinality.yang");
}
@@ -173,6 +173,33 @@
}
/**
+ * Checks duplicate leaf statement as sub-statement of module.
+ */
+ @Test(expected = ParserException.class)
+ public void processModuleWithDuplicateLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ModuleWithDuplicateLeaf.yang");
+ }
+
+ /**
+ * Checks duplicate leaf statement as sub-statement of container.
+ */
+ @Test(expected = ParserException.class)
+ public void processContainerWithDuplicateLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerWithDuplicateLeaf.yang");
+ }
+
+ /**
+ * Checks duplicate leaf statement as sub-statement of list.
+ */
+ @Test(expected = ParserException.class)
+ public void processListWithDuplicateLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListWithDuplicateLeaf.yang");
+ }
+
+ /**
* Checks leaf statement as sub-statement of list.
*/
@Test
@@ -207,4 +234,4 @@
assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
}
-}
\ No newline at end of file
+}
diff --git a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ListListenerTest.java b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ListListenerTest.java
index 0d2d29b..fdc2221 100644
--- a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ListListenerTest.java
+++ b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ListListenerTest.java
@@ -175,7 +175,7 @@
@Test
public void processListSubStatementsCardinality() throws IOException, ParserException {
thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Invalid cardinality in reference before processing.");
+ thrown.expectMessage("YANG file error: Invalid cardinality of reference in list \"valid\".");
YangNode node = manager.getDataModel("src/test/resources/ListSubStatementsCardinality.yang");
}
@@ -185,7 +185,7 @@
@Test
public void processListStatementWithoutChild() throws IOException, ParserException {
thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Invalid cardinality in list before processing.");
+ thrown.expectMessage("YANG file error: Invalid cardinality of data-def-substatements in list \"valid\".");
YangNode node = manager.getDataModel("src/test/resources/ListStatementWithoutChild.yang");
}
diff --git a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListenerTest.java b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListenerTest.java
index f3f3876..f70dc96 100644
--- a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListenerTest.java
+++ b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListenerTest.java
@@ -122,7 +122,7 @@
@Test
public void processMaxElementsCardinality() throws IOException, ParserException {
thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Invalid cardinality in max-elements before processing.");
+ thrown.expectMessage("YANG file error: Invalid cardinality of max-elements in leaf-list \"invalid-interval\".");
YangNode node = manager.getDataModel("src/test/resources/MaxElementsCardinality.yang");
}
diff --git a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListenerTest.java b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListenerTest.java
index c8a5576..b197557 100644
--- a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListenerTest.java
+++ b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListenerTest.java
@@ -133,8 +133,7 @@
@Test
public void processMinElementsInvalidCardinality() throws IOException, ParserException {
thrown.expect(ParserException.class);
- thrown.expectMessage(
- "Internal parser error detected: Invalid cardinality in" + " min-elements before processing.");
+ thrown.expectMessage("YANG file error: Invalid cardinality of min-elements in leaf-list \"invalid-interval\".");
YangNode node = manager.getDataModel("src/test/resources/MinElementsInvalidCardinality.yang");
}
diff --git a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListenerTest.java b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListenerTest.java
index c4b9fa7..53611fe 100644
--- a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListenerTest.java
+++ b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListenerTest.java
@@ -157,7 +157,7 @@
@Test
public void processUnitsStatementCardinality() throws IOException, ParserException {
thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Invalid cardinality in units before processing.");
+ thrown.expectMessage("YANG file error: Invalid cardinality of units in leaf \"invalid-interval\".");
YangNode node = manager.getDataModel("src/test/resources/UnitsStatementCardinality.yang");
}
diff --git a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/VersionListenerTest.java b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/VersionListenerTest.java
index 2338604..e13e987 100644
--- a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/VersionListenerTest.java
+++ b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/VersionListenerTest.java
@@ -64,7 +64,7 @@
YangNode node = manager.getDataModel("src/test/resources/VersionNotPresent.yang");
// Checks for the version value in data model tree.
- assertThat(((YangModule) node).getVersion(), is((byte) 0));
+ assertThat(((YangModule) node).getVersion(), is((byte) 1));
}
/**
diff --git a/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerErrorMessageConstructionTest.java b/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerErrorMessageConstructionTest.java
index 0c1473e..9486f50 100644
--- a/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerErrorMessageConstructionTest.java
+++ b/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerErrorMessageConstructionTest.java
@@ -20,7 +20,7 @@
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
-import static org.onosproject.yangutils.parser.ParsableDataType.CONTACT_DATA;
+import static org.onosproject.yangutils.utils.YangConstructType.CONTACT_DATA;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
diff --git a/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerValidationTest.java b/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerValidationTest.java
index d39b0ae..e9843d6 100644
--- a/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerValidationTest.java
+++ b/src/test/java/org/onosproject/yangutils/parser/parseutils/ListenerValidationTest.java
@@ -23,7 +23,7 @@
import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-import static org.onosproject.yangutils.parser.ParsableDataType.YANGBASE_DATA;
+import static org.onosproject.yangutils.utils.YangConstructType.YANGBASE_DATA;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
diff --git a/src/test/resources/ContainerDuplicateContainer.yang b/src/test/resources/ContainerDuplicateContainer.yang
new file mode 100644
index 0000000..4928463
--- /dev/null
+++ b/src/test/resources/ContainerDuplicateContainer.yang
@@ -0,0 +1,23 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ container ospf {
+ container valid {
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ status current;
+ reference "RFC 6020";
+ }
+ }
+ container valid {
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ status current;
+ reference "RFC 6020";
+ }
+ }
+ }
+}
diff --git a/src/test/resources/ContainerWithDuplicateLeaf.yang b/src/test/resources/ContainerWithDuplicateLeaf.yang
new file mode 100644
index 0000000..3adaccd
--- /dev/null
+++ b/src/test/resources/ContainerWithDuplicateLeaf.yang
@@ -0,0 +1,34 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ container valid {
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ description "Interval before a route is declared invalid";
+ config true;
+ mandatory true;
+ status current;
+ reference "RFC 6020";
+ }
+ leaf valid-interval {
+ type "uint16";
+ units "seconds";
+ description "Interval before a route is declared invalid";
+ config true;
+ mandatory true;
+ status current;
+ reference "RFC 6020";
+ }
+ leaf valid-interval {
+ type "uint16";
+ units "seconds";
+ description "Interval before a route is declared invalid";
+ config true;
+ mandatory true;
+ status current;
+ reference "RFC 6020";
+ }
+ }
+}
diff --git a/src/test/resources/DuplicateContainerAndList.yang b/src/test/resources/DuplicateContainerAndList.yang
new file mode 100644
index 0000000..74c7721
--- /dev/null
+++ b/src/test/resources/DuplicateContainerAndList.yang
@@ -0,0 +1,29 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ container ospf {
+ container valid {
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ status current;
+ reference "RFC 6020";
+ }
+ }
+ list valid {
+ key "process-id";
+ container interface {
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ status current;
+ reference "RFC 6020";
+ }
+ }
+ leaf process-id {
+ type "string";
+ }
+ }
+ }
+}
diff --git a/src/test/resources/ListDuplicateContainer.yang b/src/test/resources/ListDuplicateContainer.yang
new file mode 100644
index 0000000..8c152b2
--- /dev/null
+++ b/src/test/resources/ListDuplicateContainer.yang
@@ -0,0 +1,27 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ list ospf {
+ key "process-id";
+ container interface {
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ status current;
+ reference "RFC 6020";
+ }
+ }
+ leaf process-id {
+ type "string";
+ }
+ container interface {
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ status current;
+ reference "RFC 6020";
+ }
+ }
+ }
+}
diff --git a/src/test/resources/ListWithDuplicateLeaf.yang b/src/test/resources/ListWithDuplicateLeaf.yang
new file mode 100644
index 0000000..55a78f6
--- /dev/null
+++ b/src/test/resources/ListWithDuplicateLeaf.yang
@@ -0,0 +1,26 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ list valid {
+ key "invalid-interval";
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ description "Interval before a route is declared invalid";
+ config true;
+ mandatory true;
+ status current;
+ reference "RFC 6020";
+ }
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ description "Interval before a route is declared invalid";
+ config true;
+ mandatory true;
+ status current;
+ reference "RFC 6020";
+ }
+ }
+}
diff --git a/src/test/resources/ModuleDuplicateContainer.yang b/src/test/resources/ModuleDuplicateContainer.yang
new file mode 100644
index 0000000..bc58896
--- /dev/null
+++ b/src/test/resources/ModuleDuplicateContainer.yang
@@ -0,0 +1,29 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ container valid {
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ status current;
+ reference "RFC 6020";
+ }
+ }
+ container invalid {
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ status current;
+ reference "RFC 6020";
+ }
+ }
+ container valid {
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ status current;
+ reference "RFC 6020";
+ }
+ }
+}
diff --git a/src/test/resources/ModuleWithDuplicateLeaf.yang b/src/test/resources/ModuleWithDuplicateLeaf.yang
new file mode 100644
index 0000000..2c3ecbc
--- /dev/null
+++ b/src/test/resources/ModuleWithDuplicateLeaf.yang
@@ -0,0 +1,32 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ description "Interval before a route is declared invalid";
+ config true;
+ mandatory true;
+ status current;
+ reference "RFC 6020";
+ }
+ leaf valid-interval {
+ type "uint16";
+ units "seconds";
+ description "Interval before a route is declared invalid";
+ config true;
+ mandatory true;
+ status current;
+ reference "RFC 6020";
+ }
+ leaf invalid-interval {
+ type "uint16";
+ units "seconds";
+ description "Interval before a route is declared invalid";
+ config true;
+ mandatory true;
+ status current;
+ reference "RFC 6020";
+ }
+}