isKeyLeaf is set only if config is true
Change-Id: I51c2deebcb74793352fccb1287bad14dc0dfc3bb
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListener.java
index 5b19260..a42eccc 100644
--- a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListener.java
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListener.java
@@ -138,11 +138,9 @@
leaf.setContainedIn(leavesHolder);
if (tmpData instanceof YangList) {
YangList list = (YangList) tmpData;
- if (list.isConfig()) {
- for (String key : list.getKeyList()) {
- if (key.equals(leaf.getName())) {
- leaf.setKeyLeaf(true);
- }
+ for (String key : list.getKeyList()) {
+ if (key.equals(leaf.getName())) {
+ leaf.setKeyLeaf(true);
}
}
}
diff --git a/serializers/xml/src/test/java/org/onosproject/yang/serializers/xml/XmlSerializerTest.java b/serializers/xml/src/test/java/org/onosproject/yang/serializers/xml/XmlSerializerTest.java
index b3f7dda..541046b 100644
--- a/serializers/xml/src/test/java/org/onosproject/yang/serializers/xml/XmlSerializerTest.java
+++ b/serializers/xml/src/test/java/org/onosproject/yang/serializers/xml/XmlSerializerTest.java
@@ -60,6 +60,7 @@
private static YangSerializer xmlSerializer;
public static final String LNS = "yrt:list.anydata";
+ private static final String LIST_NS = "yrt:list";
@BeforeClass
public static void prepare() {
@@ -586,4 +587,48 @@
InputStream inputStream = compositeStream.resourceData();
assertThat(convertInputStreamToString(inputStream), is(parseXml(path)));
}
+
+ /**
+ * Validates data node in which XML element is of type YANG List with config false.
+ */
+ @Test
+ public void testListWithConfigFalse() {
+ String path = "src/test/resources/testListWithConfigFalse.xml";
+ DefaultCompositeStream external =
+ new DefaultCompositeStream(null, parseInput(path));
+ CompositeData compositeData = xmlSerializer.decode(external, context);
+ DataNode rootNode = validateRootDataNode(compositeData.resourceData());
+ List<String> keyNames = new LinkedList<>();
+ keyNames.add("m1");
+ keyNames.add("m2");
+
+ List<String> keyNs = new LinkedList<>();
+ keyNs.add(LIST_NS);
+ keyNs.add(LIST_NS);
+
+ List<Object> values = new LinkedList<>();
+ values.add("m1_Value");
+ values.add("m2_Value");
+
+ DataNode c2Node = validateContainerDataNode(rootNode, "c2", LIST_NS);
+ DataNode listl1 = validateListDataNode(c2Node, "l2", LIST_NS,
+ keyNames, keyNs, values);
+ validateLeafDataNode(listl1, "m1", LIST_NS, "m1_Value");
+ validateLeafDataNode(listl1, "m2", LIST_NS, "m2_Value");
+
+ List<Object> values1 = new LinkedList<>();
+ values1.add("m1_Value1");
+ values1.add("m2_Value1");
+
+ DataNode listl2 = validateListDataNode(c2Node, "l2", LIST_NS,
+ keyNames, keyNs, values1);
+ validateLeafDataNode(listl2, "m1", LIST_NS, "m1_Value1");
+ validateLeafDataNode(listl2, "m2", LIST_NS, "m2_Value1");
+
+ // encode test
+ CompositeStream compositeStream = xmlSerializer.encode(
+ getNewCompositeData(compositeData), context);
+ InputStream inputStream = compositeStream.resourceData();
+ assertThat(convertInputStreamToString(inputStream), is(parseXml(path)));
+ }
}
diff --git a/serializers/xml/src/test/resources/list.yang b/serializers/xml/src/test/resources/list.yang
index 2ff07dc..d15c992 100644
--- a/serializers/xml/src/test/resources/list.yang
+++ b/serializers/xml/src/test/resources/list.yang
@@ -38,4 +38,18 @@
leaf-list leaf1 {
type string;
}
+
+ container c2 {
+ config false;
+ list l2 {
+ key "m1 m2";
+ leaf m1 {
+ type string;
+ }
+
+ leaf m2 {
+ type string;
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/serializers/xml/src/test/resources/testListWithConfigFalse.xml b/serializers/xml/src/test/resources/testListWithConfigFalse.xml
new file mode 100644
index 0000000..ed724ef
--- /dev/null
+++ b/serializers/xml/src/test/resources/testListWithConfigFalse.xml
@@ -0,0 +1,10 @@
+<c2 xmlns="yrt:list" operation="replace">
+<l2>
+<m1>m1_Value</m1>
+<m2>m2_Value</m2>
+</l2>
+<l2>
+<m1>m1_Value1</m1>
+<m2>m2_Value1</m2>
+</l2>
+</c2>