serializer helper fix and data node walker

Change-Id: I46c0b0228370044b2f56c4fe5fafeb6cd11bfff2
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/TestUtils.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/TestUtils.java
index 8b8c058..b17981a 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/TestUtils.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/TestUtils.java
@@ -29,7 +29,9 @@
 import org.onosproject.yang.model.ResourceId;
 import org.onosproject.yang.model.SchemaContext;
 import org.onosproject.yang.model.SchemaId;
+import org.onosproject.yang.runtime.helperutils.DataNodeListener;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import static org.junit.Assert.assertEquals;
@@ -38,8 +40,9 @@
 import static org.onosproject.yang.model.DataNode.Type.MULTI_INSTANCE_LEAF_VALUE_NODE;
 import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_LEAF_VALUE_NODE;
 import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_NODE;
+import static org.onosproject.yang.runtime.helperutils.DefaultDataNodeWalker.walk;
 
-public final class TestUtils {
+public final class TestUtils implements DataNodeListener {
 
     /**
      * Restricts creation of test utils instance.
@@ -47,6 +50,37 @@
     private TestUtils() {
     }
 
+    public static final String PERIOD = ".";
+
+    // Logger list is used for walker testing.
+    private static final List<String> LOGGER = new ArrayList<>();
+
+    @Override
+    public void enterDataNode(DataNode node) {
+        LOGGER.add("Entry Node is " + node.key().schemaId().name() + PERIOD);
+    }
+
+    @Override
+    public void exitDataNode(DataNode node) {
+        LOGGER.add("Exit Node is " + node.key().schemaId().name() + PERIOD);
+    }
+
+    /**
+     * Returns the LOGGER with log for testing the YDT walker.
+     *
+     * @return list of logs
+     */
+    public static List<String> getLogger() {
+        return LOGGER;
+    }
+
+    /**
+     * Clear the LOGGER array.
+     */
+    public static void resetLogger() {
+        LOGGER.clear();
+    }
+
     /**
      * Checks the schema context values of given leaf node.
      */
@@ -135,7 +169,12 @@
                     j++;
                 }
             } else if (k instanceof LeafListKey) {
-                val = ((LeafListKey) k).value().toString();
+                if (((LeafListKey) k).value() == null) {
+                    assertNull(valA[j]);
+                    val = null;
+                } else {
+                    val = ((LeafListKey) k).value().toString();
+                }
             }
             if (val != null) {
                 assertEquals(val, valA[j]);
@@ -162,15 +201,19 @@
         assertEquals(id.name(), n);
         assertEquals(id.namespace(), ns);
         if (node instanceof InnerNode) {
-            assertEquals(((InnerNode) node).type(), type);
+            assertEquals(node.type(), type);
             if (isChild) {
                 assertNotNull(((InnerNode) node).childNodes());
             } else {
                 assertNull(((InnerNode) node).childNodes());
             }
         } else {
-            assertEquals(((LeafNode) node).type(), type);
-            assertEquals(((LeafNode) node).value().toString(), value);
+            assertEquals(node.type(), type);
+            if (((LeafNode) node).value() == null) {
+                assertNull(value);
+            } else {
+                assertEquals(((LeafNode) node).value().toString(), value);
+            }
         }
     }
 
@@ -189,4 +232,22 @@
         assertEquals(id.namespace(), ns);
         assertEquals(key.leafValue().toString(), v);
     }
+
+    /**
+     * Walks in the given built data tree and validates it.
+     */
+    public static void walkINTree(DataNode node,
+                                  String[] expected) {
+        resetLogger();
+
+        TestUtils utils = new TestUtils();
+        // Assign root node as starting node to walk the whole tree.
+        walk(utils, node);
+        // Logger list is used for walker testing.
+        List<String> logger = getLogger();
+
+        for (int i = 0; i < expected.length; i++) {
+            assertEquals(expected[i], logger.get(i));
+        }
+    }
 }
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeIetfNetTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeIetfNetTest.java
index df125bc..43b75b2 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeIetfNetTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeIetfNetTest.java
@@ -26,6 +26,7 @@
 import static org.onosproject.yang.runtime.helperutils.SerializerHelper.exitDataNode;
 import static org.onosproject.yang.runtime.helperutils.SerializerHelper.getResourceId;
 import static org.onosproject.yang.runtime.helperutils.SerializerHelper.initializeDataNode;
+import static org.onosproject.yang.runtime.impl.TestUtils.walkINTree;
 import static org.onosproject.yang.runtime.impl.schemacontext.SchemaContextTest.IETFNS;
 import static org.onosproject.yang.runtime.impl.TestUtils.validateResourceId;
 
@@ -63,6 +64,38 @@
     String[] nsA;
     String[] valA;
 
+    private static final String[] EXPECTED = {
+            "Entry Node is /.",
+            "Entry Node is networks.",
+            "Entry Node is network.",
+            "Entry Node is network-id.",
+            "Exit Node is network-id.",
+            "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 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.",
+            "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 /.",
+    };
     /**
      * Test add to data node builder.
      */
@@ -129,15 +162,19 @@
         value = "network5";
         dBlr = addDataNode(dBlr, "network-ref", null, value, null);
         dBlr = exitDataNode(dBlr);
-
         // Adding leaf server-provided
         value = "true";
         dBlr = addDataNode(dBlr, "server-provided", null, value, null);
+        dBlr = exitDataNode(dBlr);
+        dBlr = exitDataNode(dBlr);
+        dBlr = exitDataNode(dBlr);
 
         //Tree validation
         nA = new String[]{"/", "networks", "network", "network-id", ""};
         nsA = new String[]{null, IETFNS, IETFNS, IETFNS, ""};
         valA = new String[]{"network1", ""};
         validateResourceId(nA, nsA, valA, id);
+        DataNode node = dBlr.build();
+        walkINTree(dBlr.build(), EXPECTED);
     }
 }
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeLeafListTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeLeafListTest.java
new file mode 100644
index 0000000..57618b9
--- /dev/null
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeLeafListTest.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2017-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.yang.runtime.impl.serializerhelper;
+
+import org.junit.Test;
+import org.onosproject.yang.model.DataNode;
+import org.onosproject.yang.model.ResourceId;
+import org.onosproject.yang.runtime.helperutils.HelperContext;
+import org.onosproject.yang.runtime.impl.TestYangSerializerContext;
+
+import static org.onosproject.yang.model.DataNode.Type.MULTI_INSTANCE_LEAF_VALUE_NODE;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.addDataNode;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.getResourceId;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.initializeDataNode;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.initializeResourceId;
+import static org.onosproject.yang.runtime.impl.TestUtils.validateDataNode;
+import static org.onosproject.yang.runtime.impl.TestUtils.validateResourceId;
+import static org.onosproject.yang.runtime.impl.TestUtils.walkINTree;
+
+/**
+ * Tests the serializer helper methods.
+ */
+public class AddToDataNodeLeafListTest {
+
+    public static final String LNS = "yrt:list";
+
+    TestYangSerializerContext context = new TestYangSerializerContext();
+
+    /*
+     * Reference for data node info.
+     */
+    HelperContext info;
+
+    /*
+     * Reference for data node builder.
+     */
+    DataNode.Builder dBlr;
+
+    /*
+     * Reference for resource id.
+     */
+    ResourceId id;
+
+    /*
+     * Reference for the value.
+     */
+    String value;
+
+    /*
+     * Reference for string array to used for resource id testing.
+     */
+    String[] nA;
+    String[] nsA;
+    String[] valA;
+
+    private static final String[] EXPECTED = {
+            "Entry Node is leaf1.",
+            "Exit Node is leaf1."
+    };
+
+    /**
+     * Test add to data node after initializing it with resource builder.
+     */
+    @Test
+    public void addToDataLeafListTest() {
+
+        ResourceId.Builder rIdBlr = initializeResourceId(context);
+        dBlr = initializeDataNode(rIdBlr);
+        value = "0";
+        dBlr = addDataNode(dBlr, "leaf1", LNS, value, null);
+        info = (HelperContext) dBlr.appInfo();
+        id = getResourceId(dBlr);
+
+        //Tree validation
+        nA = new String[]{"/", "leaf1"};
+        nsA = new String[]{null, LNS};
+        valA = new String[]{"0"};
+        validateResourceId(nA, nsA, valA, id);
+
+        DataNode node = dBlr.build();
+        validateDataNode(node, "leaf1", LNS, MULTI_INSTANCE_LEAF_VALUE_NODE,
+                         false, "0");
+        walkINTree(node, EXPECTED);
+    }
+}
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeList1Test.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeList1Test.java
new file mode 100644
index 0000000..3ce0be0
--- /dev/null
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeList1Test.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2017-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.yang.runtime.impl.serializerhelper;
+
+import org.junit.Test;
+import org.onosproject.yang.model.DataNode;
+import org.onosproject.yang.model.InnerNode;
+import org.onosproject.yang.model.KeyLeaf;
+import org.onosproject.yang.model.ListKey;
+import org.onosproject.yang.model.NodeKey;
+import org.onosproject.yang.model.ResourceId;
+import org.onosproject.yang.runtime.helperutils.HelperContext;
+import org.onosproject.yang.runtime.impl.TestYangSerializerContext;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+
+import static org.onosproject.yang.model.DataNode.Type.MULTI_INSTANCE_NODE;
+import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_LEAF_VALUE_NODE;
+import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_NODE;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.addDataNode;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.exitDataNode;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.getResourceId;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.initializeDataNode;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.initializeResourceId;
+import static org.onosproject.yang.runtime.impl.TestUtils.validateDataNode;
+import static org.onosproject.yang.runtime.impl.TestUtils.validateLeafDataNode;
+import static org.onosproject.yang.runtime.impl.TestUtils.validateResourceId;
+import static org.onosproject.yang.runtime.impl.TestUtils.walkINTree;
+
+/**
+ * Tests the serializer helper methods.
+ */
+public class AddToDataNodeList1Test {
+
+
+    public static final String LNS = "yrt:list";
+
+    TestYangSerializerContext context = new TestYangSerializerContext();
+
+    /*
+     * Reference for data node info.
+     */
+    HelperContext info;
+
+    /*
+     * Reference for data node builder.
+     */
+    DataNode.Builder dBlr;
+
+    /*
+     * Reference for resource id.
+     */
+    ResourceId id;
+
+    /*
+     * Reference for the value.
+     */
+    String value;
+
+    /*
+     * Reference for string array to used for resource id testing.
+     */
+    String[] nA;
+    String[] nsA;
+    String[] valA;
+
+    private static final String[] EXPECTED = {
+            "Entry Node is l1.",
+            "Entry Node is k1.",
+            "Exit Node is k1.",
+            "Entry Node is k2.",
+            "Exit Node is k2.",
+            "Entry Node is c1.",
+            "Entry Node is leaf_c1.",
+            "Exit Node is leaf_c1.",
+            "Exit Node is c1.",
+            "Entry Node is k3.",
+            "Exit Node is k3.",
+            "Exit Node is l1.",
+    };
+
+    /**
+     * Test add to data node builder.
+     */
+    @Test
+    public void addToDataListTest() throws IOException {
+        ResourceId.Builder rIdBlr = initializeResourceId(context);
+        dBlr = initializeDataNode(rIdBlr);
+
+        dBlr = addDataNode(dBlr, "l1", LNS, value, null);
+        value = "1";
+        dBlr = addDataNode(dBlr, "k1", null, value, null);
+        dBlr = exitDataNode(dBlr);
+        value = "2";
+        dBlr = addDataNode(dBlr, "k2", null, value, null);
+        dBlr = exitDataNode(dBlr);
+        value = null;
+        dBlr = addDataNode(dBlr, "c1", null, value, null);
+        value = "0";
+        dBlr = addDataNode(dBlr, "leaf_c1", null, value, null);
+
+        info = (HelperContext) dBlr.appInfo();
+        id = getResourceId(dBlr);
+        dBlr = exitDataNode(dBlr);
+
+        ResourceId id1 = getResourceId(dBlr);
+        dBlr = exitDataNode(dBlr);
+
+        value = "3";
+        dBlr = addDataNode(dBlr, "k3", null, value, null);
+
+        info = (HelperContext) dBlr.appInfo();
+        ResourceId id2 = getResourceId(dBlr);
+
+        dBlr = exitDataNode(dBlr);
+
+        //Tree validation
+        nA = new String[]{"/", "l1", "k1", "k2", "k3", "c1", "leaf_c1"};
+        nsA = new String[]{null, LNS, LNS, LNS, LNS, LNS, LNS};
+        valA = new String[]{"1", "2", "3", "0"};
+        validateResourceId(nA, nsA, valA, id);
+
+        nA = new String[]{"/", "l1", "k1", "k2", "k3", "c1"};
+        nsA = new String[]{null, LNS, LNS, LNS, LNS, LNS};
+        valA = new String[]{"1", "2", "3"};
+        validateResourceId(nA, nsA, valA, id1);
+
+        nA = new String[]{"/", "l1", "k1", "k2", "k3"};
+        nsA = new String[]{null, LNS, LNS, LNS, LNS};
+        valA = new String[]{"1", "2", "3"};
+        validateResourceId(nA, nsA, valA, id2);
+
+        // Validating the data node.
+        DataNode node = dBlr.build();
+
+        validateDataNode(node, "l1", LNS, MULTI_INSTANCE_NODE,
+                         true, null);
+        Iterator<KeyLeaf> keyIt = ((ListKey) node.key())
+                .keyLeafs().iterator();
+
+        validateLeafDataNode(keyIt.next(), "k1", LNS, "1");
+        validateLeafDataNode(keyIt.next(), "k2", LNS, "2");
+        validateLeafDataNode(keyIt.next(), "k3", LNS, "3");
+
+        Iterator<Map.Entry<NodeKey, DataNode>> it1;
+        it1 = ((InnerNode) node).childNodes().entrySet().iterator();
+        validateDataNode(it1.next().getValue(), "k1", LNS,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, "1");
+        validateDataNode(it1.next().getValue(), "k2", LNS,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, "2");
+        DataNode n1 = it1.next().getValue();
+        validateDataNode(n1, "c1", LNS,
+                         SINGLE_INSTANCE_NODE, true, null);
+        validateDataNode(it1.next().getValue(), "k3", LNS,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, "3");
+
+        Iterator<Map.Entry<NodeKey, DataNode>> it2;
+        it2 = ((InnerNode) n1).childNodes().entrySet().iterator();
+        validateDataNode(it2.next().getValue(), "leaf_c1", LNS,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, "0");
+        walkINTree(node, EXPECTED);
+    }
+}
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeListTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeListTest.java
index e5e6579..510ca2e 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeListTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeListTest.java
@@ -41,6 +41,7 @@
 import static org.onosproject.yang.runtime.impl.TestUtils.validateDataNode;
 import static org.onosproject.yang.runtime.impl.TestUtils.validateLeafDataNode;
 import static org.onosproject.yang.runtime.impl.TestUtils.validateResourceId;
+import static org.onosproject.yang.runtime.impl.TestUtils.walkINTree;
 
 /**
  * Tests the serializer helper methods.
@@ -78,15 +79,38 @@
     String[] nsA;
     String[] valA;
 
+    private static final String[] EXPECTED = {
+            "Entry Node is /.",
+            "Entry Node is l1.",
+            "Entry Node is k1.",
+            "Exit Node is k1.",
+            "Entry Node is k2.",
+            "Exit Node is k2.",
+            "Entry Node is c1.",
+            "Entry Node is leaf_c1.",
+            "Exit Node is leaf_c1.",
+            "Exit Node is c1.",
+            "Entry Node is k3.",
+            "Exit Node is k3.",
+            "Exit Node is l1.",
+            "Entry Node is leaf1.",
+            "Exit Node is leaf1.",
+            "Entry Node is leaf1.",
+            "Exit Node is leaf1.",
+            "Entry Node is leaf1.",
+            "Exit Node is leaf1.",
+            "Entry Node is leaf1.",
+            "Exit Node is leaf1.",
+            "Exit Node is /."
+    };
+
     /**
      * Test add to data node builder.
      */
     @Test
     public void addToDataListTest() throws IOException {
-
-        Object ob;
+        ResourceId id;
         dBlr = initializeDataNode(context);
-
         dBlr = addDataNode(dBlr, "l1", LNS, value, null);
         value = "1";
         dBlr = addDataNode(dBlr, "k1", null, value, null);
@@ -97,7 +121,7 @@
         value = null;
         dBlr = addDataNode(dBlr, "c1", null, value, null);
         value = "0";
-        dBlr = addDataNode(dBlr, "l1", null, value, null);
+        dBlr = addDataNode(dBlr, "leaf_c1", null, value, null);
 
         info = (HelperContext) dBlr.appInfo();
         id = getResourceId(dBlr);
@@ -125,32 +149,33 @@
         value = "3";
         dBlr = addDataNode(dBlr, "leaf1", LNS, value, null);
         dBlr = exitDataNode(dBlr);
-        value = "4";
+        value = null;
         dBlr = addDataNode(dBlr, "leaf1", LNS, value, null);
         ResourceId id3 = getResourceId(dBlr);
         dBlr = exitDataNode(dBlr);
 
         //Tree validation
-        nA = new String[]{"/", "l1", "k1", "k2", "k3", "c1", "l1", ""};
-        nsA = new String[]{null, LNS, LNS, LNS, LNS, LNS, LNS, ""};
-        valA = new String[]{"1", "2", "3", "0", ""};
+        nA = new String[]{"/", "l1", "k1", "k2", "k3", "c1", "leaf_c1"};
+        nsA = new String[]{null, LNS, LNS, LNS, LNS, LNS, LNS};
+        valA = new String[]{"1", "2", "3", "0"};
         validateResourceId(nA, nsA, valA, id);
 
-        nA = new String[]{"/", "l1", "k1", "k2", "k3", "c1", ""};
-        nsA = new String[]{null, LNS, LNS, LNS, LNS, LNS, ""};
-        valA = new String[]{"1", "2", "3", ""};
+        nA = new String[]{"/", "l1", "k1", "k2", "k3", "c1"};
+        nsA = new String[]{null, LNS, LNS, LNS, LNS, LNS};
+        valA = new String[]{"1", "2", "3"};
         validateResourceId(nA, nsA, valA, id1);
 
-        nA = new String[]{"/", "l1", "k1", "k2", "k3", ""};
-        nsA = new String[]{null, LNS, LNS, LNS, LNS, ""};
-        valA = new String[]{"1", "2", "3", ""};
+        nA = new String[]{"/", "l1", "k1", "k2", "k3"};
+        nsA = new String[]{null, LNS, LNS, LNS, LNS};
+        valA = new String[]{"1", "2", "3"};
         validateResourceId(nA, nsA, valA, id2);
 
-        nA = new String[]{"/", "leaf1", ""};
-        nsA = new String[]{null, LNS, ""};
-        valA = new String[]{"4", "2", "3", "0", ""};
+        nA = new String[]{"/", "leaf1"};
+        nsA = new String[]{null, LNS};
+        valA = new String[]{null};
         validateResourceId(nA, nsA, valA, id3);
 
+        // Validating the data node.
         DataNode node = dBlr.build();
         validateDataNode(node, "/", null, SINGLE_INSTANCE_NODE, true, null);
 
@@ -180,7 +205,7 @@
 
         Iterator<Map.Entry<NodeKey, DataNode>> it2;
         it2 = ((InnerNode) n1).childNodes().entrySet().iterator();
-        validateDataNode(it2.next().getValue(), "l1", LNS,
+        validateDataNode(it2.next().getValue(), "leaf_c1", LNS,
                          SINGLE_INSTANCE_LEAF_VALUE_NODE, false, "0");
         validateDataNode(it.next().getValue(), "leaf1", LNS,
                          MULTI_INSTANCE_LEAF_VALUE_NODE, false, "1");
@@ -189,6 +214,7 @@
         validateDataNode(it.next().getValue(), "leaf1", LNS,
                          MULTI_INSTANCE_LEAF_VALUE_NODE, false, "3");
         validateDataNode(it.next().getValue(), "leaf1", LNS,
-                         MULTI_INSTANCE_LEAF_VALUE_NODE, false, "4");
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, false, null);
+        walkINTree(dBlr.build(), EXPECTED);
     }
 }
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeLogisticTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeLogisticTest.java
new file mode 100644
index 0000000..fc088d5
--- /dev/null
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeLogisticTest.java
@@ -0,0 +1,423 @@
+/*
+ * Copyright 2017-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.yang.runtime.impl.serializerhelper;
+
+import org.junit.Test;
+import org.onosproject.yang.model.DataNode;
+import org.onosproject.yang.model.InnerNode;
+import org.onosproject.yang.model.KeyLeaf;
+import org.onosproject.yang.model.ListKey;
+import org.onosproject.yang.model.NodeKey;
+import org.onosproject.yang.model.ResourceId;
+import org.onosproject.yang.runtime.helperutils.HelperContext;
+import org.onosproject.yang.runtime.impl.TestYangSerializerContext;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import static org.onosproject.yang.model.DataNode.Type.MULTI_INSTANCE_LEAF_VALUE_NODE;
+import static org.onosproject.yang.model.DataNode.Type.MULTI_INSTANCE_NODE;
+import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_LEAF_VALUE_NODE;
+import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_NODE;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.addDataNode;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.exitDataNode;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.getResourceId;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.initializeDataNode;
+import static org.onosproject.yang.runtime.impl.TestUtils.validateDataNode;
+import static org.onosproject.yang.runtime.impl.TestUtils.validateLeafDataNode;
+import static org.onosproject.yang.runtime.impl.TestUtils.validateResourceId;
+import static org.onosproject.yang.runtime.impl.TestUtils.walkINTree;
+
+/**
+ * Tests the serializer helper methods.
+ */
+public class AddToDataNodeLogisticTest {
+
+    public static final String LMNG = "yrt.Logistics-manager";
+
+    TestYangSerializerContext context = new TestYangSerializerContext();
+
+    /*
+     * Reference for data node info.
+     */
+    HelperContext info;
+
+    /*
+     * Reference for data node builder.
+     */
+    DataNode.Builder dBlr;
+
+    /*
+     * Reference for resource id.
+     */
+    ResourceId id;
+
+    /*
+     * Reference for the value.
+     */
+    String value;
+
+    /*
+     * Reference for string array to used for resource id testing.
+     */
+    String[] nA;
+    String[] nsA;
+    String[] valA;
+
+    private static final String[] EXPECTED = {
+            "Entry Node is /.",
+
+            "Entry Node is Customs-supervisor.",
+            "Exit Node is Customs-supervisor.",
+
+            "Entry Node is Merchandiser-supervisor.",
+            "Exit Node is Merchandiser-supervisor.",
+
+            "Entry Node is Material-supervisor.",
+            "Entry Node is name.",
+            "Exit Node is name.",
+            "Entry Node is departmentId.",
+            "Exit Node is departmentId.",
+            "Exit Node is Material-supervisor.",
+
+            "Entry Node is Material-supervisor.",
+            "Entry Node is name.",
+            "Exit Node is name.",
+            "Entry Node is departmentId.",
+            "Exit Node is departmentId.",
+            "Exit Node is Material-supervisor.",
+
+            "Entry Node is Material-supervisor.",
+            "Entry Node is name.",
+            "Exit Node is name.",
+            "Entry Node is departmentId.",
+            "Exit Node is departmentId.",
+            "Exit Node is Material-supervisor.",
+
+            "Entry Node is Purchasing-supervisor.",
+
+            "Entry Node is purchasing-specialist.",
+            "Exit Node is purchasing-specialist.",
+
+            "Entry Node is support.",
+            "Exit Node is support.",
+
+            "Entry Node is support.",
+            "Exit Node is support.",
+
+            "Entry Node is support.",
+            "Exit Node is support.",
+
+            "Exit Node is Purchasing-supervisor.",
+
+            "Entry Node is Warehouse-supervisor.",
+            "Exit Node is Warehouse-supervisor.",
+
+            "Entry Node is Warehouse-supervisor.",
+            "Exit Node is Warehouse-supervisor.",
+
+            "Entry Node is Warehouse-supervisor.",
+            "Exit Node is Warehouse-supervisor.",
+
+            "Entry Node is Warehouse-supervisor.",
+            "Exit Node is Warehouse-supervisor.",
+
+            "Entry Node is Trading-supervisor.",
+            "Exit Node is Trading-supervisor.",
+
+            "Entry Node is Employee-id.",
+            "Exit Node is Employee-id.",
+
+            "Entry Node is Employee-id.",
+            "Exit Node is Employee-id.",
+
+            "Entry Node is Employee-id.",
+            "Exit Node is Employee-id.",
+
+            "Entry Node is Employee-id.",
+            "Exit Node is Employee-id.",
+            "Exit Node is /."
+    };
+
+    /**
+     * Test add to data node builder logistic manager module.
+     */
+    @Test
+    public void addToDataTest() {
+
+        dBlr = getLogisticModuleDataNode();
+
+        walkINTree(dBlr.build(), EXPECTED);
+        // Validating the data node.
+        DataNode node = dBlr.build();
+        validateDataNode(node, "/", null, SINGLE_INSTANCE_NODE, true, null);
+
+        Map<NodeKey, DataNode> childMap = ((InnerNode) node).childNodes();
+        Iterator<Map.Entry<NodeKey, DataNode>> it = childMap.entrySet().iterator();
+        Map.Entry<NodeKey, DataNode> n = it.next();
+        value = "1";
+        validateDataNode(n.getValue(), "Customs-supervisor", LMNG,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, value);
+
+        n = it.next();
+        value = "1";
+        validateDataNode(n.getValue(), "Merchandiser-supervisor", LMNG,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, value);
+
+        n = it.next();
+        value = null;
+        validateDataNode(n.getValue(), "Material-supervisor", LMNG,
+                         MULTI_INSTANCE_NODE, true, value);
+
+        Iterator<KeyLeaf> keyIt = ((ListKey) n.getKey()).keyLeafs().iterator();
+        validateLeafDataNode(keyIt.next(), "name", LMNG, "abc");
+
+        Iterator<Map.Entry<NodeKey, DataNode>> it1;
+        it1 = ((InnerNode) n.getValue()).childNodes().entrySet().iterator();
+        validateDataNode(it1.next().getValue(), "name", LMNG,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, "abc");
+        validateDataNode(it1.next().getValue(), "departmentId", LMNG,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, "dep-1");
+
+        n = it.next();
+        value = null;
+        validateDataNode(n.getValue(), "Material-supervisor", LMNG,
+                         MULTI_INSTANCE_NODE, true, value);
+
+        keyIt = ((ListKey) n.getKey()).keyLeafs().iterator();
+        validateLeafDataNode(keyIt.next(), "name", LMNG, "abc1");
+        it1 = ((InnerNode) n.getValue()).childNodes().entrySet().iterator();
+        validateDataNode(it1.next().getValue(), "name", LMNG,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, "abc1");
+        validateDataNode(it1.next().getValue(), "departmentId", LMNG,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, "dep-1");
+
+        n = it.next();
+        value = null;
+        validateDataNode(n.getValue(), "Material-supervisor", LMNG,
+                         MULTI_INSTANCE_NODE, true, value);
+
+        keyIt = ((ListKey) n.getKey()).keyLeafs().iterator();
+        validateLeafDataNode(keyIt.next(), "name", LMNG, "abc2");
+        it1 = ((InnerNode) n.getValue()).childNodes().entrySet().iterator();
+        validateDataNode(it1.next().getValue(), "name", LMNG,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, "abc2");
+        validateDataNode(it1.next().getValue(), "departmentId", LMNG,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, "dep-1");
+
+        n = it.next();
+        value = null;
+        validateDataNode(n.getValue(), "Purchasing-supervisor", LMNG,
+                         SINGLE_INSTANCE_NODE, true, value);
+
+        it1 = ((InnerNode) n.getValue()).childNodes().entrySet().iterator();
+        validateDataNode(it1.next().getValue(), "purchasing-specialist", LMNG,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, "xyz");
+        validateDataNode(it1.next().getValue(), "support", LMNG,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, false, "helpdesk");
+        validateDataNode(it1.next().getValue(), "support", LMNG,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, false, "helpdesk1");
+        validateDataNode(it1.next().getValue(), "support", LMNG,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, false, "helpdesk2");
+
+        n = it.next();
+        value = "1";
+        validateDataNode(n.getValue(), "Warehouse-supervisor", LMNG,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, false, value);
+
+        n = it.next();
+        value = "2";
+        validateDataNode(n.getValue(), "Warehouse-supervisor", LMNG,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, false, value);
+
+        n = it.next();
+        value = "3";
+        validateDataNode(n.getValue(), "Warehouse-supervisor", LMNG,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, false, value);
+
+        n = it.next();
+        value = "4";
+        validateDataNode(n.getValue(), "Warehouse-supervisor", LMNG,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, false, value);
+
+        n = it.next();
+        value = "1";
+        validateDataNode(n.getValue(), "Trading-supervisor", LMNG,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, false, value);
+
+        n = it.next();
+        value = "1";
+        validateDataNode(n.getValue(), "Employee-id", LMNG,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, false, value);
+
+        n = it.next();
+        value = "2";
+        validateDataNode(n.getValue(), "Employee-id", LMNG,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, false, value);
+
+        n = it.next();
+        value = "3";
+        validateDataNode(n.getValue(), "Employee-id", LMNG,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, false, value);
+
+        n = it.next();
+        value = "4";
+        validateDataNode(n.getValue(), "Employee-id", LMNG,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, false, value);
+    }
+
+    /**
+     * Returns the logistic module data tree.
+     */
+    public DataNode.Builder getLogisticModuleDataNode() {
+        dBlr = initializeDataNode(context);
+
+        value = "1";
+        dBlr = addDataNode(dBlr, "Customs-supervisor", LMNG, value, null);
+        id = getResourceId(dBlr);
+        nA = new String[]{"/", "Customs-supervisor"};
+        nsA = new String[]{null, LMNG};
+        valA = new String[]{"1"};
+        validateResourceId(nA, nsA, valA, id);
+        dBlr = exitDataNode(dBlr);
+
+        dBlr = addDataNode(dBlr, "Merchandiser-supervisor", LMNG, value, null);
+        info = (HelperContext) dBlr.appInfo();
+        id = getResourceId(dBlr);
+        nA = new String[]{"/", "Merchandiser-supervisor"};
+        nsA = new String[]{null, LMNG};
+        valA = new String[]{"1"};
+        validateResourceId(nA, nsA, valA, id);
+
+        dBlr = exitDataNode(dBlr);
+
+        value = null;
+        dBlr = addDataNode(dBlr, "Material-supervisor", LMNG, value, null);
+
+        value = "abc";
+        dBlr = addDataNode(dBlr, "name", LMNG, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "dep-1";
+        dBlr = addDataNode(dBlr, "departmentId", null, value, null);
+        info = (HelperContext) dBlr.appInfo();
+        id = getResourceId(dBlr);
+        nA = new String[]{"/", "Material-supervisor", "name", "departmentId"};
+        nsA = new String[]{null, LMNG, LMNG, LMNG};
+        valA = new String[]{"abc", "dep-1"};
+        validateResourceId(nA, nsA, valA, id);
+        dBlr = exitDataNode(dBlr);
+        dBlr = exitDataNode(dBlr);
+
+        id = getResourceId(dBlr);
+        nA = new String[]{"/"};
+        nsA = new String[]{null};
+        valA = new String[]{};
+        validateResourceId(nA, nsA, valA, id);
+
+        value = null;
+        dBlr = addDataNode(dBlr, "Material-supervisor", LMNG, value, null);
+
+        value = "abc1";
+        dBlr = addDataNode(dBlr, "name", LMNG, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "dep-1";
+        dBlr = addDataNode(dBlr, "departmentId", null, value, null);
+        dBlr = exitDataNode(dBlr);
+        dBlr = exitDataNode(dBlr);
+
+        value = null;
+        dBlr = addDataNode(dBlr, "Material-supervisor", LMNG, value, null);
+
+        value = "abc2";
+        dBlr = addDataNode(dBlr, "name", LMNG, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "dep-1";
+        dBlr = addDataNode(dBlr, "departmentId", null, value, null);
+        id = getResourceId(dBlr);
+        nA = new String[]{"/", "Material-supervisor", "name", "departmentId"};
+        nsA = new String[]{null, LMNG, LMNG, LMNG};
+        valA = new String[]{"abc2", "dep-1"};
+        validateResourceId(nA, nsA, valA, id);
+        dBlr = exitDataNode(dBlr);
+        dBlr = exitDataNode(dBlr);
+
+        value = null;
+        dBlr = addDataNode(dBlr, "Purchasing-supervisor", LMNG, value, null);
+
+        value = "xyz";
+        dBlr = addDataNode(dBlr, "purchasing-specialist", LMNG, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "helpdesk";
+        dBlr = addDataNode(dBlr, "support", null, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "helpdesk1";
+        dBlr = addDataNode(dBlr, "support", null, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "helpdesk2";
+        dBlr = addDataNode(dBlr, "support", null, value, null);
+        id = getResourceId(dBlr);
+        nA = new String[]{"/", "Purchasing-supervisor", "support"};
+        nsA = new String[]{null, LMNG, LMNG};
+        valA = new String[]{"helpdesk2"};
+        validateResourceId(nA, nsA, valA, id);
+        dBlr = exitDataNode(dBlr);
+        dBlr = exitDataNode(dBlr);
+
+        value = "1";
+        dBlr = addDataNode(dBlr, "Warehouse-supervisor", LMNG, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "2";
+        dBlr = addDataNode(dBlr, "Warehouse-supervisor", LMNG, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "3";
+        dBlr = addDataNode(dBlr, "Warehouse-supervisor", LMNG, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "4";
+        dBlr = addDataNode(dBlr, "Warehouse-supervisor", LMNG, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "1";
+        dBlr = addDataNode(dBlr, "Trading-supervisor", LMNG, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "1";
+        dBlr = addDataNode(dBlr, "Employee-id", LMNG, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "2";
+        dBlr = addDataNode(dBlr, "Employee-id", LMNG, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "3";
+        dBlr = addDataNode(dBlr, "Employee-id", LMNG, value, null);
+        dBlr = exitDataNode(dBlr);
+
+        value = "4";
+        dBlr = addDataNode(dBlr, "Employee-id", LMNG, value, null);
+        dBlr = exitDataNode(dBlr);
+        return dBlr;
+    }
+}
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeRidTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeRidTest.java
index f2a38ad..e578cdf 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeRidTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToDataNodeRidTest.java
@@ -22,11 +22,13 @@
 import org.onosproject.yang.runtime.helperutils.HelperContext;
 import org.onosproject.yang.runtime.impl.TestYangSerializerContext;
 
+import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_LEAF_VALUE_NODE;
 import static org.onosproject.yang.runtime.helperutils.SerializerHelper.addDataNode;
 import static org.onosproject.yang.runtime.helperutils.SerializerHelper.addToResourceId;
 import static org.onosproject.yang.runtime.helperutils.SerializerHelper.getResourceId;
 import static org.onosproject.yang.runtime.helperutils.SerializerHelper.initializeDataNode;
 import static org.onosproject.yang.runtime.helperutils.SerializerHelper.initializeResourceId;
+import static org.onosproject.yang.runtime.impl.TestUtils.validateDataNode;
 import static org.onosproject.yang.runtime.impl.TestUtils.validateResourceId;
 
 /**
@@ -75,15 +77,19 @@
         rIdBlr = addToResourceId(rIdBlr, "l1", LNS, value);
         rIdBlr = addToResourceId(rIdBlr, "c1", LNS, value);
         dBlr = initializeDataNode(rIdBlr);
-        value = "0";
-        dBlr = addDataNode(dBlr, "l1", null, value, null);
+        value = null;
+        dBlr = addDataNode(dBlr, "leaf_c1", null, value, null);
         info = (HelperContext) dBlr.appInfo();
         id = getResourceId(dBlr);
 
         //Tree validation
-        nA = new String[]{"/", "l1", "c1", "l1", ""};
-        nsA = new String[]{null, LNS, LNS, LNS, ""};
-        valA = new String[]{"0", ""};
+        nA = new String[]{"/", "l1", "c1", "leaf_c1"};
+        nsA = new String[]{null, LNS, LNS, LNS};
+        valA = new String[]{null};
         validateResourceId(nA, nsA, valA, id);
+
+        DataNode node = dBlr.build();
+        validateDataNode(node, "leaf_c1", LNS, SINGLE_INSTANCE_LEAF_VALUE_NODE,
+                         false, null);
     }
 }
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToResourceIdTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToResourceIdTest.java
index 271a649..bb13fd2 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToResourceIdTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/AddToResourceIdTest.java
@@ -66,7 +66,7 @@
     String[] valA;
 
     /**
-     * Test add to data node builder.
+     * Test add to resource id with all list key.
      */
     @Test
     public void addToDataListTest() {
@@ -80,9 +80,27 @@
         ResourceId id = rIdBlr.build();
 
         //Tree validation
-        nA = new String[]{"/", "l1", "k1", "k2", "k3", ""};
-        nsA = new String[]{null, LNS, LNS, LNS, LNS, ""};
-        valA = new String[]{"1", "2", "3", ""};
+        nA = new String[]{"/", "l1", "k1", "k2", "k3"};
+        nsA = new String[]{null, LNS, LNS, LNS, LNS};
+        valA = new String[]{"1", "2", "3"};
+        validateResourceId(nA, nsA, valA, id);
+    }
+
+    /**
+     * Test add to resource id without any key.
+     */
+    @Test
+    public void addToDataList1Test() {
+
+        ResourceId.Builder rIdBlr = initializeResourceId(context);
+        List<String> valueSet = null;
+        rIdBlr = addToResourceId(rIdBlr, "l1", LNS, valueSet);
+        ResourceId id = rIdBlr.build();
+
+        //Tree validation
+        nA = new String[]{"/", "l1"};
+        nsA = new String[]{null, LNS};
+        valA = new String[]{};
         validateResourceId(nA, nsA, valA, id);
     }
 }
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/DataNodeInitializationTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/DataNodeInitializationTest.java
index 4c95a74..b5edb5f 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/DataNodeInitializationTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/DataNodeInitializationTest.java
@@ -23,9 +23,13 @@
 import org.onosproject.yang.runtime.helperutils.HelperContext;
 import org.onosproject.yang.runtime.impl.TestYangSerializerContext;
 
+import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_NODE;
+import static org.onosproject.yang.runtime.helperutils.SerializerHelper.getResourceId;
 import static org.onosproject.yang.runtime.helperutils.SerializerHelper.initializeDataNode;
 import static org.onosproject.yang.runtime.helperutils.SerializerHelper.initializeResourceId;
 import static org.onosproject.yang.runtime.impl.TestUtils.checkRootLevelContext;
+import static org.onosproject.yang.runtime.impl.TestUtils.validateDataNode;
+import static org.onosproject.yang.runtime.impl.TestUtils.validateResourceId;
 
 /**
  * Tests the initialize data node methods in serializer helper.
@@ -49,6 +53,19 @@
      */
     DataNode.Builder dBlr;
 
+    /*
+     * Reference for resource id.
+     */
+    ResourceId id;
+
+
+    /*
+     * Reference for string array to used for resource id testing.
+     */
+    String[] nA;
+    String[] nsA;
+    String[] valA;
+
     /**
      * Checks initialize data node using context.
      */
@@ -59,6 +76,13 @@
         info = (HelperContext) dBlr.appInfo();
         checkRootLevelContext((SchemaContext) info.getResourceIdBuilder()
                 .appInfo());
+        id = getResourceId(dBlr);
+        nA = new String[]{"/"};
+        nsA = new String[]{null};
+        valA = new String[]{};
+        validateResourceId(nA, nsA, valA, id);
+        validateDataNode(dBlr.build(), "/", null,
+                         SINGLE_INSTANCE_NODE, true, null);
     }
 
     /**
@@ -72,5 +96,12 @@
         info = (HelperContext) dBlr.appInfo();
         checkRootLevelContext((SchemaContext) info.getParentResourceIdBldr()
                 .appInfo());
+        id = getResourceId(dBlr);
+        nA = new String[]{"/"};
+        nsA = new String[]{null};
+        valA = new String[]{};
+        validateResourceId(nA, nsA, valA, id);
+        validateDataNode(dBlr.build(), "/", null,
+                         SINGLE_INSTANCE_NODE, true, null);
     }
 }
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/ResourceIdInitializationTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/ResourceIdInitializationTest.java
index 2ef2864..66e8f31 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/ResourceIdInitializationTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/ResourceIdInitializationTest.java
@@ -23,9 +23,9 @@
 
 import static org.onosproject.yang.runtime.helperutils.SerializerHelper.addToResourceId;
 import static org.onosproject.yang.runtime.helperutils.SerializerHelper.initializeResourceId;
-import static org.onosproject.yang.runtime.impl.schemacontext.SchemaContextTest.IETFNS;
 import static org.onosproject.yang.runtime.impl.TestUtils.checkRootLevelContext;
 import static org.onosproject.yang.runtime.impl.TestUtils.validateResourceId;
+import static org.onosproject.yang.runtime.impl.schemacontext.SchemaContextTest.IETFNS;
 
 /**
  * Tests the initialize resource id methods in serializer helper.
@@ -71,9 +71,9 @@
         rIdBlr = addToResourceId(rIdBlr, "network-id", null, value);
         ResourceId id = rIdBlr.build();
 
-        nA = new String[]{"/", "networks", "network", "network-id", ""};
-        nsA = new String[]{null, IETFNS, IETFNS, IETFNS, ""};
-        valA = new String[]{"network1", ""};
+        nA = new String[]{"/", "networks", "network", "network-id"};
+        nsA = new String[]{null, IETFNS, IETFNS, IETFNS};
+        valA = new String[]{"network1"};
         validateResourceId(nA, nsA, valA, id);
     }
 }
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/ResourceIdNegative3Test.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/ResourceIdNegative3Test.java
index a7e39ca..175364a 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/ResourceIdNegative3Test.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/serializerhelper/ResourceIdNegative3Test.java
@@ -52,7 +52,7 @@
         valueSet.add("2");
         boolean isExpOccurred = false;
         try {
-            rIdBlr = addToResourceId(rIdBlr, "l1", LNS, valueSet);
+            addToResourceId(rIdBlr, "l1", LNS, valueSet);
         } catch (IllegalArgumentException e) {
             isExpOccurred = true;
             assertEquals(e.getMessage(), E_TOO_FEW);
diff --git a/runtime/src/test/resources/schemaProviderTestYangFiles/Logistics-manager.yang b/runtime/src/test/resources/schemaProviderTestYangFiles/Logistics-manager.yang
new file mode 100644
index 0000000..87c5db6
--- /dev/null
+++ b/runtime/src/test/resources/schemaProviderTestYangFiles/Logistics-manager.yang
@@ -0,0 +1,66 @@
+module Logistics-manager {
+
+    yang-version 1;
+
+    namespace "yrt.Logistics-manager";
+
+    prefix "root";
+
+    organization "ON-LAB";
+
+    description "This module defines for organisation.";
+
+    revision "2016-05-24" {
+        description "Initial revision.";
+    }
+
+    leaf Customs-supervisor {
+        type string;
+        description "name of the customs-supervisor.";
+    }
+
+    leaf Merchandiser-supervisor {
+        type string;
+        description "name of merchandiser-supervisor";
+    }
+
+    list Material-supervisor {
+        key "name";
+        leaf name {
+            type string;
+            description "name of logistics-supervisor";
+        }
+
+        leaf departmentId {
+            type string;
+            description "name of department";
+        }
+    }
+
+    container Purchasing-supervisor {
+        leaf purchasing-specialist {
+            type string;
+            description "name of the purchasing-specialist person";
+        }
+
+        leaf-list support {
+            type string;
+            description "name of the support person";
+        }
+    }
+
+    leaf-list Warehouse-supervisor {
+        type string;
+        description "name of the warehouse-supervisor's";
+    }
+
+    leaf Trading-supervisor {
+        type string;
+        description "name of the trading-supervisor";
+    }
+
+    leaf-list Employee-id {
+        type string;
+        description "list of the employee id";
+    }
+}
\ No newline at end of file
diff --git a/runtime/src/test/resources/schemaProviderTestYangFiles/list.yang b/runtime/src/test/resources/schemaProviderTestYangFiles/list.yang
index 122ce11..2ff07dc 100644
--- a/runtime/src/test/resources/schemaProviderTestYangFiles/list.yang
+++ b/runtime/src/test/resources/schemaProviderTestYangFiles/list.yang
@@ -29,7 +29,7 @@
             }
 
             container c1 {
-                leaf l1 {
+                leaf leaf_c1 {
                   type string;
                 }
             }