YMS migration to onos-yangtool 1.10

Change-Id: I22ddf23f813840e0afec1e7713a86891f2a52f28
diff --git a/apps/yms/api/pom.xml b/apps/yms/api/pom.xml
index b6d7bd1..faac55a 100644
--- a/apps/yms/api/pom.xml
+++ b/apps/yms/api/pom.xml
@@ -32,4 +32,21 @@
 
     <description>YANG Management System API</description>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <version>3.2.0</version>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Private-Package>
+                            org.onosproject.yangutils.datamodel.*,
+                        </Private-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtBuilder.java b/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtBuilder.java
index bbfe6c3..2161366 100644
--- a/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtBuilder.java
+++ b/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtBuilder.java
@@ -68,8 +68,11 @@
      * @param name      name of child to be added
      * @param namespace namespace of child to be added, if it's null, parent's
      *                  namespace will be applied to child
+     * @throws IllegalArgumentException when method has been passed an illegal
+     *                                  or inappropriate argument.
      */
-    void addChild(String name, String namespace);
+    void addChild(String name, String namespace)
+            throws IllegalArgumentException;
 
     /**
      * Adds a last child to YANG data tree, this method is to be used by
@@ -92,8 +95,11 @@
      * @param namespace namespace of child to be added, if it's null, parent's
      *                  namespace will be applied to child
      * @param ydtType   type of YDT node to be added
+     * @throws IllegalArgumentException when method has been passed an illegal
+     *                                  or inappropriate argument.
      */
-    void addChild(String name, String namespace, YdtType ydtType);
+    void addChild(String name, String namespace, YdtType ydtType)
+            throws IllegalArgumentException;
 
     /**
      * Adds a last child to YANG data tree; this method is to be used by
@@ -119,9 +125,11 @@
      * @param namespace namespace of child to be added, if it's null, parent's
      *                  namespace will be applied to child
      * @param opType    type of requested operation over a node
+     * @throws IllegalArgumentException when method has been passed an illegal
+     *                                  or inappropriate argument.
      */
-    void addChild(String name, String namespace,
-                  YdtContextOperationType opType);
+    void addChild(String name, String namespace, YdtContextOperationType opType)
+            throws IllegalArgumentException;
 
     /**
      * Adds a last child to YANG data tree; this method is to be used by
@@ -148,10 +156,12 @@
      *                  namespace will be applied to child
      * @param ydtType   type of YDT node to be added
      * @param opType    type of requested operation over a node
+     * @throws IllegalArgumentException when method has been passed an illegal
+     *                                  or inappropriate argument.
      */
     void addChild(String name, String namespace, YdtType ydtType,
-                  YdtContextOperationType opType);
-
+                  YdtContextOperationType opType)
+            throws IllegalArgumentException;
 
     /**
      * Adds a last leaf with value to YANG data tree. Protocols unaware of
@@ -165,8 +175,11 @@
      * @param namespace namespace of child to be added, if it's null, parent's
      *                  namespace will be applied to child
      * @param value     value of the child
+     * @throws IllegalArgumentException when method has been passed an illegal
+     *                                  or inappropriate argument.
      */
-    void addLeaf(String name, String namespace, String value);
+    void addLeaf(String name, String namespace, String value)
+            throws IllegalArgumentException;
 
     /**
      * Adds a last leaf with list of values to YANG data tree. This method is
@@ -179,8 +192,11 @@
      * @param namespace namespace of child to be added, if it's null, parent's
      *                  namespace will be applied to child
      * @param valueSet  list of value of the child
+     * @throws IllegalArgumentException when method has been passed an illegal
+     *                                  or inappropriate argument.
      */
-    void addLeaf(String name, String namespace, Set<String> valueSet);
+    void addLeaf(String name, String namespace, Set<String> valueSet)
+            throws IllegalArgumentException;
 
     /**
      * Adds an instance of a child list node, or adds a child leaf list with
@@ -201,17 +217,23 @@
      * @param valueList values of the keys in URI in the same order
      *                  as defined in YANG file
      * @param opType    type of requested operation over a node
+     * @throws IllegalArgumentException when method has been passed an illegal
+     *                                  or inappropriate argument.
      */
     void addMultiInstanceChild(String name, String namespace,
                                List<String> valueList,
-                               YdtContextOperationType opType);
+                               YdtContextOperationType opType)
+            throws IllegalArgumentException;
 
     /**
      * Traverses up in YANG data tree to the parent node, it is to be used when
      * protocol is using context type "current" and wanted to traverse up the
      * tree.
+     *
+     * @throws IllegalStateException when application is not in an appropriate
+     *                               state for the requested operation.
      */
-    void traverseToParent();
+    void traverseToParent() throws IllegalStateException;
 
     /**
      * Returns the current context information available in YDT node.
diff --git a/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtContext.java b/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtContext.java
index 8d8152b..d5a6faf 100644
--- a/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtContext.java
+++ b/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtContext.java
@@ -41,6 +41,13 @@
     String getNamespace();
 
     /**
+     * Returns module name as namespace.
+     *
+     * @return module name
+     */
+    String getModuleNameAsNameSpace();
+
+    /**
      * Returns the YDT node extended context information corresponding to YDT
      * node.
      *
diff --git a/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtType.java b/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtType.java
index 01f6509..19a2c07 100644
--- a/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtType.java
+++ b/apps/yms/api/src/main/java/org/onosproject/yms/ydt/YdtType.java
@@ -47,5 +47,10 @@
     /**
      * Multi instance leaf node.
      */
-    MULTI_INSTANCE_LEAF_VALUE_NODE
+    MULTI_INSTANCE_LEAF_VALUE_NODE,
+
+    /**
+     * Logical root node.
+     */
+    LOGICAL_ROOT_NODE
 }
diff --git a/apps/yms/api/src/main/java/org/onosproject/yms/ysr/YangModuleInformation.java b/apps/yms/api/src/main/java/org/onosproject/yms/ysr/YangModuleInformation.java
index e9f79b3..ffabb44 100644
--- a/apps/yms/api/src/main/java/org/onosproject/yms/ysr/YangModuleInformation.java
+++ b/apps/yms/api/src/main/java/org/onosproject/yms/ysr/YangModuleInformation.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.yms.ysr;
 
+import org.onosproject.yangutils.datamodel.YangNamespace;
+
 import java.util.List;
 
 /**
@@ -56,7 +58,7 @@
      *
      * @return YANG modules namespace
      */
-    String namespace();
+    YangNamespace namespace();
 
     /**
      * Reference RFC 7895
diff --git a/apps/yms/app/pom.xml b/apps/yms/app/pom.xml
index a34feb1..ef036f6 100644
--- a/apps/yms/app/pom.xml
+++ b/apps/yms/app/pom.xml
@@ -56,36 +56,9 @@
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-maven-plugin</artifactId>
-            <version>1.8</version>
+            <artifactId>onos-yang-utils-generator</artifactId>
+            <version>1.10</version>
         </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-datamodel</artifactId>
-            <version>1.8</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onlab-junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onlab-osgi</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <!-- https://mvnrepository.com/artifact/org.springframework.osgi/spring-osgi-mock -->
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-mock</artifactId>
-            <version>1.2.1</version>
-        </dependency>
-
     </dependencies>
 
     <build>
@@ -106,21 +79,6 @@
                     </instructions>
                 </configuration>
             </plugin>
-            <plugin>
-                <groupId>org.onosproject</groupId>
-                <artifactId>onos-yang-maven-plugin</artifactId>
-                <version>1.8</version>
-                <configuration>
-                    <yangFilesDir>src/test/resources/</yangFilesDir>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>yang2java</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
         </plugins>
     </build>
 </project>
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/DefaultYangCodecHandler.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/DefaultYangCodecHandler.java
index 45eb37f..8847c41 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/DefaultYangCodecHandler.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/DefaultYangCodecHandler.java
@@ -30,14 +30,13 @@
 import org.onosproject.yms.ydt.YdtBuilder;
 import org.onosproject.yms.ydt.YdtContext;
 import org.onosproject.yms.ydt.YmsOperationType;
+import org.onosproject.yms.ysr.YangModuleLibrary;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import static org.onosproject.yms.app.ych.defaultcodecs.utils.DefaultCodecUtils.isNonEmpty;
-
 
 /**
  * Represents implementation of YANG SBI broker interfaces.
@@ -54,6 +53,7 @@
      * Schema registry for driver.
      */
     private final YangSchemaRegistry schemaRegistry;
+    private YangModuleLibrary library;
 
     /**
      * Default codecs.
@@ -90,8 +90,9 @@
             YangProtocolEncodingFormat dataFormat) {
         YangDataTreeCodec codec = defaultCodecs.get(dataFormat);
 
+        int size = overrideCodecs.size();
         // Check over ridden codec handler is exist or not.
-        if (overrideCodecs != null) {
+        if (size != 0) {
             YangDataTreeCodec overrideCodec = overrideCodecs.get(dataFormat);
             if (overrideCodec != null) {
                 codec = overrideCodec;
@@ -103,6 +104,7 @@
     @Override
     public void addDeviceSchema(Class<?> yangModule) {
         schemaRegistry.registerApplication(null, yangModule);
+        schemaRegistry.processModuleLibrary(yangModule.getName(), library);
     }
 
     @Override
@@ -166,7 +168,6 @@
                                            opType,
                                            schemaRegistry);
 
-
         // Get the composite response from codec handler.
         return codec.encodeYdtToCompositeProtocolFormat(extBuilder);
     }
@@ -176,15 +177,20 @@
                                YangProtocolEncodingFormat dataFormat,
                                YmsOperationType opType) {
 
+        YdtBuilder ydtBuilder;
         YangDataTreeCodec codec = getAppropriateCodec(dataFormat);
         if (codec == null) {
             throw new YchException(E_DATA_TREE_CODEC);
         }
 
-        // Get the YANG data tree
-        YdtBuilder ydtBuilder = codec.decodeProtocolDataToYdt(inputString,
-                                                              schemaRegistry,
-                                                              opType);
+        try {
+            // Get the YANG data tree
+            ydtBuilder = codec.decodeProtocolDataToYdt(inputString,
+                                                       schemaRegistry,
+                                                       opType);
+        } catch (Exception e) {
+            throw new YchException(e.getLocalizedMessage());
+        }
 
         if (ydtBuilder != null) {
             return getObjectList(ydtBuilder.getRootNode());
@@ -210,10 +216,7 @@
 
         // Get the module object by using YANG data tree
         if (ydtBuilder != null) {
-            List<Object> objectList = getObjectList(ydtBuilder.getRootNode());
-            if (isNonEmpty(objectList)) {
-                return objectList.get(0);
-            }
+            return getObjectList(ydtBuilder.getRootNode());
         }
 
         return null;
@@ -260,4 +263,22 @@
 
         return objectList;
     }
+
+    /**
+     * Returns module library for YSR.
+     *
+     * @return module library for YSR
+     */
+    public YangModuleLibrary getLibrary() {
+        return library;
+    }
+
+    /**
+     * Sets module library for YSR.
+     *
+     * @param library module library for YSR
+     */
+    public void setLibrary(YangModuleLibrary library) {
+        this.library = library;
+    }
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/netconf/NetconfCodec.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/netconf/NetconfCodec.java
index 8b50d33..5e5d731 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/netconf/NetconfCodec.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/netconf/NetconfCodec.java
@@ -82,7 +82,6 @@
                 //TODO
             }
         }
-
     }
 
     /**
@@ -100,7 +99,9 @@
         try {
             validateOpType(elementName, opType);
             // If config tag name is found then set the root element node.
-            if (ALLOWABLE_NAMES.contains(elementName)) {
+            if (DATA.equals(elementName)
+                    || CONFIG.equals(elementName)
+                    || FILTER.equals(elementName)) {
                 return rootElement;
             }
 
@@ -113,7 +114,6 @@
                     retElement = getDataRootElement(childElement, opType);
                 }
             }
-
         } catch (Exception e) {
             // TODO
         }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/utils/DefaultCodecUtils.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/utils/DefaultCodecUtils.java
index 1d9e339..873d7bb 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/utils/DefaultCodecUtils.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/utils/DefaultCodecUtils.java
@@ -78,16 +78,6 @@
     }
 
     /**
-     * Returns true, if the list is not null and non-empty; false otherwise.
-     *
-     * @param object list object
-     * @return true, if the list is not null and non-empty; false otherwise
-     */
-    public static boolean isNonEmpty(List object) {
-        return object != null && !object.isEmpty();
-    }
-
-    /**
      * Converts a list of path segments to a YDT builder tree.
      *
      * @param paths     the list of path segments split from URI
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecListener.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecListener.java
index 6b6ba38..1c6536a 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecListener.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecListener.java
@@ -69,6 +69,10 @@
             nameSpace = element.getNamespace().getURI();
         }
 
+        if (nodeType == OBJECT_NODE && element.content() == null || element
+                .content().isEmpty()) {
+            nodeType = TEXT_NODE;
+        }
         if (nodeType == OBJECT_NODE) {
             if (ydtExtBuilder != null) {
                 ydtExtBuilder.addChild(element.getName(), nameSpace, opType);
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecSingleInstanceLeafHandler.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecSingleInstanceLeafHandler.java
index f44f9b2..e7b786e 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecSingleInstanceLeafHandler.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecSingleInstanceLeafHandler.java
@@ -29,6 +29,9 @@
     @Override
     public void setXmlValue(YdtContext ydtContext,
                             Stack<Element> elementStack) {
-        elementStack.peek().setText(ydtContext.getValue());
+
+        if (ydtContext.getValue() != null) {
+            elementStack.peek().setText(ydtContext.getValue());
+        }
     }
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AppData.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AppData.java
index 8fee570..79d9581 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AppData.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AppData.java
@@ -17,9 +17,6 @@
 package org.onosproject.yms.app.ydt;
 
 import org.onosproject.yangutils.datamodel.YangSchemaNode;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.util.List;
 
 /**
  * Maintains application data, which will be used by Application broker to
@@ -28,48 +25,6 @@
 public interface AppData {
 
     /**
-     * Returns the list of nodes with operation type delete.
-     *
-     * @return list of nodes with operation type delete
-     */
-    List<YdtContext> getDeleteNodes();
-
-    /**
-     * Adds the ydt node with operation type delete in module delete node list.
-     *
-     * @param node ydt node with operation type delete/remove
-     */
-    void addDeleteNodes(YdtContext node);
-
-    /**
-     * Returns application's root ydtContext.
-     *
-     * @return YdtContext of application root node
-     */
-    YdtContext getModuleContext();
-
-    /**
-     * Sets the application's ydtContext.
-     *
-     * @param moduleNode application's ydtContext
-     */
-    void setModuleContext(YdtContext moduleNode);
-
-    /**
-     * Returns the YangSchemaNode of augmenting application.
-     *
-     * @return YangSchemaNode of augmenting application
-     */
-    YangSchemaNode getAugmentingSchemaNode();
-
-    /**
-     * Sets the YangSchemaNode of augmenting application root node.
-     *
-     * @param schemaNode YangSchemaNode of augmenting application module
-     */
-    void setAugmentingSchemaNode(YangSchemaNode schemaNode);
-
-    /**
      * Returns the schema node current context.
      *
      * @return schema node
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AppNodeFactory.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AppNodeFactory.java
index 621eda6..98187aa 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AppNodeFactory.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AppNodeFactory.java
@@ -16,9 +16,6 @@
 
 package org.onosproject.yms.app.ydt;
 
-import static org.onosproject.yms.app.ydt.DefaultYdtAppContext.getAugmentAppContext;
-import static org.onosproject.yms.app.ydt.DefaultYdtAppContext.getModuleAppContext;
-
 /**
  * Represents an application tree node factory to create different types of
  * application tree node.
@@ -33,10 +30,11 @@
      * Returns the appropriate application context on the basis of provided
      * isAugmented flag for given request.
      *
-     * @param isAugmented true for augmented context; false for module context
+     * @param flag true for augmented context; false for module context
      * @return appContext application context
      */
-    public static DefaultYdtAppContext getAppContext(boolean isAugmented) {
-        return isAugmented ? getAugmentAppContext() : getModuleAppContext();
+    public static DefaultYdtAppContext getAppContext(boolean flag) {
+        return flag ? new DefaultYdtAppContext(new AugmentedSchemaData()) :
+                new DefaultYdtAppContext(new ModuleSchemaData());
     }
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AugmentAppData.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AugmentAppData.java
new file mode 100644
index 0000000..1a43cb7
--- /dev/null
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AugmentAppData.java
@@ -0,0 +1,39 @@
+/*
+ * 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.onosproject.yangutils.datamodel.YangSchemaNode;
+
+/**
+ * Represents an augmented node in application tree.
+ */
+interface AugmentAppData extends AppData {
+
+    /**
+     * Returns the YangSchemaNode of augmenting application.
+     *
+     * @return YangSchemaNode of augmenting application
+     */
+    YangSchemaNode getAugmentingSchemaNode();
+
+    /**
+     * Sets the YangSchemaNode of augmenting application root node.
+     *
+     * @param schemaNode YangSchemaNode of augmenting application module
+     */
+    void setAugmentingSchemaNode(YangSchemaNode schemaNode);
+}
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AugmentedSchemaData.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AugmentedSchemaData.java
index 6a45cad..dd4eabb 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AugmentedSchemaData.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/AugmentedSchemaData.java
@@ -18,23 +18,12 @@
 
 import org.onosproject.yangutils.datamodel.YangNode;
 import org.onosproject.yangutils.datamodel.YangSchemaNode;
-import org.onosproject.yms.app.ydt.exceptions.YdtException;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.util.List;
 
 /**
  * Manages the application information required for schema nodes defined in
  * the module (sub-module).
  */
-public class AugmentedSchemaData implements AppData {
-
-    private static final String E_NOT_ROOTAPP =
-            "Augmented application depends on root app.";
-    private static final String E_NOT_EXIST =
-            "Augmented nodes are not part of the schema.";
-    private static final String E_NOT_MAINTAINED =
-            "Module context is not maintained.";
+public class AugmentedSchemaData implements AugmentAppData {
 
     /*
      * Reference for schema node of augmenting application.
@@ -42,25 +31,6 @@
     private YangSchemaNode augModSchema;
 
     @Override
-    public List<YdtContext> getDeleteNodes() {
-        throw new YdtException(E_NOT_ROOTAPP);
-    }
-
-    @Override
-    public void addDeleteNodes(YdtContext deletedNode) {
-    }
-
-    @Override
-    public YdtContext getModuleContext() {
-        throw new YdtException(E_NOT_EXIST);
-    }
-
-    @Override
-    public void setModuleContext(YdtContext moduleContext) {
-        throw new YdtException(E_NOT_MAINTAINED);
-    }
-
-    @Override
     public YangSchemaNode getAugmentingSchemaNode() {
         return augModSchema;
     }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/DefaultYdtAppContext.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/DefaultYdtAppContext.java
index f75fc9c..03502d4 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/DefaultYdtAppContext.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/DefaultYdtAppContext.java
@@ -16,26 +16,19 @@
 
 package org.onosproject.yms.app.ydt;
 
-import org.onosproject.yangutils.datamodel.YangAugment;
 import org.onosproject.yangutils.datamodel.YangSchemaNode;
-import org.onosproject.yangutils.datamodel.YangSchemaNodeContextInfo;
-import org.onosproject.yangutils.datamodel.YangSchemaNodeIdentifier;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yms.app.ydt.exceptions.YdtException;
 import org.onosproject.yms.ydt.YdtContext;
 import org.onosproject.yms.ydt.YdtContextOperationType;
 
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 import static org.onosproject.yms.app.ydt.YdtAppNodeOperationType.BOTH;
-import static org.onosproject.yms.app.ydt.YdtNodeFactory.getAppOpTypeFromYdtOpType;
+import static org.onosproject.yms.app.ydt.YdtUtils.getAppOpTypeFromYdtOpType;
 
 /**
- * Represents YANG request work bench which contains all parameters for
- * request handling and methods to build and obtain YANG application data tree
- * which is data (sub)instance representation, abstract of protocol.
+ * Abstraction of an entity which represents YDT application context
+ * information. This context information will be used by protocol to obtain
+ * the information associated with YDT application tree node.
  */
 public final class DefaultYdtAppContext<T extends AppData>
         implements YdtAppContext {
@@ -68,35 +61,19 @@
     /*
      * YDT application tree extended information.
      */
-    private T appData;
+    private final T appData;
 
     /*
      * Reference for operation type for application root node.
      */
     private YdtAppNodeOperationType operationType;
 
-    /*
-     * Reference application node set.
-     */
-    private Set<YangSchemaNode> appSet;
-
     /**
      * Creates an instance of YANG application tree which is used by all node
      * needs delete list.
      */
-    private DefaultYdtAppContext() {
-        appSet = new HashSet<>();
-    }
-
-    /**
-     * Adds schema node of new requested augmented node in current context of
-     * application tree.
-     *
-     * @param schemaNode schema node of requested node
-     * @return addition result(true/false)
-     */
-    public boolean addSchemaToAppSet(YangSchemaNode schemaNode) {
-        return appSet.add(schemaNode);
+    DefaultYdtAppContext(T data) {
+        appData = data;
     }
 
     @Override
@@ -119,9 +96,9 @@
     @Override
     public void setAppData(YdtNode moduleNode, YangSchemaNode augmentNode) {
         if (augmentNode != null) {
-            appData.setAugmentingSchemaNode(augmentNode);
+            ((AugmentAppData) appData).setAugmentingSchemaNode(augmentNode);
         } else {
-            appData.setModuleContext(moduleNode);
+            ((ModuleAppData) appData).setModuleContext(moduleNode);
         }
     }
 
@@ -145,8 +122,12 @@
         return child;
     }
 
-    @Override
-    public void setChild(YdtAppContext child) {
+    /**
+     * Sets the context of first child.
+     *
+     * @param child node
+     */
+    private void setChild(YdtAppContext child) {
         this.child = child;
     }
 
@@ -156,8 +137,8 @@
     }
 
     @Override
-    public void setNextSibling(YdtAppContext nextSibling) {
-        this.nextSibling = nextSibling;
+    public void setNextSibling(YdtAppContext context) {
+        this.nextSibling = context;
     }
 
     @Override
@@ -166,8 +147,8 @@
     }
 
     @Override
-    public void setPreviousSibling(YdtAppContext previousSibling) {
-        this.previousSibling = previousSibling;
+    public void setPreviousSibling(YdtAppContext context) {
+        this.previousSibling = context;
     }
 
     @Override
@@ -182,61 +163,31 @@
 
     @Override
     public List<YdtContext> getDeleteNodes() {
-        return appData.getDeleteNodes();
+        return ((ModuleAppData) appData).getDeleteNodes();
     }
 
-
     @Override
     public void addDeleteNode(YdtNode node) {
         DefaultYdtAppContext<?> curNode = this;
         while (curNode.getParent().getParent() != null) {
             curNode = (DefaultYdtAppContext<?>) curNode.getParent();
         }
-
-        curNode.appData.addDeleteNodes(node);
+        ((ModuleAppData) curNode.appData).addDeleteNodes(node);
     }
 
     @Override
     public YdtContext getModuleContext() {
-        return appData.getModuleContext();
-    }
-
-    @Override
-    public void setModuleContext(YdtContext moduleNode) {
-        appData.setModuleContext(moduleNode);
+        return ((ModuleAppData) appData).getModuleContext();
     }
 
     @Override
     public YangSchemaNode getAugmentingSchemaNode() {
-        return appData.getAugmentingSchemaNode();
+        return ((AugmentAppData) appData).getAugmentingSchemaNode();
     }
 
     @Override
     public void setAugmentingSchemaNode(YangSchemaNode schemaNode) {
-        appData.setAugmentingSchemaNode(schemaNode);
-    }
-
-
-    @Override
-    public YangSchemaNode getAugmentingSchemaNode(
-            YangSchemaNodeIdentifier id,
-            YangSchemaNodeContextInfo contextInfo) {
-        YangSchemaNode lastAugMod = null;
-        YangSchemaNode switchedNode =
-                contextInfo.getContextSwitchedNode();
-
-        while (switchedNode != null) {
-            if (switchedNode instanceof YangAugment) {
-                lastAugMod = switchedNode;
-            }
-            try {
-                switchedNode = switchedNode.getChildSchema(id)
-                        .getContextSwitchedNode();
-            } catch (DataModelException e) {
-                throw new YdtException(e.getMessage());
-            }
-        }
-        return lastAugMod;
+        ((AugmentAppData) appData).setAugmentingSchemaNode(schemaNode);
     }
 
     @Override
@@ -244,9 +195,13 @@
         return lastChild;
     }
 
-    @Override
-    public void setLastChild(YdtAppContext lastChild) {
-        this.lastChild = lastChild;
+    /**
+     * Sets the context of last child.
+     *
+     * @param child node
+     */
+    private void setLastChild(YdtAppContext child) {
+        lastChild = child;
     }
 
     @Override
@@ -275,28 +230,4 @@
     public YangSchemaNode getYangSchemaNode() {
         return appData.getSchemaNode();
     }
-
-    /**
-     * Creates an instance of application tree context with module schema data.
-     *
-     * @return application tree context
-     */
-    public static DefaultYdtAppContext getModuleAppContext() {
-        DefaultYdtAppContext context =
-                new DefaultYdtAppContext<ModuleSchemaData>();
-        context.appData = new ModuleSchemaData();
-        return context;
-    }
-
-    /**
-     * Creates an instance of application tree context with augment schema data.
-     *
-     * @return application tree context
-     */
-    public static DefaultYdtAppContext getAugmentAppContext() {
-        DefaultYdtAppContext context =
-                new DefaultYdtAppContext<AugmentedSchemaData>();
-        context.appData = new AugmentedSchemaData();
-        return context;
-    }
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/ModuleAppData.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/ModuleAppData.java
new file mode 100644
index 0000000..5bafe24
--- /dev/null
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/ModuleAppData.java
@@ -0,0 +1,54 @@
+/*
+ * 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.onosproject.yms.ydt.YdtContext;
+
+import java.util.List;
+
+/**
+ * Represents a module/sub-module node in application tree.
+ */
+interface ModuleAppData extends AppData {
+
+    /**
+     * Returns the list of nodes with operation type delete.
+     *
+     * @return list of nodes with operation type delete
+     */
+    List<YdtContext> getDeleteNodes();
+
+    /**
+     * Adds the ydt node with operation type delete in module delete node list.
+     *
+     * @param node ydt node with operation type delete/remove
+     */
+    void addDeleteNodes(YdtContext node);
+
+    /**
+     * Returns application's root ydtContext.
+     *
+     * @return YdtContext of application root node
+     */
+    YdtContext getModuleContext();
+
+    /**
+     * Sets the application's ydtContext.
+     *
+     * @param moduleNode application's ydtContext
+     */
+    void setModuleContext(YdtExtendedContext moduleNode);
+}
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/ModuleSchemaData.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/ModuleSchemaData.java
index fd4f1b6..0823190 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/ModuleSchemaData.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/ModuleSchemaData.java
@@ -17,7 +17,6 @@
 package org.onosproject.yms.app.ydt;
 
 import org.onosproject.yangutils.datamodel.YangSchemaNode;
-import org.onosproject.yms.app.ydt.exceptions.YdtException;
 import org.onosproject.yms.ydt.YdtContext;
 
 import java.util.ArrayList;
@@ -27,20 +26,17 @@
  * Manages the application information required for schema nodes defined in
  * the module (sub-module).
  */
-public class ModuleSchemaData implements AppData {
-
-    private static final String E_NOT_MAINTAINED =
-            "Augmented info is not maintained.";
+public class ModuleSchemaData implements ModuleAppData {
 
     /*
      * Reference for application's root ydtContext.
      */
-    private YdtContext moduleContext;
+    private YdtExtendedContext moduleContext;
 
     /*
      * Reference for list of nodes with operation type delete.
      */
-    private List<YdtContext> deleteNodes = new ArrayList<>();
+    private final List<YdtContext> deleteNodes = new ArrayList<>();
 
     @Override
     public List<YdtContext> getDeleteNodes() {
@@ -59,27 +55,17 @@
     }
 
     @Override
-    public void setModuleContext(YdtContext moduleContext) {
+    public void setModuleContext(YdtExtendedContext moduleContext) {
         this.moduleContext = moduleContext;
     }
 
     @Override
-    public YangSchemaNode getAugmentingSchemaNode() {
-        throw new YdtException(E_NOT_MAINTAINED);
-    }
-
-    @Override
-    public void setAugmentingSchemaNode(YangSchemaNode schemaNode) {
-        throw new YdtException(E_NOT_MAINTAINED);
-    }
-
-    @Override
     public YangSchemaNode getSchemaNode() {
-        return ((YdtExtendedContext) moduleContext).getYangSchemaNode();
+        return moduleContext.getYangSchemaNode();
     }
 
     @Override
     public YangSchemaNode getRootSchemaNode() {
-        return getSchemaNode();
+        return moduleContext.getYangSchemaNode();
     }
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/NameSpace.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/NameSpace.java
new file mode 100644
index 0000000..b446457
--- /dev/null
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/NameSpace.java
@@ -0,0 +1,47 @@
+/*
+ * 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.onosproject.yangutils.datamodel.YangNamespace;
+
+class NameSpace implements YangNamespace {
+
+    /*
+     * Reference for namespace.
+     */
+    private final String nameSpace;
+
+    /**
+     * Creates an instance of namespace which is used to initialize the
+     * nameSpace for requested YDT node.
+     *
+     * @param nameSpace namespace of the requested node
+     */
+    public NameSpace(String nameSpace) {
+        this.nameSpace = nameSpace;
+    }
+
+    @Override
+    public String getModuleNamespace() {
+        return nameSpace;
+    }
+
+    @Override
+    public String getModuleName() {
+        return nameSpace;
+    }
+}
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/RequestedCallType.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/RequestedCallType.java
index ace971b..4c1a16c 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/RequestedCallType.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/RequestedCallType.java
@@ -27,9 +27,9 @@
     LEAF,
 
     /**
-     * Requested Node is of type single/multi instance node.
+     * Requested Node is of type single/multi instance non leaf node.
      */
-    OTHER,
+    NON_LEAF,
 
     /**
      * Requested Node is of type multi instance leaf/node.
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YangRequestWorkBench.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YangRequestWorkBench.java
index 625f1ed..dc36028 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YangRequestWorkBench.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YangRequestWorkBench.java
@@ -17,34 +17,42 @@
 package org.onosproject.yms.app.ydt;
 
 import com.google.common.collect.ImmutableMap;
+import org.onosproject.yangutils.datamodel.YangAugment;
+import org.onosproject.yangutils.datamodel.YangLeaf;
 import org.onosproject.yangutils.datamodel.YangList;
 import org.onosproject.yangutils.datamodel.YangSchemaNode;
 import org.onosproject.yangutils.datamodel.YangSchemaNodeContextInfo;
 import org.onosproject.yangutils.datamodel.YangSchemaNodeIdentifier;
+import org.onosproject.yms.app.ydt.exceptions.YdtException;
 import org.onosproject.yms.app.ysr.YangSchemaRegistry;
 import org.onosproject.yms.ydt.YdtContext;
 import org.onosproject.yms.ydt.YdtContextOperationType;
 import org.onosproject.yms.ydt.YdtType;
 import org.onosproject.yms.ydt.YmsOperationType;
 
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_MULTI_INSTANCE_LEAF_NODE;
 import static org.onosproject.yms.app.ydt.AppNodeFactory.getAppContext;
 import static org.onosproject.yms.app.ydt.RequestedCallType.LEAF;
-import static org.onosproject.yms.app.ydt.RequestedCallType.OTHER;
+import static org.onosproject.yms.app.ydt.RequestedCallType.NON_LEAF;
 import static org.onosproject.yms.app.ydt.RequestedCardinality.MULTI_INSTANCE;
 import static org.onosproject.yms.app.ydt.RequestedCardinality.MULTI_INSTANCE_LEAF;
 import static org.onosproject.yms.app.ydt.RequestedCardinality.SINGLE_INSTANCE;
 import static org.onosproject.yms.app.ydt.RequestedCardinality.UNKNOWN;
 import static org.onosproject.yms.app.ydt.YdtConstants.errorMsg;
-import static org.onosproject.yms.app.ydt.YdtNodeFactory.getAppOpTypeFromYdtOpType;
-import static org.onosproject.yms.ydt.YdtContextOperationType.CREATE;
+import static org.onosproject.yms.app.ydt.YdtNodeFactory.getNode;
+import static org.onosproject.yms.app.ydt.YdtNodeFactory.getYangSchemaNodeTypeSpecificContext;
+import static org.onosproject.yms.app.ydt.YdtUtils.checkElementCount;
+import static org.onosproject.yms.app.ydt.YdtUtils.freeRestResources;
+import static org.onosproject.yms.app.ydt.YdtUtils.getAppOpTypeFromYdtOpType;
+import static org.onosproject.yms.app.ydt.YdtUtils.getAugmentingSchemaNode;
+import static org.onosproject.yms.app.ydt.YdtUtils.getNodeIdentifier;
+import static org.onosproject.yms.app.ydt.YdtUtils.getValidOpType;
 import static org.onosproject.yms.ydt.YdtContextOperationType.DELETE;
-import static org.onosproject.yms.ydt.YdtContextOperationType.MERGE;
 import static org.onosproject.yms.ydt.YdtContextOperationType.REMOVE;
 import static org.onosproject.yms.ydt.YdtType.MULTI_INSTANCE_LEAF_VALUE_NODE;
 import static org.onosproject.yms.ydt.YdtType.MULTI_INSTANCE_NODE;
@@ -56,45 +64,34 @@
  */
 public class YangRequestWorkBench implements YdtExtendedBuilder {
 
-    // ydt formatted error string
+    // Ydt formatted error string
     private static final String FMT_NOT_EXIST =
             "Application with name \"%s\" doesn't exist.";
-    private static final String E_USE_ADDLEAF =
-            "Requested Node should be created using addLeaf interface";
-    private static final String E_MULTI_INS =
-            "Adds an instance of type list or leaf-list node only";
-    private static final String E_CREATE =
-            "Create request is not allowed under delete operation";
-    private static final String E_DEL =
-            "Delete request is not allowed under create operation";
+
+    // Ydt error strings.
+    private static final String E_USE_ADD_LEAF =
+            "Requested Node should be created using addLeaf interface.";
+
     private static final String E_INVOKE_PARENT =
-            "Can't invoke get parent at logical root node";
-    private static final String FMT_TOO_FEW =
-            "Too few key parameters in %s. Expected %d; actual %d.";
-    private static final String FMT_TOO_MANY =
-            "Too many key parameters in %s. Expected %d; actual %d.";
+            "Can't invoke get parent at logical root node.";
 
     /*
-     * Current node in YANG data tree, kept to maintain the
-     * current context in YDT.
+     * Reference for the current context node in YANG data tree.
      */
     private YdtNode curNode;
 
     /*
-     * Root node in YANG data tree, kept to maintain the root context in
-     * YDT.
+     * Reference for the logical root node in YANG data tree.
      */
     private YdtNode rootNode;
 
     /*
-     * Current node in YANG data tree, kept to maintain the current context
-     * in ydt application tree.
+     * Reference for the current context in ydt application tree.
      */
     private YdtAppContext appCurNode;
 
     /*
-     * Root node in YANG data tree, kept to maintain the root context in ydt
-     * application tree.
+     * Reference for the logical root node context in ydt application tree.
      */
     private YdtAppContext appRootNode;
 
@@ -129,6 +126,13 @@
     // TODO validate need to be handle later with interaction type basis in
     // future when it will be supported
 
+    /*
+     * Reference for application tree node set.
+     * This set contains the method name's generated for an augmented
+     * target node to avoid the duplicate entries in YDT application tree for
+     * multiple augmented nodes under a single XPATH.
+     */
+    private Set<String> augGenMethodSet;
 
     /**
      * Creates an instance of YANG request work bench which is use to initialize
@@ -139,47 +143,27 @@
      * @param namespace  namespace of logical container
      * @param opType     type of operation done by using YANG
      *                   interface
-     * @param registry   Yang schema registry
+     * @param reg        Yang schema registry
      * @param isValidate Flag to identify data validation need to be
      *                   done by YDT or not
      */
     public YangRequestWorkBench(String name, String namespace,
                                 YmsOperationType opType,
-                                YangSchemaRegistry registry,
+                                YangSchemaRegistry reg,
                                 boolean isValidate) {
-        YdtNode newNode;
-        YangSchemaNodeIdentifier nodeIdentifier =
-                new YangSchemaNodeIdentifier();
-        nodeIdentifier.setName(name);
-        nodeIdentifier.setNameSpace(namespace);
-        newNode = new YdtSingleInstanceNode(nodeIdentifier);
-        setRootNode(newNode);
-        this.registry = registry;
+
+        setRootNode(new YdtLogicalNode(name, namespace));
+        registry = reg;
         ymsOperationType = opType;
         validate = isValidate;
-        // Set the logical root node for yang data app tree.
-        DefaultYdtAppContext appNode = getAppContext(true);
 
-        setAppRootNode(appNode);
+        setAppRootNode(getAppContext(true));
     }
 
     /**
-     * Creates an instance of YANG request work bench which is used to build YDT
-     * tree in YAB.
+     * Sets the logical root node for ydt.
      *
-     * @param curNode       current YDT node
-     * @param operationType YMS operation type
-     */
-    public YangRequestWorkBench(YdtNode curNode,
-                                YmsOperationType operationType) {
-        this.curNode = curNode;
-        ymsOperationType = operationType;
-    }
-
-    /**
-     * Sets the logical root context information available in YDT node.
-     *
-     * @param node logical root node
+     * @param node ydt logical root node
      */
     private void setRootNode(YdtNode node) {
         rootNode = node;
@@ -187,9 +171,9 @@
     }
 
     /**
-     * Sets the app context tree logical root node  for ydt application tree.
+     * Sets the logical root node for ydt application tree.
      *
-     * @param node application tree's logical root node
+     * @param node ydt application context logical root node
      */
     private void setAppRootNode(YdtAppContext node) {
         appRootNode = node;
@@ -207,37 +191,57 @@
     }
 
     /**
-     * Returns the app context tree root node for ydt application tree.
-     * This method will be used by yab.
+     * Returns the ydt app context tree logical root node.
+     * This method will be used by yab and ytb.
      *
-     * @return YdtAppContext refers to root node of ydt application tree
+     * @return YdtAppContext app tree logical root node
      */
     public YdtAppContext getAppRootNode() {
         return appRootNode;
     }
 
     /**
-     * Returns the data tree for given node identifier.
+     * Returns the ydt module node with requested node identifier.
      *
-     * @param id        Represents node identifier of YANG data tree node
-     * @param namespace namespace of the application requested by user
+     * @param id module/application node identifier
      * @return YANG data tree node
+     * @throws YdtException when user requested node schema doesn't exist or
+     *                      requested node is already part of the tree
      */
-    private YdtNode moduleHandler(YangSchemaNodeIdentifier id,
-                                  String namespace) {
+    private YdtNode moduleHandler(YangSchemaNodeIdentifier id)
+            throws YdtException {
 
-        YangSchemaNode node = registry
-                .getYangSchemaNodeUsingSchemaName(id.getName());
+        YangSchemaNode node =
+                registry.getYangSchemaNodeUsingSchemaName(id.getName());
 
-        if (node == null ||
-                namespace != null && !namespace.equals(node.getNameSpace())) {
-            curNode.errorHandler(errorMsg(
-                    FMT_NOT_EXIST, id.getName()), rootNode);
+        String namespace = id.getNameSpace().getModuleNamespace();
+
+        /*
+         * Checking received schema node is having same namespace as
+         * requested by user or not.
+         */
+        if (node == null || namespace != null &&
+                !namespace.equals(node.getYangSchemaNodeIdentifier()
+                                          .getNameSpace()
+                                          .getModuleNamespace())) {
+            throw new YdtException(errorMsg(FMT_NOT_EXIST, id.getName()));
         }
 
-        YdtNode newNode = new YdtSingleInstanceNode(id);
+        /*
+         * If yms operation is for query then no validation need to be
+         * performed.
+         */
+        if (ymsOperationType != YmsOperationType.QUERY_REQUEST) {
+            // Checking whether module node is already exits in YDT or not.
+            try {
+                curNode.getCollidingChild(id);
+            } catch (YdtException e) {
+                throw new YdtException(e.getLocalizedMessage());
+            }
+        }
+
+        YdtNode newNode = new YdtSingleInstanceNode(node);
         newNode.setYangSchemaNode(node);
-        id.setNameSpace(node.getNameSpace());
         return newNode;
     }
 
@@ -255,25 +259,29 @@
     }
 
     @Override
-    public void addChild(String name, String namespace) {
-        addChild(name, namespace, UNKNOWN, null, OTHER);
+    public void addChild(String name, String namespace)
+            throws IllegalArgumentException {
+        addChild(name, namespace, UNKNOWN, null, NON_LEAF);
     }
 
     @Override
-    public void addChild(String name, String namespace, YdtType ydtType) {
+    public void addChild(String name, String namespace, YdtType ydtType)
+            throws IllegalArgumentException {
         addChild(name, namespace, ydtType, null);
     }
 
     @Override
     public void addChild(String name, String namespace,
-                         YdtContextOperationType opType) {
-        addChild(name, namespace, UNKNOWN, opType, OTHER);
+                         YdtContextOperationType opType)
+            throws IllegalArgumentException {
+        addChild(name, namespace, UNKNOWN, opType, NON_LEAF);
     }
 
     @Override
     public void addChild(String name, String namespace, YdtType ydtType,
-                         YdtContextOperationType opType) {
-        RequestedCardinality cardinality = null;
+                         YdtContextOperationType opType)
+            throws IllegalArgumentException {
+        RequestedCardinality cardinality;
         switch (ydtType) {
             case MULTI_INSTANCE_NODE:
                 cardinality = MULTI_INSTANCE;
@@ -282,9 +290,9 @@
                 cardinality = SINGLE_INSTANCE;
                 break;
             default:
-                curNode.errorHandler(E_USE_ADDLEAF, rootNode);
+                throw new IllegalArgumentException(E_USE_ADD_LEAF);
         }
-        addChild(name, namespace, cardinality, opType, OTHER);
+        addChild(name, namespace, cardinality, opType, NON_LEAF);
     }
 
     /**
@@ -297,95 +305,108 @@
      * @param cardinality type of YANG data tree node operation
      * @param opType      type of requested operation over a node
      * @param callType    to identify the whether its a leaf or other node
+     * @throws IllegalArgumentException when method has been passed an illegal
+     *                                  or inappropriate argument.
      */
     private void addChild(String name, String namespace,
                           RequestedCardinality cardinality,
                           YdtContextOperationType opType,
-                          RequestedCallType callType) {
+                          RequestedCallType callType)
+            throws IllegalArgumentException {
 
-        YdtNode childNode;
-        boolean isContextSwitch = false;
-        YangSchemaNode schemaNode = null;
-        YangSchemaNodeContextInfo contextInfo;
+        YdtNode newNode;
+        boolean contextSwitch = false;
         YangSchemaNode augmentingSchema = null;
+        YangSchemaNodeIdentifier id = getNodeIdentifier(name, namespace);
 
-        YangSchemaNodeIdentifier id = new YangSchemaNodeIdentifier();
-        id.setName(name);
-
-        // Module/sub-module node handler.
-        if (curNode.equals(rootNode)) {
-            childNode = moduleHandler(id, namespace);
-        } else {
-
-            // If namespace given by user null, then take namespace from parent.
-            if (namespace == null) {
-                namespace = curNode.getYdtNodeIdentifier().getNameSpace();
-            }
-
-            id.setNameSpace(namespace);
-
-            /*
-             * Get the already exiting YDT node in YDT tree with same
-             * nodeIdentifier
-             */
-            childNode = curNode.getCollidingChild(id);
-
-            /*
-             * If colliding child doesn't exist ,
-             * then query yang data model for schema of given node.
-             */
-            if (childNode == null) {
-                /*
-                 * Get Yang Schema node context info which is having
-                 * YangSchemaNode and ContextSwitchedNode.
-                 */
-                contextInfo = curNode.getSchemaNodeContextInfo(id);
-
-                if (contextInfo.getContextSwitchedNode() != null) {
-                    augmentingSchema = appCurNode.getAugmentingSchemaNode(
-                            id, contextInfo);
-                    if (augmentingSchema != null) {
-                        /*
-                         * As two tree(YDT and YDT Application Tree) are getting
-                         * prepared in parallel, So  setting context switch
-                         * flag it will help ydt to keep the track whether
-                         * ydtApp tree also need to be traversed back to parent
-                         * or not with YDT tree traverse to parent call.
-                         */
-                        isContextSwitch = true;
-                    }
-                }
-                schemaNode = contextInfo.getSchemaNode();
+        try {
+            // Module/sub-module node handler.
+            if (curNode.equals(rootNode)) {
+                newNode = moduleHandler(id);
             } else {
-                /*
-                 * If colliding child exist , then will be leaf-list or list
-                 * If its leaf-list then return and add new requested
-                 * value/valueSet in same node else take yang data model
-                 * information from colliding child.
-                 */
-                if (childNode.getYdtType() == MULTI_INSTANCE_LEAF_VALUE_NODE) {
-                    curNode = childNode;
-                    return;
+
+                YangSchemaNode schemaNode;
+                YangSchemaNodeContextInfo contextInfo;
+
+                // If namespace given by user null, then take namespace from parent.
+                if (namespace == null) {
+                    id.setNameSpace(curNode.getYangSchemaNode().getNameSpace());
                 }
-                schemaNode = childNode.getYangSchemaNode();
+
+                /*
+                 * Get the already exiting YDT node in YDT tree with same
+                 * nodeIdentifier
+                 */
+                newNode = curNode.getCollidingChild(id);
+
+                /*
+                 * If colliding child doesn't exist ,
+                 * then query yang data model for schema of given node.
+                 */
+                if (newNode == null) {
+                    /*
+                     * Get Yang Schema node context info which is having
+                     * YangSchemaNode and ContextSwitchedNode.
+                     */
+                    contextInfo = curNode.getSchemaNodeContextInfo(id);
+
+                    if (contextInfo.getContextSwitchedNode() != null) {
+                        augmentingSchema = getAugmentingSchemaNode(
+                                id, contextInfo);
+                        if (augmentingSchema != null) {
+                            /*
+                             * As two tree(YDT and YDT Application Tree) are getting
+                             * prepared in parallel, So  setting context switch
+                             * flag it will help ydt to keep the track whether
+                             * ydtApp tree also need to be traversed back to parent
+                             * or not with YDT tree traverse to parent call.
+                             */
+                            contextSwitch = true;
+                        }
+                    }
+                    schemaNode = contextInfo.getSchemaNode();
+                } else {
+                    /*
+                     * If colliding child exist , then it will be leaf-list or list.
+                     * If its leaf-list then return and add new requested
+                     * value/valueSet in same node else take yang data model
+                     * information from colliding child.
+                     */
+                    if (newNode.getYdtType() == MULTI_INSTANCE_LEAF_VALUE_NODE) {
+                        curNode = newNode;
+                        return;
+                    }
+                    schemaNode = newNode.getYangSchemaNode();
+                }
+
+                /*
+                 * For yms query request node specific validation are not
+                 * required as rest-conf can call addChild api for leaf/leaf-list
+                 * node addition also in ydt.
+                 */
+                if (ymsOperationType == YmsOperationType.QUERY_REQUEST) {
+                    newNode = getYangSchemaNodeTypeSpecificContext(schemaNode);
+                } else {
+                    newNode = getNode(schemaNode, cardinality, callType);
+                }
             }
-            childNode = YdtNodeFactory.getNode(id, schemaNode, cardinality,
-                                               callType);
+
+            opType = getValidOpType(opType, ydtDefaultOpType, newNode, curNode);
+
+            newNode.setYdtContextOperationType(opType);
+
+            curNode.addChild(newNode, true);
+        } catch (YdtException e) {
+            freeRestResources(rootNode);
+            throw new IllegalArgumentException(e.getLocalizedMessage());
         }
 
-        opType = getValidOpType(opType, callType, schemaNode);
-
-        childNode.setYdtContextOperationType(opType);
-
-        curNode.addChild(childNode, true);
-
         // Update parent ydt node map.
-        curNode.updateYdtMap(id, childNode);
+        curNode.updateYdtMap(newNode);
 
-        processAppTree(opType, childNode, augmentingSchema, isContextSwitch);
+        processAppTree(opType, newNode, augmentingSchema, contextSwitch);
 
-        // Updating the curNode.
-        curNode = childNode;
+        curNode = newNode;
     }
 
     /**
@@ -394,18 +415,17 @@
      * @param opType           user requested operation type
      * @param childNode        requested ydt node
      * @param augmentingSchema schema of last augmenting node
-     * @param isContextSwitch  true, for module node call; false for modules
+     * @param contextSwitch    true, for module node call; false for modules
      *                         sub-node calls
      */
     private void processAppTree(
             YdtContextOperationType opType, YdtNode childNode,
-            YangSchemaNode augmentingSchema, boolean isContextSwitch) {
+            YangSchemaNode augmentingSchema, boolean contextSwitch) {
 
-        if (augmentingSchema != null) {
-            if (!appCurNode.addSchemaToAppSet(augmentingSchema)) {
-                return;
-            }
+        if (curNode == rootNode) {
+            augGenMethodSet = new HashSet<>();
         }
+
         if (opType == null) {
             opType = curNode.getYdtContextOperationType();
         } else {
@@ -414,13 +434,23 @@
         }
 
         /*
-         * Create entry of module node in ydt app tree.
-         * Or if context switch happened then also add entry for same ydt
-         * node in the ydt application tree.
+         * This is to avoid multiple entries of single augmented target.
          */
-        if (curNode.equals(rootNode) || isContextSwitch) {
+        if (augmentingSchema != null) {
+            if (!augGenMethodSet.add(((YangAugment) augmentingSchema)
+                                             .getSetterMethodName())) {
+                return;
+            }
+        }
+
+        /*
+         * Create entry of module node in ydt app tree.
+         * Or if context switch happened then also add entry for same
+         * augmented ydt node in the ydt application tree.
+         */
+        if (curNode.equals(rootNode) || contextSwitch) {
             addChildInAppTree(childNode, augmentingSchema, opType,
-                              isContextSwitch);
+                              contextSwitch);
 
             // Setting app tree node operation.
             appCurNode.setOperationType(getAppOpTypeFromYdtOpType(opType));
@@ -432,56 +462,6 @@
         }
     }
 
-    /**
-     * Returns the valid operation type for requested ydt node after performing
-     * validation.
-     *
-     * @param opType     user requested operation type
-     * @param callType   to identify the whether its a leaf or other node
-     * @param schemaNode schema node of user requested ydt node
-     * @return operation type
-     */
-    private YdtContextOperationType getValidOpType(
-            YdtContextOperationType opType, RequestedCallType callType,
-            YangSchemaNode schemaNode) {
-
-        // Operation type not supported for leaf node.
-        if (callType == LEAF || (callType == RequestedCallType.MULTI_INSTANCE &&
-                schemaNode.getYangSchemaNodeType() ==
-                        YANG_MULTI_INSTANCE_LEAF_NODE)) {
-            return null;
-        }
-
-        // Reference for parent node operation type.
-        YdtContextOperationType parentOpType = curNode
-                .getYdtContextOperationType();
-
-        if (opType != null && parentOpType != null) {
-            validateOperationType(parentOpType, opType);
-        } else if (opType == null) {
-            opType = getOperationType(parentOpType);
-        }
-        return opType;
-    }
-
-    /**
-     * Returns the operation type for non leaf node.
-     * When "operation" attribute for current node is not specified or null,
-     * then the operation applied to the parent data node of the
-     * configuration is used. If no parent data node is available,
-     * then the default-operation'value is used.
-     * If default operation type is not set, merge will be taken as default
-     * operation type.
-     *
-     * @param parentOpType operation type of parent node
-     * @return operation type for current non leaf node
-     */
-    private YdtContextOperationType getOperationType(
-            YdtContextOperationType parentOpType) {
-
-        return parentOpType != null ? parentOpType :
-                (ydtDefaultOpType != null ? ydtDefaultOpType : MERGE);
-    }
 
     /**
      * Adds a last child to YANG app data tree.this method is to be used
@@ -504,10 +484,9 @@
 
         // Add context switched child in ydt App tree.
         appCurNode.addChild(appContext);
-        //Updating the curNode.
+
         appCurNode = appContext;
 
-        // Get the app tree operation type from ydt operation type.
         opType = getAppOpTypeFromYdtOpType(childOpType);
 
         appCurNode.setAppData(childNode, schemaNode);
@@ -517,40 +496,15 @@
         childNode.setAppContextSwitch();
     }
 
-    /**
-     * Validates the various combination of operation type.
-     *
-     * @param parentOpType Reference for parent node operation type
-     * @param childOpType  type of YANG data tree node operation
-     */
-    private void validateOperationType(YdtContextOperationType parentOpType,
-                                       YdtContextOperationType childOpType) {
-
-        switch (parentOpType) {
-            case CREATE:
-                // Inside the create operation delete operation should not come.
-                if (childOpType == DELETE) {
-                    curNode.errorHandler(E_CREATE, rootNode);
-                }
-                break;
-            case DELETE:
-                // Inside the delete operation create operation should not come.
-                if (childOpType == CREATE) {
-                    curNode.errorHandler(E_DEL, rootNode);
-                }
-                break;
-            default:
-                //TODO check all possible scenario.
-        }
-    }
-
     @Override
-    public void addLeaf(String name, String namespace, String value) {
+    public void addLeaf(String name, String namespace, String value)
+            throws IllegalArgumentException {
         addLeaf(name, namespace, value, null, UNKNOWN);
     }
 
     @Override
-    public void addLeaf(String name, String namespace, Set<String> valueSet) {
+    public void addLeaf(String name, String namespace, Set<String> valueSet)
+            throws IllegalArgumentException {
         addLeaf(name, namespace, null, valueSet, MULTI_INSTANCE_LEAF);
     }
 
@@ -568,51 +522,66 @@
      * @param value       value of the child
      * @param valueSet    list of value of the child
      * @param cardinality type of YANG data tree node operation
+     * @throws IllegalArgumentException when method has been passed an illegal
+     *                                  or inappropriate argument.
      */
     private void addLeaf(String name, String namespace, String value,
                          Set<String> valueSet,
-                         RequestedCardinality cardinality) {
-        addChild(name, namespace, cardinality, null, LEAF);
+                         RequestedCardinality cardinality)
+            throws IllegalArgumentException {
+        try {
+            addChild(name, namespace, cardinality, null, LEAF);
 
-        // After successful addition of child node updating the values in same.
-        if (value != null) {
-            curNode.addValue(value);
-        } else if (valueSet != null) {
-            curNode.addValueSet(valueSet);
+            // After successful addition of child node updating the values in same.
+            if (value != null) {
+                curNode.addValue(value);
+            } else if (valueSet != null) {
+                curNode.addValueSet(valueSet);
+            }
+        } catch (YdtException e) {
+            freeRestResources(rootNode);
+            throw new IllegalArgumentException(e.getLocalizedMessage());
         }
     }
 
     @Override
-    public void traverseToParent() {
+    public void traverseToParent() throws IllegalStateException {
         // If traverse back to parent for logical root node comes
         if (curNode.equals(rootNode)) {
-            curNode.errorHandler(E_INVOKE_PARENT, rootNode);
+            freeRestResources(rootNode);
+            throw new IllegalStateException(E_INVOKE_PARENT);
         }
 
-        // If node is of multiInstanceNode type then check key uniqueness.
-        if (curNode.getYdtType() == MULTI_INSTANCE_NODE) {
-            curNode.createKeyNodeList();
-        }
+        try {
 
-        /*
-         * Check application switch for curNode if set,
-         * then traverseToParent in YDT application tree.
-         */
-        if (curNode.getParent().equals(rootNode) ||
-                curNode.getAppContextSwitch()) {
-            traverseToAppTreeParent();
-        }
+            // If node is of multiInstanceNode type then check key uniqueness.
+            if (curNode.getYdtType() == MULTI_INSTANCE_NODE) {
+                curNode.createKeyNodeList();
+            }
 
-        /*
-         * Validate all multi Instance inside current context,
-         * This is not valid for leaf and leaf-list node.
-         */
-        if (curNode instanceof YdtMultiInstanceNode ||
-                curNode instanceof YdtSingleInstanceNode) {
-            curNode.validateMultiInstanceNode();
-        }
+            /*
+             * Check application switch for curNode if set,
+             * then traverseToParent in YDT application tree.
+             */
+            if (curNode.getParent().equals(rootNode) ||
+                    curNode.getAppContextSwitch()) {
+                traverseToAppTreeParent();
+            }
 
-        curNode = curNode.getParent();
+            /*
+             * Validate all multi Instance inside current context,
+             * This is not valid for leaf and leaf-list node.
+             */
+            if (curNode instanceof YdtMultiInstanceNode ||
+                    curNode instanceof YdtSingleInstanceNode) {
+                curNode.validateMultiInstanceNode();
+            }
+
+            curNode = curNode.getParent();
+        } catch (YdtException e) {
+            freeRestResources(rootNode);
+            throw new IllegalStateException(e.getLocalizedMessage());
+        }
     }
 
     /**
@@ -647,59 +616,60 @@
     @Override
     public void addMultiInstanceChild(String name, String namespace,
                                       List<String> keysValueList,
-                                      YdtContextOperationType opType) {
+                                      YdtContextOperationType opType)
+            throws IllegalArgumentException {
+
         addChild(name, namespace, UNKNOWN, opType,
                  RequestedCallType.MULTI_INSTANCE);
         int inputCount = keysValueList.size();
-        int expectedCount;
-        if (curNode.getYdtType() == MULTI_INSTANCE_LEAF_VALUE_NODE) {
-            // After successful addition of child node updating
-            // the values in same.
-            // inputCount = curNode.getValueSet().size() + inputCount;
-            // checkElementCount(expectedCount, inputCount);
-            // TODO check the element count
-            for (String value : keysValueList) {
-                curNode.addValue(value);
-            }
-        } else if (curNode.getYdtType() == MULTI_INSTANCE_NODE) {
-            YangList yangListHolder = (YangList) curNode.getYangSchemaNode();
-            List<String> schemaKeyList = yangListHolder.getKeyList();
-            expectedCount = schemaKeyList.size();
-            checkElementCount(name, expectedCount, inputCount);
 
-            Iterator<String> sklIter = schemaKeyList.iterator();
-            Iterator<String> kvlIter = keysValueList.iterator();
-            String keyEleName;
-            while (kvlIter.hasNext()) {
-                String value = kvlIter.next();
-                keyEleName = sklIter.next();
-                addLeaf(keyEleName, namespace, value);
-                if (kvlIter.hasNext()) {
-                    traverseToParentWithoutValidation();
+        try {
+            if (curNode.getYdtType() == MULTI_INSTANCE_LEAF_VALUE_NODE) {
+
+            /*
+             * Calculating the current leaf-list node array size by adding
+             * existing elements count and new supplied elements by user for
+             * the same.
+             */
+                // TODO instance count for leaf list need to be handled.
+//            if (curNode.getValueSet().size() + inputCount > expectedCount) {
+//                curNode.errorHandler(
+//                        errorMsg(FMT_MANY_INS, name, expectedCount), rootNode);
+//            }
+
+            /*
+             * After successful addition of child node updating
+             * the values in same.
+             */
+                for (String value : keysValueList) {
+                    curNode.addValue(value);
                 }
-            }
-            curNode = curNode.getParent();
-        } else {
-            curNode.errorHandler(E_MULTI_INS, rootNode);
-        }
-    }
+            } else if (curNode.getYdtType() == MULTI_INSTANCE_NODE) {
 
-    /**
-     * Checks the user supplied list of argument match's the expected value
-     * or not.
-     *
-     * @param name     name of the parent list/leaf-list node
-     * @param expected count suppose to be
-     * @param actual   user supplied values count
-     */
-    private void checkElementCount(String name, int expected,
-                                   int actual) {
-        if (expected < actual) {
-            curNode.errorHandler(errorMsg(FMT_TOO_MANY, name, expected, actual),
-                                 rootNode);
-        } else if (expected > actual) {
-            curNode.errorHandler(errorMsg(FMT_TOO_FEW, name, expected, actual),
-                                 rootNode);
+                YangList yangListHolder = (YangList) curNode.getYangSchemaNode();
+                List<String> schemaKeyList = yangListHolder.getKeyList();
+                int expectedCount = schemaKeyList.size();
+                checkElementCount(name, expectedCount, inputCount);
+
+                //After validation adding the key nodes under the list node.
+                Iterator<String> sklIter = schemaKeyList.iterator();
+                Iterator<String> kvlIter = keysValueList.iterator();
+                String keyEleName;
+
+                while (kvlIter.hasNext()) {
+                    String value = kvlIter.next();
+                    keyEleName = sklIter.next();
+                    addLeaf(keyEleName, namespace, value);
+                    if (kvlIter.hasNext()) {
+                        traverseToParentWithoutValidation();
+                    }
+                }
+
+                curNode = curNode.getParent();
+            }
+        } catch (YdtException e) {
+            freeRestResources(rootNode);
+            throw new IllegalArgumentException(e.getLocalizedMessage());
         }
     }
 
@@ -713,15 +683,7 @@
     private YdtNode addExtendedChildNode(YdtContextOperationType opType,
                                          YangSchemaNode schemaNode) {
 
-        YdtNode childNode;
-        YangSchemaNodeIdentifier id =
-                schemaNode.getYangSchemaNodeIdentifier();
-
-        childNode = YdtNodeFactory
-                .getYangSchemaNodeTypeSpecificContext(
-                        id, schemaNode.getYangSchemaNodeType());
-
-        childNode.setId(id);
+        YdtNode childNode = getYangSchemaNodeTypeSpecificContext(schemaNode);
 
         childNode.setYangSchemaNode(schemaNode);
 
@@ -745,27 +707,53 @@
                                           YangSchemaNode schemaNode) {
         YdtNode childNode = addExtendedChildNode(null, schemaNode);
 
-        // After successful addition of child node updating the values in same.
+        /*
+         * After successful addition of child node updating the values in
+         * valueSet.
+         */
         childNode.addValueSetWithoutValidation(valueSet);
         return childNode;
     }
 
     @Override
-    public YdtExtendedContext addLeaf(String value,
-                                      YangSchemaNode schemaNode) {
+    public YdtExtendedContext addLeaf(String value, YangSchemaNode schemaNode) {
+
         YdtNode childNode = addExtendedChildNode(null, schemaNode);
 
         // After successful addition of child node updating the values in same.
-        childNode.addValueWithoutValidation(value);
+        childNode.addValueWithoutValidation(value, ((YangLeaf) schemaNode)
+                .isKeyLeaf());
         return childNode;
     }
 
     @Override
-    public void traverseToParentWithoutValidation() {
-        // If traverse back to parent for logical root node comes
+    public void traverseToParentWithoutValidation()
+            throws IllegalStateException {
+        // If traverse back to parent for logical root node comes.
         if (curNode.equals(rootNode)) {
-            curNode.errorHandler(E_INVOKE_PARENT, rootNode);
+            freeRestResources(rootNode);
+            throw new IllegalStateException(E_INVOKE_PARENT);
         }
         curNode = curNode.getParent();
     }
+
+    /**
+     * Returns the method name's set for an augmented target node in an
+     * application tree.
+     *
+     * @return augGenMethodSet set of method name's
+     */
+    public Set<String> getAugGenMethodSet() {
+        return augGenMethodSet;
+    }
+
+    /**
+     * Sets the method name's set for an augmented target node in an
+     * application tree.
+     *
+     * @param augGenMethodSet set of method name's
+     */
+    public void setAugGenMethodSet(Set<String> augGenMethodSet) {
+        this.augGenMethodSet = augGenMethodSet;
+    }
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtAppContext.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtAppContext.java
index c845221..d6879d7 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtAppContext.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtAppContext.java
@@ -17,8 +17,6 @@
 package org.onosproject.yms.app.ydt;
 
 import org.onosproject.yangutils.datamodel.YangSchemaNode;
-import org.onosproject.yangutils.datamodel.YangSchemaNodeContextInfo;
-import org.onosproject.yangutils.datamodel.YangSchemaNodeIdentifier;
 import org.onosproject.yms.ydt.YdtContext;
 import org.onosproject.yms.ydt.YdtContextOperationType;
 
@@ -55,13 +53,6 @@
     YdtAppContext getFirstChild();
 
     /**
-     * Sets the context of first child.
-     *
-     * @param child node
-     */
-    void setChild(YdtAppContext child);
-
-    /**
      * Returns the context of last child.
      *
      * @return context of last child
@@ -69,13 +60,6 @@
     YdtAppContext getLastChild();
 
     /**
-     * Sets the context of last child.
-     *
-     * @param child node
-     */
-    void setLastChild(YdtAppContext child);
-
-    /**
      * Returns the context of next sibling.
      *
      * @return context of next sibling
@@ -139,13 +123,6 @@
     YdtContext getModuleContext();
 
     /**
-     * Sets the application's ydtContext.
-     *
-     * @param moduleNode application's ydtContext
-     */
-    void setModuleContext(YdtContext moduleNode);
-
-    /**
      * Returns the YangSchemaNode of augmenting application.
      *
      * @return YangSchemaNode of augmenting application
@@ -167,19 +144,6 @@
     void addChild(YdtAppContext newChild);
 
     /**
-     * Returns augmenting node module yang schema node.
-     *
-     * @param id          schema node identifier
-     * @param contextInfo Yang Schema node context info
-     *                    which is having YangSchemaNode and
-     *                    ContextSwitchedNode
-     * @return augmenting node module yang schema node
-     */
-    YangSchemaNode getAugmentingSchemaNode(
-            YangSchemaNodeIdentifier id,
-            YangSchemaNodeContextInfo contextInfo);
-
-    /**
      * Updates the app tree operation type.
      * <p>
      * If earlier operation type was OTHER_EDIT and now operation type came as
@@ -212,12 +176,4 @@
      * @return schema node
      */
     YangSchemaNode getYangSchemaNode();
-
-    /**
-     * Adds the given schema node in to application set.
-     *
-     * @param schemaNode schema node to be added
-     * @return true for success; false otherwise
-     */
-    boolean addSchemaToAppSet(YangSchemaNode schemaNode);
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtExtendedBuilder.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtExtendedBuilder.java
index ea9c9f3d..19aacb5 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtExtendedBuilder.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtExtendedBuilder.java
@@ -64,8 +64,11 @@
      * Traverses up in YANG data tree to the parent node, it is to be used when
      * protocol is using extended context type and wanted to traverse
      * up the tree without doing any validation.
+     *
+     * @throws IllegalStateException when user request for traverse to logical
+     *                               root node parent
      */
-    void traverseToParentWithoutValidation();
+    void traverseToParentWithoutValidation() throws IllegalStateException;
 
     @Override
     YdtExtendedContext getRootNode();
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtExtendedContext.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtExtendedContext.java
index 3668de8..79d9401 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtExtendedContext.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtExtendedContext.java
@@ -17,8 +17,6 @@
 package org.onosproject.yms.app.ydt;
 
 import org.onosproject.yangutils.datamodel.YangSchemaNode;
-import org.onosproject.yangutils.datamodel.YangSchemaNodeContextInfo;
-import org.onosproject.yangutils.datamodel.YangSchemaNodeIdentifier;
 import org.onosproject.yms.ydt.YdtContext;
 import org.onosproject.yms.ydt.YdtContextOperationType;
 
@@ -47,16 +45,6 @@
     void addAppInfo(AppType appType, Object object);
 
     /**
-     * Returns child schema node context information. It is used by YMS to
-     * obtain the child schema corresponding to data node identifier.
-     *
-     * @param id represents a identifier of YANG data tree node
-     * @return YANG data node context information
-     */
-    YangSchemaNodeContextInfo getSchemaNodeContextInfo(
-            YangSchemaNodeIdentifier id);
-
-    /**
      * Returns schema node from data model for curNode.
      *
      * @return yang schema node
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtLogicalNode.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtLogicalNode.java
new file mode 100644
index 0000000..05de8b3
--- /dev/null
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtLogicalNode.java
@@ -0,0 +1,61 @@
+/*
+ * 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.onosproject.yms.app.ydt.exceptions.YdtException;
+
+import static org.onosproject.yms.app.ydt.YdtConstants.FMT_DUP_ENTRY;
+import static org.onosproject.yms.app.ydt.YdtConstants.errorMsg;
+import static org.onosproject.yms.ydt.YdtType.LOGICAL_ROOT_NODE;
+
+/**
+ * Represents a logical YANG data tree node.
+ */
+class YdtLogicalNode extends YdtNode {
+
+    private final String name;
+    private final String namespace;
+
+    /**
+     * Creates a YANG logical node object.
+     */
+    public YdtLogicalNode(String name, String namespace) {
+        super(LOGICAL_ROOT_NODE);
+        this.name = name;
+        this.namespace = namespace;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public String getNamespace() {
+        return namespace;
+    }
+
+    @Override
+    public String getModuleNameAsNameSpace() {
+        return namespace;
+    }
+
+    @Override
+    public void validDuplicateEntryProcessing() throws YdtException {
+        throw new YdtException(errorMsg(FMT_DUP_ENTRY, getName()));
+    }
+}
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtMultiInstanceLeafNode.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtMultiInstanceLeafNode.java
index 955852d..24316ad 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtMultiInstanceLeafNode.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtMultiInstanceLeafNode.java
@@ -17,10 +17,10 @@
 package org.onosproject.yms.app.ydt;
 
 import com.google.common.collect.ImmutableSet;
-import org.onosproject.yangutils.datamodel.YangSchemaNodeIdentifier;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
+import org.onosproject.yangutils.datamodel.YangSchemaNode;
+import org.onosproject.yms.app.ydt.exceptions.YdtException;
 
-import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.Set;
 
 import static org.onosproject.yms.app.ydt.YdtConstants.errorMsg;
@@ -39,15 +39,15 @@
     /**
      * Set of values.
      */
-    private final Set<String> valueSet = new HashSet<>();
+    private final Set<String> valueSet = new LinkedHashSet<>();
 
     /**
      * Creates a YANG multi instance leaf node.
      *
-     * @param id node identifier of YDT multi instance node
+     * @param node schema of YDT multi instance node
      */
-    protected YdtMultiInstanceLeafNode(YangSchemaNodeIdentifier id) {
-        super(MULTI_INSTANCE_LEAF_VALUE_NODE, id);
+    YdtMultiInstanceLeafNode(YangSchemaNode node) {
+        super(MULTI_INSTANCE_LEAF_VALUE_NODE, node);
     }
 
     @Override
@@ -56,13 +56,14 @@
     }
 
     @Override
-    public void addValue(String value) {
+    public void addValue(String value) throws YdtException {
         // check the value against corresponding data-type.
-        try {
-            getYangSchemaNode().isValueValid(value);
-        } catch (Exception e) {
-            errorHandler(e.getLocalizedMessage(), this);
-        }
+        //TODO validation need to be decided
+//        try {
+//            getYangSchemaNode().isValueValid(value);
+//        } catch (Exception e) {
+//            throw new YdtException(e.getLocalizedMessage());
+//        }
         addValueToValueSet(value);
     }
 
@@ -71,33 +72,33 @@
      * the value.
      *
      * @param value value to be added
+     * @throws YdtException when the duplicate entry found in leaf-list node
      */
-    private void addValueToValueSet(String value) {
-
+    private void addValueToValueSet(String value) throws YdtException {
         if (!valueSet.add(value)) {
-            errorHandler(errorMsg(FMT_DUP_ENTRY,
-                                  getYdtNodeIdentifier().getName()), this);
+            throw new YdtException(errorMsg(FMT_DUP_ENTRY, getName()));
         }
     }
 
     @Override
-    public void addValueSet(Set valueSet) {
-        String value = null;
+    public void addValueSet(Set valueSet) throws YdtException {
+        String value;
         // Check the value against corresponding data-type.
         for (Object aValueSet : valueSet) {
-
-            try {
-                value = String.valueOf(aValueSet);
-                getYangSchemaNode().isValueValid(value);
-            } catch (DataModelException e) {
-                errorHandler(e.getLocalizedMessage(), this);
-            }
+            value = String.valueOf(aValueSet);
+            //TODO validation need to be decided
+//            try {
+//                value = String.valueOf(aValueSet);
+//                getYangSchemaNode().isValueValid(value);
+//            } catch (DataModelException e) {
+//                throw new YdtException(e.getLocalizedMessage());
+//            }
             addValueToValueSet(value);
         }
     }
 
     @Override
-    public void addValueWithoutValidation(String value) {
+    public void addValueWithoutValidation(String value, boolean isKeyLeaf) {
         valueSet.add(value);
     }
 
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtMultiInstanceNode.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtMultiInstanceNode.java
index a24772b..48bc9ef 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtMultiInstanceNode.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtMultiInstanceNode.java
@@ -18,12 +18,15 @@
 
 import com.google.common.collect.ImmutableList;
 import org.onosproject.yangutils.datamodel.YangList;
+import org.onosproject.yangutils.datamodel.YangSchemaNode;
 import org.onosproject.yangutils.datamodel.YangSchemaNodeIdentifier;
+import org.onosproject.yms.app.ydt.exceptions.YdtException;
 import org.onosproject.yms.ydt.YdtContext;
 
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 
 import static org.onosproject.yms.app.ydt.YdtConstants.errorMsg;
 import static org.onosproject.yms.ydt.YdtType.MULTI_INSTANCE_NODE;
@@ -34,9 +37,15 @@
  */
 public class YdtMultiInstanceNode extends YdtNode {
 
-    // ydt formatted error string
+    // YDT formatted error string
     private static final String FMT_MISSING_KEY =
             "%s is missing some of the keys of %s.";
+    private static final String FMT_UNI_KEY =
+            "Some of the key elements are not unique in %s.";
+    private static final String FMT_MANY_INS =
+            "Too many instances of %s. Expected maximum instances %d.";
+    private static final String FMT_FEW_INS =
+            "Too few instances of %s. Expected minimum instances %d.";
 
     /*
      * Reference for list of key element's ydtContext.
@@ -51,10 +60,10 @@
     /**
      * Creates a YANG multi instance node object.
      *
-     * @param id node identifier of YDT multi instance node .
+     * @param node schema of YDT multi instance node .
      */
-    protected YdtMultiInstanceNode(YangSchemaNodeIdentifier id) {
-        super(MULTI_INSTANCE_NODE, id);
+    YdtMultiInstanceNode(YangSchemaNode node) {
+        super(MULTI_INSTANCE_NODE, node);
     }
 
     /**
@@ -62,7 +71,7 @@
      *
      * @return composite key string
      */
-    public String getCompositeKey() {
+    private String getCompositeKey() {
         return compositeKey;
     }
 
@@ -76,7 +85,7 @@
     }
 
     @Override
-    public void createKeyNodeList() {
+    public void createKeyNodeList() throws YdtException {
         YangList yangListHolder = (YangList) getYangSchemaNode();
         List<String> schemaKeyList = yangListHolder.getKeyList();
 
@@ -96,30 +105,99 @@
         List<YdtContext> nodeList = new ArrayList<>();
 
         YangSchemaNodeIdentifier id = new YangSchemaNodeIdentifier();
-        id.setNameSpace(getYdtNodeIdentifier().getNameSpace());
+        id.setNameSpace(new NameSpace(getNamespace()));
         // This loop should run while schema key list is not finished
         while (sklItr.hasNext()) {
             String name = sklItr.next();
             id.setName(name);
-            List<YdtNode<YdtMultiInstanceNode>> collidingChild =
-                    (List<YdtNode<YdtMultiInstanceNode>>) ydtNodeMap.get(id);
+            YdtNode<YdtSingleInstanceLeafNode> collidingChild =
+                    (YdtNode<YdtSingleInstanceLeafNode>) ydtNodeMap.get(id);
 
             if (collidingChild == null) {
-                errorHandler(errorMsg(FMT_MISSING_KEY,
-                                      yangListHolder.getParent().getName(),
-                                      yangListHolder.getName()), this);
+                throw new YdtException(
+                        errorMsg(FMT_MISSING_KEY, yangListHolder.getParent()
+                                .getName(), yangListHolder.getName()));
             }
 
-            YdtNode<YdtMultiInstanceNode> ydtNode = collidingChild.get(0);
             /*
              * Preparing composite key string by concatenating values of
              * all the key leaf.
              */
-            ksb.append(ydtNode.getValue());
-            nodeList.add(ydtNode);
+            ksb.append(collidingChild.getValue());
+            nodeList.add(collidingChild);
         }
         //Setting te key object in List.
         keyNodeList = nodeList;
         compositeKey = ksb.toString();
     }
+
+    /**
+     * Validates the given list of instances by verifying the allowed
+     * instance count and key element uniqueness.
+     *
+     * @param keyStringSet set to validate the key element uniqueness
+     * @param list     list of instance's of same list
+     * @throws YdtException when user requested multi instance node instance's
+     *                      count doesn't fit into the allowed instance's limit
+     *                      or doesn't have unique key's
+     */
+    public void validateInstances(Set keyStringSet, List list)
+            throws YdtException {
+
+        // Clearing the set.
+        keyStringSet.clear();
+
+        /*
+         * Storing the number of multiInstance node for number
+         * if instance validation.
+         */
+        int instanceCount = list.size();
+
+        YangList listSchema = (YangList) ((YdtMultiInstanceNode) list.get(0))
+                .getYangSchemaNode();
+        validateInstanceCount(instanceCount, listSchema);
+        if (listSchema.isConfig() && instanceCount > 1) {
+
+            /*
+             * Iterating over values in ydtNodeList of
+             * multiInstanceNode and compare the key string.
+             */
+            for (YdtNode ydtNode : (List<YdtNode<YdtMultiInstanceNode>>) list) {
+                if (!keyStringSet.add(((YdtMultiInstanceNode) ydtNode)
+                                              .getCompositeKey())) {
+                    throw new YdtException(
+                            errorMsg(FMT_UNI_KEY, ydtNode.getName()));
+                }
+            }
+        }
+    }
+
+    /**
+     * Validates the instance count for given list entry.
+     *
+     * @param instanceCount actual count
+     * @param list          list entry for which instance count need
+     *                      to be validated
+     * @throws YdtException when user requested multi instance node instance's
+     *                      count doesn't fit into the allowed instance's limit
+     */
+    private void validateInstanceCount(int instanceCount, YangList list)
+            throws YdtException {
+
+        if (list.getMinElements() != null) {
+            int minElement = list.getMinElements().getMinElement();
+            if (instanceCount < minElement) {
+                throw new YdtException(errorMsg(FMT_FEW_INS, list.getName(),
+                                                minElement));
+            }
+        }
+
+        if (list.getMaxElements() != null) {
+            int maxElement = list.getMaxElements().getMaxElement();
+            if (instanceCount > maxElement) {
+                throw new YdtException(errorMsg(FMT_MANY_INS, list.getName(),
+                                                maxElement));
+            }
+        }
+    }
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNode.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNode.java
index c3d4b87..48cf53a 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNode.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNode.java
@@ -16,7 +16,6 @@
 
 package org.onosproject.yms.app.ydt;
 
-import org.onosproject.yangutils.datamodel.YangList;
 import org.onosproject.yangutils.datamodel.YangSchemaNode;
 import org.onosproject.yangutils.datamodel.YangSchemaNodeContextInfo;
 import org.onosproject.yangutils.datamodel.YangSchemaNodeIdentifier;
@@ -42,10 +41,8 @@
  */
 public abstract class YdtNode<T> implements YdtExtendedContext, Cloneable {
 
-    // ydt formatted error string
-    private static final String FMT_UNI_KEY =
-            "Some of the key elements are not unique in %s.";
-    private static final String FMT_KLIST_STR =
+    // YDT formatted error string
+    private static final String FMT_NON_LIST_STR =
             "List of key cannot be created for leaf and leaf-list %s node.";
     private static final String FMT_VAL_N =
             "Value cannot be set in non leaf %s node.";
@@ -55,12 +52,8 @@
             "Value cannot be invoke from non leaf %s node.";
     private static final String FMT_VAL_INS =
             "ValueSet cannot be invoke from non leaf-list %s node";
-    private static final String FMT_MANY_INS =
-            "Too many instances of %s. Expected maximum instances %d.";
-    private static final String FMT_FEW_INS =
-            "Too few instances of %s. Expected minimum instances %d.";
 
-    // ydt error string
+    // YDT error string
     private static final String E_EXIST = "Node is already part of a tree";
     private static final String E_ATOMIC =
             "Child to be added is not atomic, it already has a child";
@@ -99,7 +92,7 @@
     /*
      * Type of node.
      */
-    private YdtType ydtType;
+    private final YdtType ydtType;
 
     /*
      * Flag to keep the track of context switch,
@@ -118,9 +111,17 @@
     private YdtExtendedInfoType ydtExtendedInfoType;
 
     /*
-     * Ydt map to keep the track of node added in YDT.
+     * Ydt map to keep the track of node added under current parent node.
      */
-    final Map<YangSchemaNodeIdentifier, List<YdtNode<T>>> ydtNodeMap =
+    final Map<YangSchemaNodeIdentifier, YdtNode<T>> ydtNodeMap =
+            new HashMap<>();
+
+    /*
+     * Ydt map to keep the track of multi instance node added under current
+     * parent node.
+     */
+    private final Map<YangSchemaNodeIdentifier,
+            List<YdtNode<YdtMultiInstanceNode>>> ydtMultiInsMap =
             new HashMap<>();
 
     /*
@@ -134,11 +135,6 @@
     private YdtContextOperationType ydtContextOperationType;
 
     /*
-     * Key object for ydtNodeMap.
-     */
-    private YangSchemaNodeIdentifier id;
-
-    /*
      * Ydt map to keep the track of application information object
      * with respective type.
      */
@@ -147,6 +143,26 @@
     private YdtContext clonedNode;
 
     /**
+     * Creates a specific type of node.
+     *
+     * @param type of YDT node
+     * @param node schema node
+     */
+    YdtNode(YdtType type, YangSchemaNode node) {
+        ydtType = type;
+        yangSchemaNode = node;
+    }
+
+    /**
+     * Creates a specific type of node.
+     *
+     * @param type of YDT node
+     */
+    YdtNode(YdtType type) {
+        ydtType = type;
+    }
+
+    /**
      * Returns the cloned ydt node.
      *
      * @return clonedNode cloned ydt node
@@ -166,12 +182,17 @@
 
     @Override
     public String getName() {
-        return id.getName();
+        return yangSchemaNode.getName();
     }
 
     @Override
     public String getNamespace() {
-        return id.getNameSpace();
+        return yangSchemaNode.getNameSpace().getModuleNamespace();
+    }
+
+    @Override
+    public String getModuleNameAsNameSpace() {
+        return yangSchemaNode.getNameSpace().getModuleName();
     }
 
     @Override
@@ -223,15 +244,21 @@
         ydtAppInfoMap.put(appType, object);
     }
 
-    @Override
+    /**
+     * Returns child schema node context information. It is used by YMS to
+     * obtain the child schema corresponding to data node identifier.
+     *
+     * @param id represents a identifier of YANG data tree node
+     * @return YANG data node context information
+     * @throws YdtException when user requested node schema doesn't exist
+     */
     public YangSchemaNodeContextInfo getSchemaNodeContextInfo(
-            YangSchemaNodeIdentifier id) {
+            YangSchemaNodeIdentifier id) throws YdtException {
         try {
             return getYangSchemaNode().getChildSchema(id);
         } catch (DataModelException e) {
-            errorHandler(e.getLocalizedMessage(), this);
+            throw new YdtException(e.getLocalizedMessage());
         }
-        return null;
     }
 
     /**
@@ -243,18 +270,20 @@
      *
      * @param value value in a single instance node
      */
-    public void addValue(String value) {
-        errorHandler(
-                errorMsg(FMT_VAL_N, getYdtNodeIdentifier().getName()), this);
+    public void addValue(String value) throws YdtException {
+        throw new YdtException(errorMsg(FMT_VAL_N, getName()));
     }
 
     /**
      * Creates the list of key element's of multi instance node.
-     * this will not be applicable on leaf and leaf-list node.
+     * This will not be applicable on leaf and leaf-list node.
+     *
+     * @throws YdtException when user requested multi instance node is missing
+     *                      any of the key element in request or requested
+     *                      node is of type other then multi instance node
      */
-    public void createKeyNodeList() {
-        errorHandler(errorMsg(
-                FMT_KLIST_STR, getYdtNodeIdentifier().getName()), this);
+    public void createKeyNodeList() throws YdtException {
+        throw new YdtException(errorMsg(FMT_NON_LIST_STR, getName()));
     }
 
     /**
@@ -266,11 +295,12 @@
      * This will be applicable in case of call from SBI so no need
      * to validate the value.
      *
-     * @param value value in a single instance leaf node
+     * @param value     value in a single instance leaf node
+     * @param isKeyLeaf true, for key leaf; false non key leaf
      */
-    public void addValueWithoutValidation(String value) {
-        errorHandler(
-                errorMsg(FMT_VAL_N, getYdtNodeIdentifier().getName()), this);
+    public void addValueWithoutValidation(String value, boolean isKeyLeaf)
+            throws YdtException {
+        throw new YdtException(errorMsg(FMT_VAL_N, getName()));
     }
 
     /**
@@ -282,9 +312,8 @@
      *
      * @param valueSet valueSet in a multi instance leaf node
      */
-    public void addValueSet(Set<String> valueSet) {
-        errorHandler(
-                errorMsg(FMT_VAL_NS, getYdtNodeIdentifier().getName()), this);
+    public void addValueSet(Set<String> valueSet) throws YdtException {
+        throw new YdtException(errorMsg(FMT_VAL_NS, getName()));
     }
 
     /**
@@ -298,9 +327,9 @@
      *
      * @param valueSet valueSet in a multi instance leaf node
      */
-    public void addValueSetWithoutValidation(Set<String> valueSet) {
-        errorHandler(
-                errorMsg(FMT_VAL_NS, getYdtNodeIdentifier().getName()), this);
+    public void addValueSetWithoutValidation(Set<String> valueSet)
+            throws YdtException {
+        throw new YdtException(errorMsg(FMT_VAL_NS, getName()));
     }
 
     /**
@@ -310,7 +339,7 @@
      * the duplicate entry found. Subclasses may override this method
      * to provide the correct behavior for their specific implementation.
      */
-    public void validDuplicateEntryProcessing() {
+    void validDuplicateEntryProcessing() throws YdtException {
     }
 
     /**
@@ -318,36 +347,27 @@
      *
      * @param id represents a identifier of YANG data tree node
      * @return YDT node
+     * @throws YdtException when user requested node already part of YDT tree.
      */
-    public YdtNode getCollidingChild(YangSchemaNodeIdentifier id) {
+    public YdtNode getCollidingChild(YangSchemaNodeIdentifier id)
+            throws YdtException {
 
         // Find the key in YDT map for getting the colliding node.
-        List<YdtNode<T>> collidingChild = ydtNodeMap.get(id);
+        YdtNode collidingChild = ydtNodeMap.get(id);
 
         /*
          * If colliding child exist then process colliding node in respective
          * YDT node type.
          */
         if (collidingChild != null) {
-            collidingChild.get(0).validDuplicateEntryProcessing();
-            return collidingChild.get(0);
+            collidingChild.validDuplicateEntryProcessing();
+            return collidingChild;
         }
 
         return null;
     }
 
     /**
-     * Creates a specific type of node.
-     *
-     * @param type of YDT node
-     * @param id   node identifier of the YDT node
-     */
-    YdtNode(YdtType type, YangSchemaNodeIdentifier id) {
-        ydtType = type;
-        setId(id);
-    }
-
-    /**
      * Sets the parent of node.
      *
      * @param parent node
@@ -393,17 +413,13 @@
     }
 
     @Override
-    public String getValue() {
-        errorHandler(
-                errorMsg(FMT_VAL_IN, getYdtNodeIdentifier().getName()), this);
-        return null;
+    public String getValue() throws YdtException {
+        throw new YdtException(errorMsg(FMT_VAL_IN, getName()));
     }
 
     @Override
-    public Set<String> getValueSet() {
-        errorHandler(
-                errorMsg(FMT_VAL_INS, getYdtNodeIdentifier().getName()), this);
-        return null;
+    public Set<String> getValueSet() throws YdtException {
+        throw new YdtException(errorMsg(FMT_VAL_INS, getName()));
     }
 
     /**
@@ -424,23 +440,6 @@
         lastChild = child;
     }
 
-    /**
-     * Returns object node identifier.
-     *
-     * @return node identifier
-     */
-    public YangSchemaNodeIdentifier getYdtNodeIdentifier() {
-        return id;
-    }
-
-    /**
-     * Sets object node identifier.
-     *
-     * @param id node identifier
-     */
-    public void setId(YangSchemaNodeIdentifier id) {
-        this.id = id;
-    }
 
     /**
      * Adds a child node.
@@ -455,7 +454,7 @@
             throws YdtException {
 
         if (!(newChild instanceof YdtNode)) {
-            errorHandler(errorMsg(E_SUPPORT), this);
+            throw new YdtException(errorMsg(E_SUPPORT));
         }
 
         YdtNode node = (YdtNode) newChild;
@@ -463,19 +462,19 @@
         if (node.getParent() == null) {
             node.setParent(this);
         } else if (!node.getParent().equals(this)) {
-            errorHandler(errorMsg(E_EXIST), this);
+            throw new YdtException(E_EXIST);
         }
 
         if (node.getFirstChild() != null && isAtomic) {
-            errorHandler(errorMsg(E_ATOMIC), this);
+            throw new YdtException(E_ATOMIC);
         }
 
         if (node.getNextSibling() != null) {
-            errorHandler(errorMsg(E_SIB), this);
+            throw new YdtException(E_SIB);
         }
 
         if (node.getPreviousSibling() != null) {
-            errorHandler(errorMsg(E_PRE), this);
+            throw new YdtException(E_PRE);
         }
 
         // If new node needs to be added as first child.
@@ -507,16 +506,41 @@
     }
 
     /**
-     * Updates ydt map of current context parent node.
+     * Updates ydt maps of current context parent node.
+     *
+     * @param node ydt node for which map need to be updated
+     */
+    void updateYdtMap(YdtNode node) {
+
+        YangSchemaNodeIdentifier id = node.getYangSchemaNode()
+                .getYangSchemaNodeIdentifier();
+        /*
+         * If node to be added is of type multi instance node(list) then multi
+         * instance node to be updated
+         */
+        if (node.getYdtType() == YdtType.MULTI_INSTANCE_NODE) {
+            updateMultiInsMap(id, node);
+        }
+
+        /*
+         * If entry for multi instance node is already there with same id then
+         * existing entry will be overwritten by the new entry.
+         */
+        ydtNodeMap.put(id, node);
+    }
+
+    /**
+     * Updates ydt multi instance map of current context parent node.
      *
      * @param id   object node identifier
      * @param node ydt node for which map need to be updated
      */
-    public void updateYdtMap(YangSchemaNodeIdentifier id, YdtNode node) {
-        List<YdtNode<T>> list = ydtNodeMap.get(id);
+    private void updateMultiInsMap(YangSchemaNodeIdentifier id, YdtNode node) {
+
+        List<YdtNode<YdtMultiInstanceNode>> list = ydtMultiInsMap.get(id);
         if (list == null) {
             list = new ArrayList<>();
-            ydtNodeMap.put(id, list);
+            ydtMultiInsMap.put(id, list);
         }
         list.add(node);
     }
@@ -540,139 +564,45 @@
     }
 
     /**
-     * Validates all multi Instance inside current context.
+     * Validates all multi Instance nodes inside current context.
      */
-    public void validateMultiInstanceNode() {
+    public void validateMultiInstanceNode() throws YdtException {
 
         // Set for checking whether input string is unique or not.
         Set<String> keyStringSet = new HashSet<>();
 
-        // Iterating over values in map and find multi instance node list only.
-        for (List<YdtNode<T>> ydtNodeList : ydtNodeMap.values()) {
-            validateInstances(keyStringSet, ydtNodeList);
-        }
-    }
-
-    /**
-     * Checks for any duplicate list entries.
-     *
-     * @param keyStringSet set to validate the composite key of an instance
-     * @param ydtNodeList  list of entries
-     */
-    private void validateInstances(Set<String> keyStringSet,
-                                   List<YdtNode<T>> ydtNodeList) {
-        // Clearing the set.
-        keyStringSet.clear();
-
-        if (ydtNodeList.get(0) instanceof YdtMultiInstanceNode) {
-
-            // Storing the number of multiInstance node for number
-            // if instance validation.
-            int instanceCount = ydtNodeList.size();
-
-            YangList list = (YangList) ydtNodeList.get(0).getYangSchemaNode();
-            int minElement;
-            int maxElement;
-            if (list.getMinElements() != null) {
-                minElement = list.getMinElements().getMinElement();
-                if (instanceCount < minElement) {
-                    errorHandler(errorMsg(FMT_FEW_INS, list.getName(),
-                                          minElement), this);
-                }
-            }
-
-            if (list.getMaxElements() != null) {
-                maxElement = list.getMaxElements().getMaxElement();
-                if (instanceCount > maxElement) {
-                    errorHandler(errorMsg(FMT_MANY_INS, list.getName(),
-                                          maxElement), this);
-                }
-            }
-
-            if (list.isConfig() && instanceCount > 1) {
-                // Iterating over values in ydtNodeList of
-                // multiInstanceNode and compare the key string.
-                for (YdtNode ydtNode : ydtNodeList) {
-                    if (!keyStringSet.add(((YdtMultiInstanceNode) ydtNode)
-                                                  .getCompositeKey())) {
-                        errorHandler(errorMsg(
-                                FMT_UNI_KEY, ydtNode.getYdtNodeIdentifier()
-                                        .getName()), this);
-                    }
+        if (ydtMultiInsMap.size() != 0) {
+            /*
+             * Iterating over values in map and find multi instance node list
+             * only.
+             */
+            for (List<YdtNode<YdtMultiInstanceNode>> ydtNodeList :
+                    ydtMultiInsMap.values()) {
+                try {
+                    ydtNodeList.get(0).validateInstances(keyStringSet,
+                                                         ydtNodeList);
+                } catch (YdtException e) {
+                    throw new YdtException(e.getLocalizedMessage());
                 }
             }
         }
     }
 
     /**
-     * Walks in whole Ydt Tree and de-reference all the tree node.
-     * This will be called only when any exception occurs while processing
-     * the node in Ydt tree.
+     * Validates the given list of instances by verifying the allowed
+     * instance count and key element uniqueness.
+     * <p>
+     * This default implementation do nothing if requested node is of type
+     * other then multiInstanceNode. Subclasses may override this method
+     * to provide the correct behavior for their specific implementation.
      *
-     * @param node ydt node
+     * @param keyStringSet set to validate the key element uniqueness
+     * @param ydtNodeList  list of instance's of same list
      */
-    public void freeRestResources(YdtNode node) {
-        // Traversing to logical rootNode.
-        YdtNode rootNode = node;
-        while (rootNode.getParent() != null) {
-            rootNode = rootNode.getParent();
-        }
-        YdtNode currentNode = rootNode;
-        while (currentNode != null) {
+    void validateInstances(Set<String> keyStringSet,
+                           List<YdtNode<YdtMultiInstanceNode>>
+                                   ydtNodeList) throws YdtException {
 
-            // Move down to first child
-            YdtNode nextNode = currentNode.getFirstChild();
-            if (nextNode != null) {
-                currentNode = nextNode;
-                continue;
-            }
-
-            // No child nodes, so walk tree
-            while (currentNode != null) {
-                // To keep the track of last sibling.
-                YdtNode lastSibling = currentNode;
-
-                // Move to sibling if possible.
-                nextNode = currentNode.getNextSibling();
-
-                // free currentNode resources
-                free(lastSibling);
-
-                lastSibling.getNamespace();
-                if (nextNode != null) {
-                    currentNode = nextNode;
-                    break;
-                }
-
-                // Move up
-                if (currentNode.equals(rootNode)) {
-                    currentNode = null;
-                } else {
-                    currentNode = currentNode.getParent();
-                    lastSibling.setParent(null);
-                }
-            }
-        }
-    }
-
-    /**
-     * Free the give YDT node by de-referencing it to null.
-     *
-     * @param node node to be freed
-     */
-    private void free(YdtNode node) {
-        if (node.getParent() != null) {
-            YdtNode parent = node.getParent();
-            parent.setChild(null);
-            parent.setLastChild(null);
-            if (node.getNextSibling() != null) {
-                parent.setChild(node.getNextSibling());
-            }
-        }
-        YdtNode parentRef = node.getParent();
-        node = new YdtSingleInstanceNode(null);
-        node.ydtType = null;
-        node.setParent(parentRef);
     }
 
     /**
@@ -691,17 +621,4 @@
         clonedNode.setLastChild(null);
         return clonedNode;
     }
-
-    /**
-     * Handles an error scenario, freeing allocated resources for the given YTD
-     * node before throwing an exception with the specified error message.
-     *
-     * @param error   error message
-     * @param curNode ydt node
-     * @throws YdtException with the specified error message
-     */
-    public void errorHandler(String error, YdtNode curNode) {
-        curNode.freeRestResources(curNode);
-        throw new YdtException(error);
-    }
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNodeFactory.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNodeFactory.java
index 43680da..aa84cea 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNodeFactory.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtNodeFactory.java
@@ -17,17 +17,14 @@
 package org.onosproject.yms.app.ydt;
 
 import org.onosproject.yangutils.datamodel.YangSchemaNode;
-import org.onosproject.yangutils.datamodel.YangSchemaNodeIdentifier;
 import org.onosproject.yangutils.datamodel.YangSchemaNodeType;
+import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yms.app.ydt.exceptions.YdtException;
-import org.onosproject.yms.ydt.YdtContextOperationType;
 
 import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_MULTI_INSTANCE_LEAF_NODE;
 import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_MULTI_INSTANCE_NODE;
 import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_LEAF_NODE;
 import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
-import static org.onosproject.yms.app.ydt.YdtAppNodeOperationType.DELETE_ONLY;
-import static org.onosproject.yms.app.ydt.YdtAppNodeOperationType.OTHER_EDIT;
 import static org.onosproject.yms.app.ydt.YdtConstants.errorMsg;
 
 /**
@@ -36,9 +33,13 @@
  */
 final class YdtNodeFactory {
 
-    // ydt formatted error string
+    // YDT formatted error string
     private static final String FMT_NOT_EXIST =
             "Schema node with name %s doesn't exist.";
+    //TODO need to handle later
+    private static final String E_MULTI_INS =
+            "Requested interface adds an instance of type list or " +
+                    "leaf-list node only.";
 
     // No instantiation
     private YdtNodeFactory() {
@@ -48,64 +49,68 @@
      * Returns a YANG data tree node for a given name, set of values and
      * instance type.
      *
-     * @param id          dataNodeIdentifier of data tree node
-     * @param schemaNode  data node as per YANG schema metadata
+     * @param node        data node as per YANG schema metadata
      * @param cardinality requested cardinality of node
      * @param callType    identify the call type
      * @return YANG data tree node
+     * @throws YdtException when user requested node type doesn't exist
      */
-    protected static YdtNode getNode(YangSchemaNodeIdentifier id,
-                                     YangSchemaNode schemaNode,
-                                     RequestedCardinality cardinality,
-                                     RequestedCallType callType) {
+    static YdtNode getNode(
+            YangSchemaNode node, RequestedCardinality cardinality,
+            RequestedCallType callType) throws YdtException {
 
-        YdtNode newNode = null;
-        YangSchemaNodeType nodeType = schemaNode.getYangSchemaNodeType();
+        YdtNode newNode;
+        YangSchemaNodeType type = node.getYangSchemaNodeType();
 
-        switch (cardinality) {
+        try {
+            switch (cardinality) {
 
-            case UNKNOWN:
+                case UNKNOWN:
+                    /*
+                     * if requested node type is UNKNOWN, check corresponding
+                     * yang data node type and create respective type node.
+                     */
+                    newNode = getYangSchemaNodeTypeSpecificContext(node, type,
+                                                                   callType);
+                    break;
+
                 /*
-                 * if requested node type is UNKNOWN, check corresponding
-                 * yang data node type and create respective type node.
+                 * if requested node type is specified and it exist as node of
+                 * some other type in data model then throw exception
                  */
-                newNode = getYangSchemaNodeTypeSpecificContext(id, nodeType,
-                                                               callType);
-                break;
+                case SINGLE_INSTANCE:
+                    validateNodeType(node, type, YANG_SINGLE_INSTANCE_NODE);
+                    newNode = new YdtSingleInstanceNode(node);
+                    break;
 
-            /*
-             * if requested node type is specified and it exist as node of some
-             * other type in data model then throw exception
-             */
-            case SINGLE_INSTANCE:
-                validateNodeType(id, nodeType, YANG_SINGLE_INSTANCE_NODE);
-                newNode = new YdtSingleInstanceNode(id);
-                break;
+                case MULTI_INSTANCE:
 
-            case MULTI_INSTANCE:
+                    validateNodeType(node, type, YANG_MULTI_INSTANCE_NODE);
+                    newNode = new YdtMultiInstanceNode(node);
+                    break;
 
-                validateNodeType(id, nodeType, YANG_MULTI_INSTANCE_NODE);
-                newNode = new YdtMultiInstanceNode(id);
-                break;
+                case SINGLE_INSTANCE_LEAF:
 
-            case SINGLE_INSTANCE_LEAF:
+                    validateNodeType(node, type, YANG_SINGLE_INSTANCE_LEAF_NODE);
+                    newNode = new YdtSingleInstanceLeafNode(node);
+                    break;
 
-                validateNodeType(id, nodeType, YANG_SINGLE_INSTANCE_LEAF_NODE);
-                newNode = new YdtSingleInstanceLeafNode(id);
-                break;
+                case MULTI_INSTANCE_LEAF:
 
-            case MULTI_INSTANCE_LEAF:
+                    validateNodeType(node, type, YANG_MULTI_INSTANCE_LEAF_NODE);
+                    newNode = new YdtMultiInstanceLeafNode(node);
+                    break;
 
-                validateNodeType(id, nodeType, YANG_MULTI_INSTANCE_LEAF_NODE);
-                newNode = new YdtMultiInstanceLeafNode(id);
-                break;
-
-            default:
-                throwNotExistError(id);
+                default:
+                    newNode = null;
+            }
+        } catch (DataModelException | YdtException e) {
+            throw new YdtException(e.getLocalizedMessage());
         }
 
-        // set reference of yang data node in the requested node.
-        newNode.setYangSchemaNode(schemaNode);
+        if (newNode == null) {
+            throw new YdtException(errorMsg(FMT_NOT_EXIST, node.getName()));
+        }
 
         return newNode;
     }
@@ -114,15 +119,17 @@
      * Validates the requested ydt node type against the schema node type,
      * if it is not equal then it will throw warning.
      *
-     * @param id            dataNodeIdentifier of data tree node
+     * @param node          schema node
      * @param nodeType      actual node type
      * @param requestedType user requested node type
+     * @throws YdtException when user requested node type doesn't exist
      */
-    private static void validateNodeType(YangSchemaNodeIdentifier id,
-                                         YangSchemaNodeType nodeType,
-                                         YangSchemaNodeType requestedType) {
+    private static void validateNodeType(
+            YangSchemaNode node, YangSchemaNodeType nodeType,
+            YangSchemaNodeType requestedType) throws YdtException {
+
         if (nodeType != requestedType) {
-            throwNotExistError(id);
+            throw new YdtException(errorMsg(FMT_NOT_EXIST, node.getName()));
         }
     }
 
@@ -130,127 +137,87 @@
      * Creates Yang data tree node of YangSchemaNode type specific for
      * requestedCardinality of type UNKNOWN and returns the same.
      *
-     * @param id       node identifier of data tree node
+     * @param node     schema node
      * @param nodeType schema node type as per YANG schema metadata
      * @param callType identify the call type
      * @return YANG data tree node
+     * @throws YdtException when user requested node type doesn't exist
      */
     private static YdtNode getYangSchemaNodeTypeSpecificContext(
-            YangSchemaNodeIdentifier id,
-            YangSchemaNodeType nodeType,
-            RequestedCallType callType) {
+            YangSchemaNode node, YangSchemaNodeType nodeType,
+            RequestedCallType callType) throws YdtException, DataModelException {
         switch (callType) {
             case LEAF:
                 switch (nodeType) {
 
                     case YANG_SINGLE_INSTANCE_LEAF_NODE:
-                        return new YdtSingleInstanceLeafNode(id);
+                        return new YdtSingleInstanceLeafNode(node);
 
                     case YANG_MULTI_INSTANCE_LEAF_NODE:
-                        return new YdtMultiInstanceLeafNode(id);
+                        return new YdtMultiInstanceLeafNode(node);
 
                     default:
-                        throwNotExistError(id);
+                        return null;
                 }
 
-            case OTHER:
+            case NON_LEAF:
                 switch (nodeType) {
 
                     case YANG_SINGLE_INSTANCE_NODE:
-                        return new YdtSingleInstanceNode(id);
+                        return new YdtSingleInstanceNode(node);
 
                     case YANG_MULTI_INSTANCE_NODE:
-                        return new YdtMultiInstanceNode(id);
+                        return new YdtMultiInstanceNode(node);
 
                     default:
-                        throwNotExistError(id);
+                        return null;
                 }
 
             case MULTI_INSTANCE:
                 switch (nodeType) {
 
                     case YANG_MULTI_INSTANCE_LEAF_NODE:
-                        return new YdtMultiInstanceLeafNode(id);
+                        return new YdtMultiInstanceLeafNode(node);
 
                     case YANG_MULTI_INSTANCE_NODE:
-                        return new YdtMultiInstanceNode(id);
+                        return new YdtMultiInstanceNode(node);
 
                     default:
-                        throwNotExistError(id);
+                        throw new YdtException(E_MULTI_INS);
                 }
 
             default:
-                throwNotExistError(id);
+                return null;
         }
-
-        return null;
     }
 
     /**
      * Create Yang data tree node of YangSchemaNode type specific and
      * returns the same.
      *
-     * @param id       node identifier of data tree node
-     * @param nodeType schema node type as per YANG schema metadata
+     * @param node schema node
      * @return YANG data tree node
+     * @throws YdtException when user requested node type doesn't exist
      */
-    protected static YdtNode getYangSchemaNodeTypeSpecificContext(
-            YangSchemaNodeIdentifier id,
-            YangSchemaNodeType nodeType) {
+    static YdtNode getYangSchemaNodeTypeSpecificContext(YangSchemaNode node)
+            throws YdtException {
 
-        switch (nodeType) {
+        switch (node.getYangSchemaNodeType()) {
 
             case YANG_SINGLE_INSTANCE_LEAF_NODE:
-                return new YdtSingleInstanceLeafNode(id);
+                return new YdtSingleInstanceLeafNode(node);
 
             case YANG_MULTI_INSTANCE_LEAF_NODE:
-                return new YdtMultiInstanceLeafNode(id);
+                return new YdtMultiInstanceLeafNode(node);
 
             case YANG_SINGLE_INSTANCE_NODE:
-                return new YdtSingleInstanceNode(id);
+                return new YdtSingleInstanceNode(node);
 
             case YANG_MULTI_INSTANCE_NODE:
-                return new YdtMultiInstanceNode(id);
+                return new YdtMultiInstanceNode(node);
 
             default:
-                throwNotExistError(id);
+                throw new YdtException(errorMsg(FMT_NOT_EXIST, node.getName()));
         }
-
-        return null;
-    }
-
-    /**
-     * Returns the app tree operation type with the help of YdtOperation type.
-     *
-     * @param opType ydt operation type
-     * @return app tree operation type
-     */
-    protected static YdtAppNodeOperationType getAppOpTypeFromYdtOpType(
-            YdtContextOperationType opType) {
-        // Get the app tree operation type.
-        switch (opType) {
-            case CREATE:
-            case MERGE:
-            case REPLACE:
-                return OTHER_EDIT;
-
-            case DELETE:
-            case REMOVE:
-                return DELETE_ONLY;
-
-            default:
-                return null;
-            //TODO handle the default data type.
-        }
-    }
-
-    /**
-     * Throws exception for requested ydt node by preparing error message with
-     * given node identifier.
-     *
-     * @param id node identifier
-     */
-    private static void throwNotExistError(YangSchemaNodeIdentifier id) {
-        throw new YdtException(errorMsg(FMT_NOT_EXIST, id.getName()));
     }
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtSingleInstanceLeafNode.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtSingleInstanceLeafNode.java
index 0bd7036..44de72e 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtSingleInstanceLeafNode.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtSingleInstanceLeafNode.java
@@ -16,7 +16,8 @@
 
 package org.onosproject.yms.app.ydt;
 
-import org.onosproject.yangutils.datamodel.YangSchemaNodeIdentifier;
+import org.onosproject.yangutils.datamodel.YangSchemaNode;
+import org.onosproject.yms.app.ydt.exceptions.YdtException;
 
 import static org.onosproject.yms.app.ydt.YdtConstants.FMT_DUP_ENTRY;
 import static org.onosproject.yms.app.ydt.YdtConstants.errorMsg;
@@ -33,13 +34,27 @@
      */
     private String value;
 
+    /*
+     * Value of the leaf.
+     */
+    private Boolean isKeyLeaf = false;
+
     /**
      * Creates a YANG single instance leaf node.
      *
-     * @param id node identifier of YDT single instance leaf node
+     * @param node schema of YDT single instance leaf node
      */
-    protected YdtSingleInstanceLeafNode(YangSchemaNodeIdentifier id) {
-        super(SINGLE_INSTANCE_LEAF_VALUE_NODE, id);
+    YdtSingleInstanceLeafNode(YangSchemaNode node) {
+        super(SINGLE_INSTANCE_LEAF_VALUE_NODE, node);
+    }
+
+    /**
+     * Returns the flag indicating that requested leaf is key-leaf or not.
+     *
+     * @return isKeyLeaf true, for key leaf; false non key leaf
+     */
+    public Boolean isKeyLeaf() {
+        return isKeyLeaf;
     }
 
     @Override
@@ -48,13 +63,14 @@
     }
 
     @Override
-    public void addValue(String value) {
+    public void addValue(String value) throws YdtException {
         // Check the value against corresponding data-type.
-        try {
-            getYangSchemaNode().isValueValid(value);
-        } catch (Exception e) {
-            errorHandler(e.getLocalizedMessage(), this);
-        }
+        //TODO validation need to be decided
+//        try {
+//            getYangSchemaNode().isValueValid(value);
+//        } catch (Exception e) {
+//            throw new YdtException(e.getLocalizedMessage());
+//        }
 
         // After validation is successful then add value to node.
         this.value = value;
@@ -62,13 +78,13 @@
 
 
     @Override
-    public void addValueWithoutValidation(String value) {
+    public void addValueWithoutValidation(String value, boolean isKeyLeaf) {
         this.value = value;
+        this.isKeyLeaf = isKeyLeaf;
     }
 
     @Override
-    public void validDuplicateEntryProcessing() {
-        errorHandler(errorMsg(FMT_DUP_ENTRY, getYdtNodeIdentifier().getName()),
-                     this);
+    public void validDuplicateEntryProcessing() throws YdtException {
+        throw new YdtException(errorMsg(FMT_DUP_ENTRY, getName()));
     }
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtSingleInstanceNode.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtSingleInstanceNode.java
index b7f84b5..c8e66e6 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtSingleInstanceNode.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtSingleInstanceNode.java
@@ -16,7 +16,8 @@
 
 package org.onosproject.yms.app.ydt;
 
-import org.onosproject.yangutils.datamodel.YangSchemaNodeIdentifier;
+import org.onosproject.yangutils.datamodel.YangSchemaNode;
+import org.onosproject.yms.app.ydt.exceptions.YdtException;
 
 import static org.onosproject.yms.app.ydt.YdtConstants.FMT_DUP_ENTRY;
 import static org.onosproject.yms.app.ydt.YdtConstants.errorMsg;
@@ -30,15 +31,14 @@
     /**
      * Creates a YANG single instance node object.
      *
-     * @param id node identifier of YDT single instance node
+     * @param node schema of YDT single instance node
      */
-    protected YdtSingleInstanceNode(YangSchemaNodeIdentifier id) {
-        super(SINGLE_INSTANCE_NODE, id);
+    YdtSingleInstanceNode(YangSchemaNode node) {
+        super(SINGLE_INSTANCE_NODE, node);
     }
 
     @Override
-    public void validDuplicateEntryProcessing() {
-        errorHandler(errorMsg(FMT_DUP_ENTRY, getYdtNodeIdentifier().getName()),
-                     this);
+    public void validDuplicateEntryProcessing() throws YdtException {
+        throw new YdtException(errorMsg(FMT_DUP_ENTRY, getName()));
     }
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtUtils.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtUtils.java
new file mode 100644
index 0000000..a9f15f2
--- /dev/null
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YdtUtils.java
@@ -0,0 +1,303 @@
+/*
+ * 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.onosproject.yangutils.datamodel.YangAugment;
+import org.onosproject.yangutils.datamodel.YangSchemaNode;
+import org.onosproject.yangutils.datamodel.YangSchemaNodeContextInfo;
+import org.onosproject.yangutils.datamodel.YangSchemaNodeIdentifier;
+import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
+import org.onosproject.yms.app.ydt.exceptions.YdtException;
+import org.onosproject.yms.ydt.YdtContextOperationType;
+
+import static org.onosproject.yms.app.ydt.YdtAppNodeOperationType.DELETE_ONLY;
+import static org.onosproject.yms.app.ydt.YdtAppNodeOperationType.OTHER_EDIT;
+import static org.onosproject.yms.app.ydt.YdtConstants.errorMsg;
+import static org.onosproject.yms.ydt.YdtContextOperationType.CREATE;
+import static org.onosproject.yms.ydt.YdtContextOperationType.DELETE;
+import static org.onosproject.yms.ydt.YdtContextOperationType.MERGE;
+
+/**
+ * Utils to support yang data tree node creation.
+ */
+final class YdtUtils {
+
+    // YDT formatted error string
+    private static final String E_CREATE_OP =
+            "Create request is not allowed under delete operation.";
+    private static final String E_DELETE_OP =
+            "Delete request is not allowed under create operation.";
+    private static final String FMT_TOO_FEW =
+            "Too few key parameters in %s. Expected %d; actual %d.";
+    private static final String FMT_TOO_MANY =
+            "Too many key parameters in %s. Expected %d; actual %d.";
+
+    //No instantiation.
+    private YdtUtils() {
+    }
+
+    /**
+     * Returns the app tree operation type with the help of YdtOperation type.
+     *
+     * @param opType ydt operation type
+     * @return app tree operation type
+     */
+    static YdtAppNodeOperationType getAppOpTypeFromYdtOpType(
+            YdtContextOperationType opType) {
+        // Get the app tree operation type.
+        switch (opType) {
+            case CREATE:
+            case MERGE:
+            case REPLACE:
+                return OTHER_EDIT;
+
+            case DELETE:
+            case REMOVE:
+                return DELETE_ONLY;
+
+            default:
+                return null;
+            //TODO handle the default data type.
+        }
+    }
+
+    /**
+     * Validates the various combination of operation type.
+     *
+     * @param parentOpType Reference for parent node operation type
+     * @param childOpType  type of YANG data tree node operation
+     * @throws YdtException when user requested node operation type is
+     *                      not valid as per parent node operation type
+     */
+    private static void validateOperationType(YdtContextOperationType parentOpType,
+                                              YdtContextOperationType childOpType)
+            throws YdtException {
+
+        switch (parentOpType) {
+            case CREATE:
+                // Inside the create operation delete operation should not come.
+                if (childOpType == DELETE) {
+                    throw new YdtException(E_CREATE_OP);
+                }
+                break;
+            case DELETE:
+                // Inside the delete operation create operation should not come.
+                if (childOpType == CREATE) {
+                    throw new YdtException(E_DELETE_OP);
+                }
+                break;
+            default:
+                //TODO check all possible scenario.
+        }
+    }
+
+    /**
+     * Returns the operation type for non leaf node.
+     * When "operation" attribute for current node is not specified or null,
+     * then the operation applied to the parent data node of the
+     * configuration is used. If no parent data node is available,
+     * then the default-operation'value is used.
+     * If default operation type is not set, merge will be taken as default
+     * operation type.
+     *
+     * @param type    operation type of parent node
+     * @param defType YDT default operation type
+     * @return operation type for current non leaf node
+     */
+    private static YdtContextOperationType getOperationType(
+            YdtContextOperationType type, YdtContextOperationType defType) {
+        return type != null ? type : (defType != null ? defType : MERGE);
+    }
+
+    /**
+     * Returns the yang node identifier with requested name and namespace.
+     *
+     * @param name      name of the node
+     * @param namespace namespace of the node
+     * @return yang node identifier
+     */
+    static YangSchemaNodeIdentifier getNodeIdentifier(String name,
+                                                      String namespace) {
+        YangSchemaNodeIdentifier id = new YangSchemaNodeIdentifier();
+        id.setName(name);
+        id.setNameSpace(new NameSpace(namespace));
+        return id;
+    }
+
+    /**
+     * Checks the user supplied list of argument match's the expected value
+     * or not.
+     *
+     * @param name     name of the parent list/leaf-list node
+     * @param expected count suppose to be
+     * @param actual   user supplied values count
+     * @throws YdtException when user requested multi instance node instance's
+     *                      count doesn't fit into the allowed instance limit
+     */
+    static void checkElementCount(String name, int expected,
+                                  int actual) throws YdtException {
+        if (expected < actual) {
+            throw new YdtException(
+                    errorMsg(FMT_TOO_MANY, name, expected, actual));
+        } else if (expected > actual) {
+            throw new YdtException(
+                    errorMsg(FMT_TOO_FEW, name, expected, actual));
+        }
+    }
+
+    /**
+     * Returns the valid operation type for requested ydt node after performing
+     * validation.
+     *
+     * @param opType     user requested operation type
+     * @param newNode    new requested ydt node
+     * @param parentNode parent node under which new node to be added
+     * @return operation type
+     * @throws YdtException when user requested node operation type is
+     *                      not valid as per parent node operation type
+     */
+    static YdtContextOperationType getValidOpType(
+            YdtContextOperationType opType, YdtContextOperationType defOpType,
+            YdtNode newNode, YdtNode parentNode)
+            throws YdtException {
+
+        switch (newNode.getYdtType()) {
+
+            case SINGLE_INSTANCE_NODE:
+            case MULTI_INSTANCE_NODE:
+
+                // Reference for parent node operation type.
+                YdtContextOperationType parentOpType =
+                        parentNode.getYdtContextOperationType();
+
+                if (opType == null) {
+                    opType = getOperationType(parentOpType, defOpType);
+                } else if (parentOpType != null) {
+                    validateOperationType(parentOpType, opType);
+                }
+
+                return opType;
+
+            /*
+             * Nodes other then single/multi instance node does not support
+             * operation type so no need of validation for those.
+             */
+            default:
+                return null;
+        }
+    }
+
+    /**
+     * Returns augmenting node module yang schema node.
+     *
+     * @param id          schema node identifier
+     * @param contextInfo Yang Schema node context info
+     *                    which is having YangSchemaNode and
+     *                    ContextSwitchedNode
+     * @return augmenting node module yang schema node
+     * @throws YdtException when user requested node schema doesn't exist
+     */
+    public static YangSchemaNode getAugmentingSchemaNode(
+            YangSchemaNodeIdentifier id,
+            YangSchemaNodeContextInfo contextInfo) throws YdtException {
+        YangSchemaNode lastAugMod = null;
+        YangSchemaNode switchedNode =
+                contextInfo.getContextSwitchedNode();
+
+        // Finding the last augmenting schema for case/choice scenario.
+        while (switchedNode != null) {
+            if (switchedNode instanceof YangAugment) {
+                lastAugMod = switchedNode;
+            }
+            try {
+                switchedNode = switchedNode.getChildSchema(id)
+                        .getContextSwitchedNode();
+            } catch (DataModelException e) {
+                throw new YdtException(e.getMessage());
+            }
+        }
+        return lastAugMod;
+    }
+
+    /**
+     * De-reference all the tree node by walking the whole YDT from logical
+     * root node.
+     * This will be called only when any exception occurs while processing
+     * the node in Ydt tree.
+     *
+     * @param rootNode ydt logical root node
+     */
+    public static void freeRestResources(YdtNode rootNode) {
+
+        YdtNode currentNode = rootNode;
+        while (currentNode != null) {
+
+            // Move down to first child
+            YdtNode nextNode = currentNode.getFirstChild();
+            if (nextNode != null) {
+                currentNode = nextNode;
+                continue;
+            }
+
+            // No child nodes, so walk tree
+            while (currentNode != null) {
+                // To keep the track of last sibling.
+                YdtNode lastSibling = currentNode;
+
+                // Move to sibling if possible.
+                nextNode = currentNode.getNextSibling();
+
+                // free currentNode resources
+                free(lastSibling);
+
+                lastSibling.getNamespace();
+                if (nextNode != null) {
+                    currentNode = nextNode;
+                    break;
+                }
+
+                // Move up
+                if (currentNode.equals(rootNode)) {
+                    currentNode = null;
+                } else {
+                    currentNode = currentNode.getParent();
+                    lastSibling.setParent(null);
+                }
+            }
+        }
+    }
+
+    /**
+     * Free the give YDT node by de-referencing it to null.
+     *
+     * @param node node to be freed
+     */
+    private static void free(YdtNode node) {
+        if (node.getParent() != null) {
+            YdtNode parent = node.getParent();
+            parent.setChild(null);
+            parent.setLastChild(null);
+            if (node.getNextSibling() != null) {
+                parent.setChild(node.getNextSibling());
+            }
+        }
+        YdtNode parentRef = node.getParent();
+        node = new YdtLogicalNode(null, null);
+        node.setParent(parentRef);
+    }
+}
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/exceptions/YdtException.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/exceptions/YdtException.java
index db21976..852ffd5 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/exceptions/YdtException.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/exceptions/YdtException.java
@@ -50,16 +50,4 @@
     public YdtException(Throwable cause) {
         super(cause);
     }
-
-    /**
-     * Creates a new YDT exception from given parameters.
-     *
-     * @param keyword identify error scenario whether it is many or few
-     * @param name    name of the node
-     * @param count   supported count value
-     */
-    public YdtException(String keyword, String name, int count) {
-        super("Too " + keyword + " key parameter in " + name + ". Expected " +
-                      "count " + count + ".");
-    }
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ymsm/YmsManager.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ymsm/YmsManager.java
index 475a67e..228dd02 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ymsm/YmsManager.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ymsm/YmsManager.java
@@ -33,6 +33,7 @@
 import org.onosproject.yms.app.ydt.YangRequestWorkBench;
 import org.onosproject.yms.app.ynh.YangNotificationExtendedService;
 import org.onosproject.yms.app.ynh.YangNotificationManager;
+import org.onosproject.yms.app.ysr.DefaultYangModuleLibrary;
 import org.onosproject.yms.app.ysr.DefaultYangSchemaRegistry;
 import org.onosproject.yms.app.ysr.YangSchemaRegistry;
 import org.onosproject.yms.ych.YangCodecHandler;
@@ -51,9 +52,11 @@
 
 import java.util.List;
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 
+import static java.lang.String.valueOf;
+import static java.util.concurrent.Executors.newSingleThreadExecutor;
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.yms.app.ych.defaultcodecs.YangCodecRegistry.initializeDefaultCodec;
 
 /**
  * Represents implementation of YANG management system manager.
@@ -72,8 +75,9 @@
     //module id generator should be used to generate a new module id for
     //each YSR instance. So YCH also should generate it.
     private IdGenerator moduleIdGenerator;
-    private ExecutorService schemaRegistryExecutor;
+    private ExecutorService executor;
     private YangNotificationExtendedService ynhExtendedService;
+    private YangModuleLibrary library;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected CoreService coreService;
@@ -82,23 +86,22 @@
     public void activate() {
         appId = coreService.registerApplication(APP_ID);
         moduleIdGenerator = coreService.getIdGenerator(MODULE_ID);
-        schemaRegistry = new DefaultYangSchemaRegistry(String.valueOf(
-                moduleIdGenerator.getNewId()));
-        schemaRegistryExecutor =
-                Executors.newSingleThreadExecutor(groupedThreads(
-                        "onos/apps/yang-management-system/schema-registry",
-                        "schema-registry-handler", log));
+        schemaRegistry = new DefaultYangSchemaRegistry();
+        library = new DefaultYangModuleLibrary(getNewModuleId());
+        executor = newSingleThreadExecutor(groupedThreads(
+                "onos/apps/yang-management-system/schema-registry",
+                "schema-registry-handler", log));
         ynhExtendedService = new YangNotificationManager(schemaRegistry);
-        //Initilize the default codecs
-        YangCodecRegistry.initializeDefaultCodec();
+        //Initialize the default codec
+        initializeDefaultCodec();
 
         log.info("Started");
     }
 
     @Deactivate
     public void deactivate() {
-        ((DefaultYangSchemaRegistry) schemaRegistry).flushYsrData();
-        schemaRegistryExecutor.shutdown();
+        schemaRegistry.flushYsrData();
+        executor.shutdown();
 
         // TODO implementation for other components.
         log.info("Stopped");
@@ -107,25 +110,23 @@
     @Override
     public YdtBuilder getYdtBuilder(String logicalRootName,
                                     String rootNamespace,
-                                    YmsOperationType operationType) {
+                                    YmsOperationType opType) {
         return new YangRequestWorkBench(logicalRootName, rootNamespace,
-                                        operationType, schemaRegistry, true);
+                                        opType, schemaRegistry, true);
     }
 
     @Override
     public YdtBuilder getYdtBuilder(String logicalRootName,
                                     String rootNamespace,
-                                    YmsOperationType operationType,
+                                    YmsOperationType opType,
                                     Object schemaRegistryForYdt) {
         if (schemaRegistryForYdt != null) {
-            return new YangRequestWorkBench(logicalRootName, rootNamespace,
-                                            operationType,
-                                            (YangSchemaRegistry)
-                                                    schemaRegistryForYdt,
-                                            false);
+            return new YangRequestWorkBench(
+                    logicalRootName, rootNamespace, opType,
+                    (YangSchemaRegistry) schemaRegistryForYdt, false);
         }
         return new YangRequestWorkBench(logicalRootName, rootNamespace,
-                                        operationType, schemaRegistry, true);
+                                        opType, schemaRegistry, true);
     }
 
     @Override
@@ -163,13 +164,13 @@
 
     @Override
     public YangModuleLibrary getYangModuleLibrary() {
-        return ((DefaultYangSchemaRegistry) schemaRegistry).getLibrary();
+        //TODO: get for YCH should be handled.
+        return library;
     }
 
     @Override
     public String getYangFile(YangModuleIdentifier moduleIdentifier) {
-        return ((DefaultYangSchemaRegistry) schemaRegistry)
-                .getYangFile(moduleIdentifier);
+        return schemaRegistry.getYangFile(moduleIdentifier);
     }
 
     @Override
@@ -181,9 +182,14 @@
     @Override
     public void registerService(Object manager, Class<?> service,
                                 List<String> features) {
-        schemaRegistryExecutor.execute(() -> {
+        //perform registration of service
+        executor.execute(() -> {
+
             schemaRegistry.registerApplication(manager, service);
-            processNotificationRegistration(service, manager);
+            //process notification registration.
+            processNotificationRegistration(manager, service);
+
+            schemaRegistry.processModuleLibrary(service.getName(), library);
         });
         // TODO implementation based on supported features.
     }
@@ -191,15 +197,15 @@
     /**
      * Process notification registration for manager class object.
      *
-     * @param service yang service
      * @param manager yang manager
+     * @param service service class
      */
-    private void processNotificationRegistration(Class<?> service,
-                                                 Object manager) {
-        if (manager != null && manager instanceof ListenerService) {
-            if (((DefaultYangSchemaRegistry) schemaRegistry)
-                    .verifyNotificationObject(service)) {
-                ynhExtendedService.registerAsListener((ListenerService) manager);
+    private void processNotificationRegistration(Object manager, Class<?> service) {
+        synchronized (service) {
+            if (manager != null && manager instanceof ListenerService) {
+                if (schemaRegistry.verifyNotificationObject(manager, service)) {
+                    ynhExtendedService.registerAsListener((ListenerService) manager);
+                }
             }
         }
     }
@@ -211,11 +217,10 @@
 
     @Override
     public YangCodecHandler getYangCodecHandler() {
-
-        YangSchemaRegistry yangSchemaRegistry =
-                new DefaultYangSchemaRegistry(
-                        String.valueOf(moduleIdGenerator.getNewId()));
-        return new DefaultYangCodecHandler(yangSchemaRegistry);
+        YangSchemaRegistry registry = new DefaultYangSchemaRegistry();
+        DefaultYangCodecHandler handler = new DefaultYangCodecHandler(registry);
+        handler.setLibrary(new DefaultYangModuleLibrary(getNewModuleId()));
+        return handler;
     }
 
     /**
@@ -226,4 +231,13 @@
     public YangSchemaRegistry getSchemaRegistry() {
         return schemaRegistry;
     }
+
+    /**
+     * Returns new generated module id.
+     *
+     * @return new module id
+     */
+    private String getNewModuleId() {
+        return valueOf(moduleIdGenerator.getNewId());
+    }
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ynh/YangNotificationManager.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ynh/YangNotificationManager.java
index 59da18c..a6d9f83 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ynh/YangNotificationManager.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ynh/YangNotificationManager.java
@@ -43,10 +43,22 @@
         implements YangNotificationExtendedService {
 
     private static final String YANG_NOTIFICATION = "yangnotification";
+
     private final Logger log = LoggerFactory.getLogger(getClass());
-    private final ExecutorService executor;
-    private final YnhAbstractListener listener;
-    private final YangSchemaRegistry schemaRegistry;
+
+    private ExecutorService executor;
+
+    /**
+     * YANG notification abstract listener. This listener will listens
+     * abstractly to all the notification from the application to which it
+     * has subscribed.
+     */
+    private YnhAbstractListener listener;
+
+    /**
+     * Maintains schema registry.
+     */
+    private YangSchemaRegistry schemaRegistry;
 
     /**
      * Creates an instance of YANG notification manager.
@@ -55,8 +67,8 @@
      */
     public YangNotificationManager(YangSchemaRegistry registry) {
         listener = new YnhAbstractListener();
-        executor = Executors.newSingleThreadExecutor(
-                groupedThreads("onos/yms", "event-handler-%d", log));
+        executor = Executors.newSingleThreadExecutor(groupedThreads(
+                "onos/yms", "event-handler-%d", log));
         schemaRegistry = registry;
     }
 
@@ -78,10 +90,12 @@
      */
     private class YnhAbstractListener<E extends Event> implements
             EventListener<E> {
+
         @Override
         public void event(Event event) {
             executor.execute(() -> {
                 try {
+                    log.info("Event received in ynh " + event.type());
                     /*
                      * Obtain YANG data tree corresponding to notification with
                      * logical root node as yangnotification, followed by
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/yob/YobUtils.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/yob/YobUtils.java
index d72edc1..c8256c9 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/yob/YobUtils.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/yob/YobUtils.java
@@ -295,8 +295,8 @@
 
             }
 
-            Class<?> regClass = registry.getRegisteredClass(curSchemaNode,
-                                                            qualifiedClassName);
+            Class<?> regClass = registry.getRegisteredClass(curSchemaNode
+            );
             return regClass.getClassLoader();
 
         }
@@ -328,8 +328,7 @@
                     ((YangNode) augmentSchemaNode).getParent();
 
             Class<?> moduleClass = registry.getRegisteredClass(
-                    moduleNode, getCapitalCase(
-                            moduleNode.getJavaClassNameOrBuiltInType()));
+                    moduleNode);
             return moduleClass.getClassLoader();
         }
 
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangModuleIdentifier.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangModuleIdentifier.java
index e98e982..8f0af27 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangModuleIdentifier.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangModuleIdentifier.java
@@ -26,7 +26,7 @@
 /**
  * Representation of default YANG module identifier.
  */
-class DefaultYangModuleIdentifier implements YangModuleIdentifier,
+public class DefaultYangModuleIdentifier implements YangModuleIdentifier,
         Comparator<YangModuleIdentifier> {
 
     private final String moduleName;
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangModuleInformation.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangModuleInformation.java
index 79778f7..3fc656f 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangModuleInformation.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangModuleInformation.java
@@ -17,6 +17,7 @@
 package org.onosproject.yms.app.ysr;
 
 import com.google.common.collect.ImmutableList;
+import org.onosproject.yangutils.datamodel.YangNamespace;
 import org.onosproject.yms.ysr.YangModuleIdentifier;
 import org.onosproject.yms.ysr.YangModuleInformation;
 
@@ -32,7 +33,7 @@
 class DefaultYangModuleInformation implements YangModuleInformation {
 
     private final YangModuleIdentifier moduleIdentifier;
-    private final String nameSpace;
+    private final YangNamespace nameSpace;
     private final List<String> features;
     private final List<YangModuleIdentifier> subModuleIdentifiers;
 
@@ -43,7 +44,7 @@
      * @param nameSpace        name space of module
      */
     DefaultYangModuleInformation(YangModuleIdentifier moduleIdentifier,
-                                 String nameSpace) {
+                                 YangNamespace nameSpace) {
         this.moduleIdentifier = moduleIdentifier;
         this.nameSpace = nameSpace;
         subModuleIdentifiers = new ArrayList<>();
@@ -55,8 +56,7 @@
         return moduleIdentifier;
     }
 
-    @Override
-    public String namespace() {
+    public YangNamespace namespace() {
         return nameSpace;
     }
 
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangModuleLibrary.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangModuleLibrary.java
index 4187746..5cb991b 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangModuleLibrary.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangModuleLibrary.java
@@ -29,7 +29,7 @@
 /**
  * Representation of default YANG module library.
  */
-class DefaultYangModuleLibrary implements YangModuleLibrary {
+public class DefaultYangModuleLibrary implements YangModuleLibrary {
 
     private final String moduleSetId;
     private final List<YangModuleInformation> moduleInformation;
@@ -39,7 +39,7 @@
      *
      * @param moduleSetId module id
      */
-    DefaultYangModuleLibrary(String moduleSetId) {
+    public DefaultYangModuleLibrary(String moduleSetId) {
         this.moduleSetId = moduleSetId;
         moduleInformation = new ArrayList<>();
     }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangSchemaRegistry.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangSchemaRegistry.java
index ce123e1..58d772c 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangSchemaRegistry.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangSchemaRegistry.java
@@ -16,7 +16,6 @@
 
 package org.onosproject.yms.app.ysr;
 
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
 import org.onosproject.yangutils.datamodel.YangInclude;
 import org.onosproject.yangutils.datamodel.YangModule;
 import org.onosproject.yangutils.datamodel.YangNode;
@@ -26,34 +25,33 @@
 import org.onosproject.yms.ysr.YangModuleIdentifier;
 import org.onosproject.yms.ysr.YangModuleInformation;
 import org.onosproject.yms.ysr.YangModuleLibrary;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.ObjectInputStream;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Set;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.regex.Pattern;
 
+import static java.util.Collections.sort;
 import static org.apache.commons.io.FileUtils.deleteDirectory;
 import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.parseJarFile;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
 import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.HYPHEN;
 import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
 import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
+import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
+import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
 import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
 import static org.osgi.framework.FrameworkUtil.getBundle;
+import static org.slf4j.LoggerFactory.getLogger;
 
 
 /**
@@ -61,111 +59,344 @@
  * provides interface to an application to register its YANG schema
  * with YMS. It provides YANG schema nodes to YDT, YNB and YSB.
  */
-public class DefaultYangSchemaRegistry
-        implements YangSchemaRegistry {
+public class DefaultYangSchemaRegistry implements YangSchemaRegistry {
 
-    private static final String SYSTEM = File.separator + "system" +
-            File.separator;
+    private static final String SYSTEM = SLASH + "system" + SLASH;
     private static final String MAVEN = "mvn:";
-    private static final String HYPHEN = "-";
-    private static final String DELIMITER = ".";
-    private static final String SERVICE = "Service";
     private static final String JAR = ".jar";
     private static final String USER_DIRECTORY = "user.dir";
-    private static final String SLASH = File.separator;
     private static final String AT = "@";
     private static final String DATE_FORMAT = "yyyy-mm-dd";
-    private static final Logger log =
-            LoggerFactory.getLogger(DefaultYangSchemaRegistry.class);
-    private final ConcurrentMap<String, YsrAppContext> appObjectStore;
-    private final ConcurrentMap<String, YsrAppContext> yangSchemaStore;
-    private final ConcurrentMap<String, YsrAppContext>
-            yangSchemaStoreForRootInterface;
-    private final ConcurrentMap<String, YsrAppContext>
-            yangSchemaStoreForRootOpParam;
-    private final ConcurrentMap<String, YsrAppContext>
-            yangRootSchemaStoreForNotification;
+    private static final String ONOS = "org.onosproject";
+    private static final Logger log = getLogger(DefaultYangSchemaRegistry.class);
+
+    /*
+     * Map for storing app objects.
+     */
+    private final ConcurrentMap<String, Object> appObjectStore;
+
+    /*
+     * Map for storing YANG schema nodes.
+     */
+    private final ConcurrentMap<String, ConcurrentMap<String, YangSchemaNode>>
+            yangSchemaStore;
+
+    /*
+     * Map for storing YANG schema nodes with respect to root's generated
+     * interface file name.
+     */
+    private final ConcurrentMap<String, YangSchemaNode> interfaceNameKeyStore;
+
+    /*
+     * Map for storing YANG schema nodes root's generated op param file name.
+     */
+    private final ConcurrentMap<String, YangSchemaNode> opParamNameKeyStore;
+
+    /*
+     * Map for storing YANG schema nodes with respect to notifications.
+     */
+    private final ConcurrentMap<String, YangSchemaNode> eventNameKeyStore;
+
+    /*
+     * Map for storing YANG schema nodes with respect to app name.
+     */
+    private final ConcurrentMap<String, YangSchemaNode> appNameKeyStore;
+
+    /*
+     * Map for storing registered classes.
+     */
     private final ConcurrentMap<String, Class<?>> registerClassStore;
+
+    /*
+     * Map for storing YANG file details.
+     */
     private final ConcurrentMap<YangModuleIdentifier, String> yangFileStore;
-    private final YangModuleLibrary library;
-    private YsrAppContext ysrAppContext;
-    private YsrAppContext ysrContextForSchemaStore;
-    private YsrAppContext ysrContextForAppStore;
-    private ClassLoader classLoader;
+
+    private final ConcurrentMap<Object, Boolean> ynhRegistrationStore;
+    private final ConcurrentMap<String, String> jarPathStore;
 
     /**
      * Creates an instance of default YANG schema registry.
-     *
-     * @param moduleId module set id of YSR module library
      */
-    public DefaultYangSchemaRegistry(String moduleId) {
+    public DefaultYangSchemaRegistry() {
         appObjectStore = new ConcurrentHashMap<>();
         yangSchemaStore = new ConcurrentHashMap<>();
-        yangSchemaStoreForRootInterface = new ConcurrentHashMap<>();
-        yangSchemaStoreForRootOpParam = new ConcurrentHashMap<>();
-        yangRootSchemaStoreForNotification = new ConcurrentHashMap<>();
+        interfaceNameKeyStore = new ConcurrentHashMap<>();
+        opParamNameKeyStore = new ConcurrentHashMap<>();
+        eventNameKeyStore = new ConcurrentHashMap<>();
         registerClassStore = new ConcurrentHashMap<>();
         yangFileStore = new ConcurrentHashMap<>();
-        library = new DefaultYangModuleLibrary(moduleId);
+        appNameKeyStore = new ConcurrentHashMap<>();
+        ynhRegistrationStore = new ConcurrentHashMap<>();
+        jarPathStore = new ConcurrentHashMap<>();
     }
 
 
     @Override
     public void registerApplication(Object appObject, Class<?> serviceClass) {
+        synchronized (serviceClass) {
+            doPreProcessing(serviceClass, appObject);
+            if (!verifyIfApplicationAlreadyRegistered(serviceClass)) {
+                BundleContext context = getBundle(serviceClass).getBundleContext();
+                Bundle[] bundles = context.getBundles();
+                Bundle bundle;
+                int len = bundles.length;
+                List<YangNode> curNodes;
+                String jarPath;
+                for (int i = len - 1; i >= 0; i--) {
+                    bundle = bundles[i];
+                    if (bundle.getSymbolicName().contains(ONOS)) {
+                        jarPath = getJarPathFromBundleLocation(
+                                bundle.getLocation(), context.getProperty(USER_DIRECTORY));
+                        curNodes = processJarParsingOperations(jarPath);
+                        // process application registration.
+                        if (curNodes != null && !curNodes.isEmpty()) {
+                            jarPathStore.put(serviceClass.getName(), jarPath);
+                            processRegistration(serviceClass, jarPath,
+                                                curNodes, appObject, false);
+                        }
+                    }
+                }
+            }
+        }
+    }
 
-        BundleContext bundleContext = getBundle(serviceClass)
-                .getBundleContext();
-        String jarPath = getJarPathFromBundleLocation(
-                bundleContext.getBundle().getLocation(),
-                bundleContext.getProperty(USER_DIRECTORY));
-        processRegistration(serviceClass, appObject, jarPath);
+    @Override
+    public void unRegisterApplication(Object managerObject,
+                                      Class<?> serviceClass) {
+        synchronized (serviceClass) {
+            YangSchemaNode curNode;
+            String serviceName = serviceClass.getName();
+
+            //Check if service should be unregistered?
+            if (managerObject != null) {
+                verifyApplicationRegistration(managerObject, serviceClass);
+            }
+            //Remove registered class from store.
+            registerClassStore.remove(serviceName);
+            //check if service is in app store.
+            curNode = appNameKeyStore.get(serviceName);
+            if (curNode == null) {
+                curNode = interfaceNameKeyStore.get(serviceName);
+            }
+
+            if (curNode != null) {
+                removeSchemaNode(curNode);
+                eventNameKeyStore.remove(getEventClassName(curNode));
+                appObjectStore.remove(serviceName);
+                interfaceNameKeyStore.remove(getInterfaceClassName(curNode));
+                opParamNameKeyStore.remove(getOpParamClassName(curNode));
+                yangFileStore.remove(getModuleIdentifier(curNode));
+                appNameKeyStore.remove(serviceName);
+                removeYsrGeneratedTemporaryResources(jarPathStore.get(serviceName),
+                                                     serviceName);
+                log.info(" service {} is unregistered.",
+                         serviceClass.getSimpleName());
+            } else {
+                throw new RuntimeException(serviceClass.getSimpleName() +
+                                                   " service was not registered.");
+            }
+        }
+    }
+
+    @Override
+    public Object getRegisteredApplication(YangSchemaNode schemaNode) {
+        Object obj = null;
+        if (schemaNode != null) {
+            String name = getServiceName(schemaNode);
+            obj = appObjectStore.get(name);
+            if (obj == null) {
+                log.error("{} not found.", name);
+            }
+        }
+        return obj;
+    }
+
+    @Override
+    public YangSchemaNode getYangSchemaNodeUsingSchemaName(String schemaName) {
+        return getSchemaNodeUsingSchemaNameWithRev(schemaName);
+    }
+
+    @Override
+    public YangSchemaNode getYangSchemaNodeUsingAppName(String appName) {
+        YangSchemaNode node = appNameKeyStore.get(appName);
+        if (node == null) {
+            log.error("{} not found.", appName);
+        }
+        return node;
+    }
+
+    @Override
+    public YangSchemaNode
+    getYangSchemaNodeUsingGeneratedRootNodeInterfaceFileName(String name) {
+        YangSchemaNode node = interfaceNameKeyStore.get(name);
+        if (node == null) {
+            log.error("{} not found.", name);
+        }
+        return node;
+    }
+
+    @Override
+    public YangSchemaNode getYangSchemaNodeUsingGeneratedRootNodeOpPramFileName(
+            String name) {
+        YangSchemaNode node = opParamNameKeyStore.get(name);
+        if (node == null) {
+            log.error("{} not found.", name);
+        }
+        return node;
+    }
+
+    @Override
+    public YangSchemaNode getRootYangSchemaNodeForNotification(String name) {
+        YangSchemaNode node = eventNameKeyStore.get(name);
+        if (node == null) {
+            log.error("{} not found.", name);
+        }
+        return node;
+    }
+
+    @Override
+    public Class<?> getRegisteredClass(YangSchemaNode schemaNode) {
+        String interfaceName = getInterfaceClassName(schemaNode);
+        String serviceName = getServiceName(schemaNode);
+        Class<?> regClass = registerClassStore.get(serviceName);
+        if (regClass == null) {
+            regClass = registerClassStore.get(interfaceName);
+        }
+        return regClass;
+    }
+
+    @Override
+    public String getYangFile(YangModuleIdentifier moduleIdentifier) {
+        String file = yangFileStore.get(moduleIdentifier);
+        if (file == null) {
+            log.error("YANG files for corresponding module identifier {} not " +
+                              "found", moduleIdentifier);
+        }
+        return file;
+    }
+
+    @Override
+    public boolean verifyNotificationObject(Object appObj, Class<?> service) {
+        synchronized (service) {
+            YangSchemaNode node = appNameKeyStore.get(service.getName());
+            if (node == null) {
+                log.error("application is not registered with YMS {}",
+                          service.getName());
+                return false;
+            }
+            try {
+                if (node.isNotificationPresent()) {
+                    if (appObj != null) {
+                        Boolean ifPresent = ynhRegistrationStore.get(appObj);
+                        if (ifPresent == null) {
+                            ynhRegistrationStore.put(appObj, true);
+                            return true;
+                        }
+                    }
+                }
+            } catch (DataModelException e) {
+                log.error("notification registration error: {} {}", e
+                        .getLocalizedMessage(), e);
+            }
+            return false;
+        }
+    }
+
+    @Override
+    public void flushYsrData() {
+        appObjectStore.clear();
+        yangSchemaStore.clear();
+        eventNameKeyStore.clear();
+        opParamNameKeyStore.clear();
+        interfaceNameKeyStore.clear();
+        registerClassStore.clear();
+        yangFileStore.clear();
+    }
+
+    @Override
+    public void processModuleLibrary(String serviceName,
+                                     YangModuleLibrary library) {
+        synchronized (serviceName) {
+            YangSchemaNode node = appNameKeyStore.get(serviceName);
+            if (node != null) {
+                YangModuleInformation moduleInformation =
+                        new DefaultYangModuleInformation(getModuleIdentifier(node),
+                                                         node.getNameSpace());
+                addSubModuleIdentifier(node, (
+                        DefaultYangModuleInformation) moduleInformation);
+                //TODO: add feature list to module information.
+                ((DefaultYangModuleLibrary) library)
+                        .addModuleInformation(moduleInformation);
+            }
+        }
     }
 
     /**
-     * Process application registration.
+     * Process service class.
      *
      * @param serviceClass service class
      * @param appObject    application object
-     * @param jarPath      jar path
      */
-    void processRegistration(Class<?> serviceClass, Object appObject,
-                             String jarPath) {
 
-        // set class loader for service class.
-        setClassLoader(serviceClass.getClassLoader());
+    void doPreProcessing(Class<?> serviceClass, Object appObject) {
 
         //Check if service should be registered?
         if (appObject != null) {
             verifyApplicationRegistration(appObject, serviceClass);
         }
+        String name = serviceClass.getName();
         //Add app class to registered service store.
-        if (!registerClassStore.containsKey(serviceClass.getName())) {
-            updateServiceClass(serviceClass);
+        if (!registerClassStore.containsKey(name)) {
+            registerClassStore.put(name, serviceClass);
         }
+    }
+
+    void updateServiceClass(Class<?> service) {
+        registerClassStore.put(service.getName(), service);
+    }
+
+    /**
+     * Process application registration.
+     *
+     * @param service  service class
+     * @param jarPath  jar path
+     * @param nodes    YANG nodes
+     * @param appObj   application object
+     * @param isFromUt if registration is being called form unit test
+     */
+    void processRegistration(Class<?> service, String jarPath,
+                             List<YangNode> nodes,
+                             Object appObj, boolean isFromUt) {
 
         // process storing operations.
-        if (!verifyIfApplicationAlreadyRegistered(serviceClass)) {
-            List<YangNode> curNodes =
-                    processJarParsingOperations(jarPath);
+        YangNode schemaNode = findNodeWhichShouldBeReg(service.getName(), nodes);
+        if (schemaNode != null) {
+            if (appObj != null) {
+                appObjectStore.put(service.getName(), appObj);
+            }
+            //Process application context for registrations.
+            processApplicationContext(schemaNode, service.getName(), isFromUt);
+            //Update YANG file store.
+            updateYangFileStore(schemaNode, jarPath);
+        }
+    }
 
-            if (curNodes != null) {
-                for (YangNode schemaNode : curNodes) {
-                    //Process application context for registrations.
-                    processApplicationContext(schemaNode);
-                    //Update YANG file store.
-                    updateYangFileStore(schemaNode, jarPath);
-                    //Process module library operation for current node list.
-                    processModuleLibrary(schemaNode);
-                }
-                //Set jar path for app context.
-                ysrAppContext.jarPath(jarPath);
-                ysrContextForSchemaStore.jarPath(jarPath);
-                ysrContextForAppStore.jarPath(jarPath);
+    /**
+     * Returns the node for which corresponding class is generated.
+     *
+     * @param name  generated class name
+     * @param nodes list of yang nodes
+     * @return node for which corresponding class is generated
+     */
+    private YangNode findNodeWhichShouldBeReg(String name, List<YangNode> nodes) {
+        for (YangNode node : nodes) {
+            if (name.equals(getServiceName(node)) ||
+                    name.equals(getInterfaceClassName(node))) {
+                return node;
             }
         }
-
-        //Verifies if object is updated for app store.
-        updateApplicationObject(appObject, serviceClass);
+        return null;
     }
 
     /**
@@ -194,256 +425,9 @@
      * @return true if application already registered
      */
     private boolean verifyIfApplicationAlreadyRegistered(Class<?> appClass) {
-        String simpleName = appClass.getSimpleName();
         String appName = appClass.getName();
-        if (!appObjectStore.containsKey(appName)) {
-            if (simpleName.contains(OP_PARAM)) {
-                return yangSchemaStoreForRootOpParam
-                        .containsKey(appName);
-            } else {
-                return yangSchemaStoreForRootInterface
-                        .containsKey(appName);
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Verifies if service is being implemented by some new object.
-     *
-     * @param appObject application's object
-     * @param appClass  application's class
-     */
-    private void updateApplicationObject(Object appObject, Class<?> appClass) {
-        YsrAppContext appContext =
-                appObjectStore.get(appClass.getName());
-        if (appContext != null) {
-            YangSchemaNode schemaNode = appContext.curNode();
-            String name = getInterfaceClassName(schemaNode);
-            if (appContext.appObject() == null) {
-                //update in application store.
-                appContext.appObject(appObject);
-                //Update app object for schema store for root interface.
-                appContext = yangSchemaStoreForRootInterface.get(name);
-                if (appContext != null) {
-                    appContext.appObject(appObject);
-                }
-                // Update app object for schema store for root op param
-                appContext = yangSchemaStoreForRootOpParam.get(name + OP_PARAM);
-                if (appContext != null) {
-                    appContext.appObject(appObject);
-                }
-            }
-        }
-    }
-
-    @Override
-    public void unRegisterApplication(Object managerObject,
-                                      Class<?> serviceClass) {
-        YangSchemaNode curNode = null;
-        String serviceName = serviceClass.getName();
-
-        //Check if service should be unregistered?
-        if (managerObject != null) {
-            verifyApplicationRegistration(managerObject, serviceClass);
-        }
-        //Remove registered class from store.
-        registerClassStore.remove(serviceName);
-
-        //check if service is in app store.
-        if (appObjectStore.containsKey(serviceName)) {
-            curNode = retrieveNodeForUnregister(serviceName, appObjectStore,
-                                                managerObject);
-        } else if (yangSchemaStoreForRootInterface.containsKey(serviceName)) {
-            //check if service is in interface store.
-            curNode = retrieveNodeForUnregister(serviceName,
-                                                yangSchemaStoreForRootInterface,
-                                                managerObject);
-        } else if (yangSchemaStoreForRootOpParam.containsKey(serviceName)) {
-            //check if service is in op param store.
-            curNode = retrieveNodeForUnregister(serviceName,
-                                                yangSchemaStoreForRootOpParam,
-                                                managerObject);
-        }
-        if (curNode != null) {
-            String javaName = getInterfaceClassName(curNode);
-            removeFromYangSchemaStore(curNode);
-            removeFromYangNotificationStore(curNode);
-            removeFromAppSchemaStore(serviceName);
-            removeFromYangSchemaNodeForRootInterface(javaName);
-            removeFromYangSchemaNodeForRootOpParam(javaName);
-            removeYangFileInfoFromStore(curNode);
-            log.info(" service {} is unregistered.",
-                     serviceClass.getSimpleName());
-        } else {
-            throw new RuntimeException(serviceClass.getSimpleName() +
-                                               " service was not registered.");
-        }
-    }
-
-    @Override
-    public Object getRegisteredApplication(YangSchemaNode schemaNode) {
-        if (schemaNode != null) {
-            String name = getInterfaceClassName(schemaNode);
-            if (yangSchemaStoreForRootInterface.containsKey(name)) {
-                return yangSchemaStoreForRootInterface.get(name)
-                        .appObject();
-            }
-            log.error("{} not found.", name);
-        }
-        return null;
-    }
-
-    @Override
-    public YangSchemaNode getYangSchemaNodeUsingSchemaName(String schemaName) {
-        return getSchemaNodeUsingSchemaNameWithRev(schemaName);
-    }
-
-    @Override
-    public YangSchemaNode getYangSchemaNodeUsingAppName(String appName) {
-        YsrAppContext appContext = appObjectStore.get(appName);
-        if (appContext != null) {
-            return appContext.curNode();
-        }
-        log.error("{} not found.", appName);
-        return null;
-    }
-
-    @Override
-    public YangSchemaNode
-    getYangSchemaNodeUsingGeneratedRootNodeInterfaceFileName(String name) {
-        YsrAppContext appContext = yangSchemaStoreForRootInterface.get(name);
-        if (appContext != null) {
-            return appContext.curNode();
-        }
-        log.error("{} not found.", name);
-        return null;
-    }
-
-    @Override
-    public YangSchemaNode getYangSchemaNodeUsingGeneratedRootNodeOpPramFileName(
-            String name) {
-        YsrAppContext appContext = yangSchemaStoreForRootOpParam.get(name);
-        if (appContext != null) {
-            return appContext.curNode();
-        }
-        log.error("{} not found.", name);
-        return null;
-    }
-
-    @Override
-    public YangSchemaNode getRootYangSchemaNodeForNotification(String name) {
-        YsrAppContext appContext = yangRootSchemaStoreForNotification.get(name);
-        if (appContext != null) {
-            return appContext.curNode();
-        }
-        log.error("{} not found.", name);
-        return null;
-    }
-
-    @Override
-    public Class<?> getRegisteredClass(YangSchemaNode schemaNode,
-                                       String appName) {
-        String interfaceName = getInterfaceClassName(schemaNode);
-        String serviceName = getServiceName(schemaNode);
-        String defaultClass;
-        if (schemaNode instanceof RpcNotificationContainer) {
-            defaultClass = getOpParamClassName(schemaNode);
-        } else {
-            defaultClass = getDefaultClassName(schemaNode);
-        }
-        //If application class is registered.
-        if (registerClassStore.containsKey(appName)) {
-            return registerClassStore.get(appName);
-        } else if (registerClassStore.containsKey(interfaceName)) {
-            //If interface class is registered.
-            return registerClassStore.get(interfaceName);
-        } else if (registerClassStore.containsKey(serviceName)) {
-            //If service class is registered.
-            return registerClassStore.get(serviceName);
-        } else if (registerClassStore.containsKey(defaultClass)) {
-            //If default class is registered.
-            return registerClassStore.get(defaultClass);
-        }
-        return null;
-    }
-
-    /**
-     * Returns YANG file path for module identifier.
-     *
-     * @param moduleIdentifier module identifier
-     * @return YANG file path for module identifier
-     */
-    public String getYangFile(YangModuleIdentifier moduleIdentifier) {
-        if (yangFileStore.containsKey(moduleIdentifier)) {
-            return yangFileStore.get(moduleIdentifier);
-        }
-        log.error("YANG files for corresponding module identifier {} not " +
-                          "found", moduleIdentifier);
-        return null;
-    }
-
-    /**
-     * Updates service class store.
-     *
-     * @param serviceClass service class
-     */
-    void updateServiceClass(Class<?> serviceClass) {
-        registerClassStore.put(serviceClass.getName(), serviceClass);
-    }
-
-    /**
-     * Updates application object store.
-     *
-     * @param appName application name
-     */
-    private void updateAppObjectStore(String appName) {
-        if (verifyClassExistence(appName)) {
-            appObjectStore.put(appName, ysrContextForAppStore);
-        }
-    }
-
-    /**
-     * Updates YANG schema object store.
-     *
-     * @param schemaNode application's schema node
-     */
-    private void updateYangSchemaStore(YangSchemaNode schemaNode) {
-        addSchemaNodeUsingSchemaNameWithRev(schemaNode);
-    }
-
-    /**
-     * Updates YANG schema notification object store.
-     *
-     * @param name application's notification name
-     */
-    private void updateYangNotificationStore(String name) {
-        if (verifyClassExistence(name)) {
-            yangRootSchemaStoreForNotification.put(name, ysrAppContext);
-        }
-    }
-
-    /**
-     * Updates YANG schema object store for root interface file name.
-     *
-     * @param name name of generated interface file for root
-     *             node
-     */
-    private void updateYangSchemaForRootInterfaceFileNameStore(String name) {
-        if (verifyClassExistence(name)) {
-            yangSchemaStoreForRootInterface.put(name, ysrAppContext);
-        }
-    }
-
-    /**
-     * Updates YANG schema object store  for root op param file name.
-     *
-     * @param name name of generated op param file for root node
-     */
-    private void updateYangSchemaForRootOpParamFileNameStore(String name) {
-        if (verifyClassExistence(name)) {
-            yangSchemaStoreForRootOpParam.put(name, ysrAppContext);
-        }
+        return appObjectStore.containsKey(appName) ||
+                interfaceNameKeyStore.containsKey(appName);
     }
 
     /**
@@ -453,9 +437,8 @@
      * @param jarPath jar file path
      */
     private void updateYangFileStore(YangNode node, String jarPath) {
-       //FIXME: fix when yang tools support for file name.
-       //yangFileStore.put(getModuleIdentifier(node),
-       //                   getYangFilePath(jarPath, node.getFileName()));
+        yangFileStore.put(getModuleIdentifier(node),
+                          getYangFilePath(jarPath, node.getFileName()));
     }
 
     /**
@@ -466,8 +449,8 @@
      * @return yang file path
      */
     private String getYangFilePath(String jarPath, String metaDataFileName) {
-       String[] metaData = metaDataFileName.split(SLASH);
-       return jarPath + SLASH + metaData[metaData.length - 1];
+        String[] metaData = metaDataFileName.split(SLASH);
+        return jarPath + SLASH + metaData[metaData.length - 1];
     }
 
     /**
@@ -478,8 +461,12 @@
      */
     private List<YangNode> processJarParsingOperations(String path) {
         //Deserialize data model and get the YANG node set.
+        String jar = path + JAR;
         try {
-            return parseJarFile(path + JAR, path);
+            File file = new File(jar);
+            if (file.exists()) {
+                return parseJarFile(path + JAR, path);
+            }
         } catch (IOException e) {
             log.error(" failed to parse the jar file in path {} : {} ", path,
                       e.getMessage());
@@ -490,30 +477,23 @@
     /**
      * Process an application an updates the maps for YANG schema registry.
      *
-     * @param appNode application YANG schema nodes
+     * @param appNode  application YANG schema nodes
+     * @param name     class name
+     * @param isFormUt if method is being called from unit tests
      */
-    void processApplicationContext(YangSchemaNode appNode) {
+    private void processApplicationContext(YangSchemaNode appNode, String name,
+                                           boolean isFormUt) {
 
-        String appName = getInterfaceClassName(appNode);
-
-        //Create a new instance of ysr app context for each node.
-        ysrAppContext = new YsrAppContext();
-        ysrContextForSchemaStore = new YsrAppContext();
-        ysrContextForAppStore = new YsrAppContext();
-
-        //add cur node to app context.
-        ysrAppContext.curNode(appNode);
-        ysrContextForAppStore.curNode(appNode);
-
-        //Updates maps wih schema nodes.
-        updateAppObjectStore(getServiceName(appNode));
+        //Update map for which registrations is being called.
+        appNameKeyStore.put(name, appNode);
 
         // Updates schema store.
-        updateYangSchemaStore(appNode);
+        addToSchemaStore(appNode);
         // update interface store.
-        updateYangSchemaForRootInterfaceFileNameStore(appName);
+        interfaceNameKeyStore.put(getInterfaceClassName(appNode), appNode);
+
         //update op param store.
-        updateYangSchemaForRootOpParamFileNameStore(getOpParamClassName(appNode));
+        opParamNameKeyStore.put(getOpParamClassName(appNode), appNode);
         //Checks if notification is present then update notification store map.
         String eventSubject = null;
         try {
@@ -525,10 +505,11 @@
                       e.getLocalizedMessage());
         }
         if (eventSubject != null) {
-            updateYangNotificationStore(eventSubject);
+            eventNameKeyStore.put(eventSubject, appNode);
         }
-        log.info("successfully registered this application {}{}", appName,
-                 SERVICE);
+        if (!isFormUt) {
+            log.info("successfully registered this application {}", name);
+        }
     }
 
     /**
@@ -540,62 +521,18 @@
     private String getJarPathFromBundleLocation(String mvnLocationPath,
                                                 String currentDirectory) {
         String path = currentDirectory + SYSTEM;
-        String[] strArray = mvnLocationPath.split(MAVEN);
-        String[] split = strArray[1].split(File.separator);
-        String[] groupId = split[0].split(Pattern.quote(DELIMITER));
-
-        return path + groupId[0] + SLASH + groupId[1] + SLASH + split[1] +
-                SLASH + split[2] + SLASH + split[1] + HYPHEN + split[2];
-    }
-
-    /**
-     * Returns de-serializes YANG data-model nodes.
-     *
-     * @param serializedFileInfo serialized File Info
-     * @return de-serializes YANG data-model nodes
-     */
-    Set<YangSchemaNode> deSerializeDataModel(String serializedFileInfo) {
-
-        Set<YangSchemaNode> nodes = new HashSet<>();
-        Object readValue;
-        try {
-            FileInputStream fileInputStream =
-                    new FileInputStream(serializedFileInfo);
-            ObjectInputStream objectInputStream =
-                    new ObjectInputStream(fileInputStream);
-            readValue = objectInputStream.readObject();
-            if (readValue instanceof Set<?>) {
-                for (Object obj : (Set<?>) readValue) {
-                    if (obj instanceof YangSchemaNode) {
-                        nodes.add((YangSchemaNode) obj);
-                    } else {
-                        throw new RuntimeException(
-                                "deserialize object is not an instance of " +
-                                        "YANG schema node" + obj);
-                    }
+        if (mvnLocationPath.contains(MAVEN)) {
+            String[] strArray = mvnLocationPath.split(MAVEN);
+            if (strArray[1].contains(File.separator)) {
+                String[] split = strArray[1].split(File.separator);
+                if (split[0].contains(PERIOD)) {
+                    String[] groupId = split[0].split(Pattern.quote(PERIOD));
+                    return path + groupId[0] + SLASH + groupId[1] + SLASH + split[1] +
+                            SLASH + split[2] + SLASH + split[1] + HYPHEN + split[2];
                 }
-            } else {
-                throw new RuntimeException(
-                        "deserialize object is not an instance of set of" +
-                                "YANG schema node" + readValue);
             }
-            objectInputStream.close();
-            fileInputStream.close();
-        } catch (IOException | ClassNotFoundException e) {
-            log.error(" {} not found.: {}", serializedFileInfo,
-                      e.getLocalizedMessage());
         }
-
-        return nodes;
-    }
-
-    /**
-     * Returns ysr app context.
-     *
-     * @return ysr app context
-     */
-    YsrAppContext ysrAppContext() {
-        return ysrAppContext;
+        return null;
     }
 
     /**
@@ -605,61 +542,62 @@
      * @return schema node based on the revision
      */
     private YangSchemaNode getSchemaNodeUsingSchemaNameWithRev(String name) {
-        YsrAppContext appContext;
+        ConcurrentMap<String, YangSchemaNode> revMap;
         YangSchemaNode schemaNode;
         if (name.contains(AT)) {
             String[] revArray = name.split(AT);
-            appContext = yangSchemaStore.get(revArray[0]);
-            schemaNode = appContext.getSchemaNodeForRevisionStore(name);
-            if (schemaNode != null) {
-                return schemaNode;
+            revMap = yangSchemaStore.get(revArray[0]);
+            schemaNode = revMap.get(name);
+            if (schemaNode == null) {
+                log.error("{} not found.", name);
             }
-            return appContext.curNode();
+            return schemaNode;
         }
         if (yangSchemaStore.containsKey(name)) {
-            appContext = yangSchemaStore.get(name);
-            if (appContext != null) {
-                Iterator<YangSchemaNode> iterator = appContext
-                        .getYangSchemaNodeForRevisionStore().values()
-                        .iterator();
-                if (iterator.hasNext()) {
-                    return appContext.getYangSchemaNodeForRevisionStore()
-                            .values().iterator().next();
-                } else {
-                    return null;
+            revMap = yangSchemaStore.get(name);
+            if (revMap != null && !revMap.isEmpty()) {
+                YangSchemaNode node = revMap.get(name);
+                if (node != null) {
+                    return node;
                 }
+                String revName = getLatestVersion(revMap);
+                return revMap.get(revName);
             }
         }
         log.error("{} not found.", name);
         return null;
     }
 
+    private String getLatestVersion(ConcurrentMap<String, YangSchemaNode> revMap) {
+        List<String> keys = new ArrayList<>();
+        for (Map.Entry<String, YangSchemaNode> entry : revMap.entrySet()) {
+            keys.add(entry.getKey());
+        }
+        sort(keys);
+        return keys.get(keys.size() - 1);
+    }
+
     /**
      * Adds schema node when different revision of node has received.
      *
      * @param schemaNode schema node
      */
-    private void addSchemaNodeUsingSchemaNameWithRev(
-            YangSchemaNode schemaNode) {
+    private void addToSchemaStore(YangSchemaNode schemaNode) {
 
         String date = getDateInStringFormat(schemaNode);
         String name = schemaNode.getName();
-        if (!date.equals(EMPTY_STRING)) {
-            name = name + AT + date;
+        String revName = name;
+        if (date != null) {
+            revName = name + AT + date;
         }
         //check if already present.
-        if (!yangSchemaStore.containsKey(schemaNode.getName())) {
-            ysrContextForSchemaStore.curNode(schemaNode);
-            //if revision is not present no need to add in revision store.
-            ysrContextForSchemaStore
-                    .addSchemaNodeWithRevisionStore(name, schemaNode);
-            yangSchemaStore.put(schemaNode.getName(),
-                                ysrContextForSchemaStore);
+        if (!yangSchemaStore.containsKey(name)) {
+            ConcurrentMap<String, YangSchemaNode> revStore =
+                    new ConcurrentHashMap<>();
+            revStore.put(revName, schemaNode);
+            yangSchemaStore.put(name, revStore);
         } else {
-            YsrAppContext appContext =
-                    yangSchemaStore.get(schemaNode.getName());
-            appContext.addSchemaNodeWithRevisionStore(name, schemaNode);
-            appContext.curNode(schemaNode);
+            yangSchemaStore.get(name).put(revName, schemaNode);
         }
     }
 
@@ -677,7 +615,7 @@
                                         .getRevDate());
             }
         }
-        return EMPTY_STRING;
+        return null;
     }
 
     /**
@@ -686,314 +624,21 @@
      * @param removableNode schema node which needs to be removed
      */
     private void removeSchemaNode(YangSchemaNode removableNode) {
-
         String name = removableNode.getName();
+        String revName = name;
         String date = getDateInStringFormat(removableNode);
-
-        if (!date.isEmpty()) {
-            name = removableNode.getName() + AT +
-                    getDateInStringFormat(removableNode);
+        if (date != null) {
+            revName = name + AT + date;
         }
-        YsrAppContext appContext = yangSchemaStore
-                .get(removableNode.getName());
-        if (appContext != null &&
-                !appContext.getYangSchemaNodeForRevisionStore().isEmpty() &&
-                appContext.getYangSchemaNodeForRevisionStore().size() != 1) {
-            appContext.removeSchemaNodeForRevisionStore(name);
+        ConcurrentMap<String, YangSchemaNode> revMap = yangSchemaStore.get(name);
+        if (revMap != null && !revMap.isEmpty() && revMap.size() != 1) {
+            revMap.remove(revName);
         } else {
             yangSchemaStore.remove(removableNode.getName());
         }
     }
 
     /**
-     * Verifies if the manager object is already registered with notification
-     * handler.
-     *
-     * @param serviceClass service class
-     * @return true if the manager object is already registered with
-     * notification handler
-     */
-    public boolean verifyNotificationObject(Class<?> serviceClass) {
-        YangSchemaNode schemaNode = null;
-        String serviceName = serviceClass.getName();
-        if (appObjectStore.containsKey(serviceName)) {
-            schemaNode = getYangSchemaNodeUsingAppName(serviceName);
-        } else if (yangSchemaStoreForRootInterface.containsKey(serviceName)) {
-            schemaNode =
-                    getYangSchemaNodeUsingGeneratedRootNodeInterfaceFileName(
-                            serviceName);
-        } else if (yangSchemaStoreForRootOpParam.containsKey(serviceName)) {
-            schemaNode = getYangSchemaNodeUsingGeneratedRootNodeOpPramFileName(
-                    serviceName);
-        }
-
-        if (schemaNode != null) {
-            String name = getEventClassName(schemaNode);
-
-            YsrAppContext appContext =
-                    yangRootSchemaStoreForNotification.get(name);
-            if (appContext != null && !appContext.isNotificationRegistered()) {
-                appContext.setNotificationRegistered(true);
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns schema node's generated interface class name.
-     *
-     * @param schemaNode schema node
-     * @return schema node's generated interface class name
-     */
-    private String getInterfaceClassName(YangSchemaNode schemaNode) {
-        return schemaNode.getJavaPackage() + PERIOD +
-                getCapitalCase(schemaNode.getJavaClassNameOrBuiltInType());
-    }
-
-    /**
-     * Returns schema node's generated op param class name.
-     *
-     * @param schemaNode schema node
-     * @return schema node's generated op param class name
-     */
-    private String getOpParamClassName(YangSchemaNode schemaNode) {
-        return getInterfaceClassName(schemaNode) + OP_PARAM;
-    }
-
-    /**
-     * Returns schema node's generated op param class name.
-     *
-     * @param schemaNode schema node
-     * @return schema node's generated op param class name
-     */
-    private String getDefaultClassName(YangSchemaNode schemaNode) {
-        return schemaNode.getJavaPackage() + PERIOD + getCapitalCase(DEFAULT) +
-                getCapitalCase(schemaNode.getJavaClassNameOrBuiltInType());
-    }
-
-    /**
-     * Returns schema node's generated event class name.
-     *
-     * @param schemaNode schema node
-     * @return schema node's generated event class name
-     */
-    private String getEventClassName(YangSchemaNode schemaNode) {
-        return getInterfaceClassName(schemaNode).toLowerCase() + PERIOD +
-                getCapitalCase(schemaNode.getJavaClassNameOrBuiltInType()) +
-                EVENT_STRING;
-    }
-
-    /**
-     * Returns schema node's generated service class name.
-     *
-     * @param schemaNode schema node
-     * @return schema node's generated service class name
-     */
-    private String getServiceName(YangSchemaNode schemaNode) {
-        return getInterfaceClassName(schemaNode) + SERVICE;
-    }
-
-    /**
-     * Returns YSR application context for schema map.
-     *
-     * @return YSR application context for schema map
-     */
-    YsrAppContext ysrContextForSchemaStore() {
-        return ysrContextForSchemaStore;
-    }
-
-    /**
-     * Sets YSR application context for schema map.
-     *
-     * @param context YSR application context for
-     *                schema map
-     */
-    void ysrContextForSchemaStore(YsrAppContext context) {
-        ysrContextForSchemaStore = context;
-    }
-
-    /**
-     * Returns YSR app context for application store.
-     *
-     * @return YSR app context for application store
-     */
-    YsrAppContext ysrContextForAppStore() {
-        return ysrContextForAppStore;
-    }
-
-    /**
-     * Retrieves schema node from the store and deletes jar file path.
-     *
-     * @param appName   application name
-     * @param store     YSR stores
-     * @param appObject applications object
-     * @return schema node from the store
-     */
-    private YangSchemaNode retrieveNodeForUnregister(
-            String appName,
-            ConcurrentMap<String, YsrAppContext> store, Object appObject) {
-
-        YsrAppContext curContext = store.get(appName);
-        boolean isValidObject;
-        if (curContext != null) {
-            isValidObject = verifyAppObject(appObject, curContext.appObject());
-            if (isValidObject) {
-                YangSchemaNode curNode = curContext.curNode();
-                //Delete all the generated ysr information in application's
-                // package.
-                removeYsrGeneratedTemporaryResources(curContext.jarPath(),
-                                                     appName);
-                return curNode;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Verifies the application object which needs to be unregistered.
-     *
-     * @param appObject current received application object
-     * @param context   stored application object
-     * @return true if objects are equal
-     */
-    private boolean verifyAppObject(Object appObject, Object context) {
-        if (appObject != null && context != null) {
-            return appObject.equals(context);
-        }
-        return appObject == null && context == null;
-    }
-
-    /**
-     * Removes YSR generated temporary resources.
-     *
-     * @param rscPath resource path
-     * @param appName application name
-     */
-    private void removeYsrGeneratedTemporaryResources(String rscPath,
-                                                      String appName) {
-        if (rscPath != null) {
-            File jarPath = new File(rscPath);
-            if (jarPath.exists()) {
-                try {
-                    deleteDirectory(jarPath);
-                } catch (IOException e) {
-                    log.error("failed to delete ysr resources for {} : {}",
-                              appName, e.getLocalizedMessage());
-                }
-            }
-        }
-    }
-
-    /**
-     * Removes from YANG schema store.
-     *
-     * @param curNode schema node
-     */
-    private void removeFromYangSchemaStore(YangSchemaNode curNode) {
-        removeSchemaNode(curNode);
-    }
-
-    /**
-     * Removes from YANG schema  notification store.
-     *
-     * @param curNode schema node
-     */
-    private void removeFromYangNotificationStore(YangSchemaNode curNode) {
-        yangRootSchemaStoreForNotification
-                .remove(getEventClassName(curNode));
-    }
-
-    /**
-     * Removes from app store.
-     *
-     * @param appName application name
-     */
-    private void removeFromAppSchemaStore(String appName) {
-        appObjectStore.remove(appName);
-    }
-
-    /**
-     * Removes from interface store.
-     *
-     * @param appName application name
-     */
-    private void removeFromYangSchemaNodeForRootInterface(String appName) {
-        yangSchemaStoreForRootInterface.remove(appName);
-    }
-
-    /**
-     * Removes from op param store.
-     *
-     * @param appName application name
-     */
-    private void removeFromYangSchemaNodeForRootOpParam(String appName) {
-        yangSchemaStoreForRootOpParam.remove(appName + OP_PARAM);
-    }
-
-    /**
-     * Removes YANG file information from file store.
-     *
-     * @param schemaNode schema node
-     */
-    private void removeYangFileInfoFromStore(YangSchemaNode schemaNode) {
-        yangFileStore.remove(getModuleIdentifier(schemaNode));
-    }
-
-    /**
-     * Verifies if class with given name exists.
-     *
-     * @param appName application name
-     * @return true if class exists
-     */
-    boolean verifyClassExistence(String appName) {
-        try {
-            classLoader.loadClass(appName);
-            return true;
-        } catch (ClassNotFoundException e) {
-            return false;
-        }
-    }
-
-    /**
-     * Clears database for YSR.
-     */
-    public void flushYsrData() {
-        appObjectStore.clear();
-        yangSchemaStore.clear();
-        yangRootSchemaStoreForNotification.clear();
-        yangSchemaStoreForRootOpParam.clear();
-        yangSchemaStoreForRootInterface.clear();
-        registerClassStore.clear();
-        yangFileStore.clear();
-    }
-
-    /**
-     * Sets class loader of registered class.
-     *
-     * @param classLoader class loader of registered class
-     */
-    void setClassLoader(ClassLoader classLoader) {
-        this.classLoader = classLoader;
-    }
-
-    /**
-     * Process module library for a registered service.
-     *
-     * @param node YANG schema nodes
-     */
-    private void processModuleLibrary(YangNode node) {
-        YangModuleInformation moduleInformation =
-                new DefaultYangModuleInformation(getModuleIdentifier(node),
-                                                 node.getNameSpace());
-        addSubModuleIdentifier(node, (
-                DefaultYangModuleInformation) moduleInformation);
-        //TODO: add feature list to module information.
-        ((DefaultYangModuleLibrary) library)
-                .addModuleInformation(moduleInformation);
-    }
-
-    /**
      * Adds sub module identifier.
      *
      * @param node        schema node
@@ -1026,11 +671,66 @@
     }
 
     /**
-     * Returns module library.
+     * Returns schema node's generated interface class name.
      *
-     * @return module library
+     * @param schemaNode schema node
+     * @return schema node's generated interface class name
      */
-    public YangModuleLibrary getLibrary() {
-        return library;
+    String getInterfaceClassName(YangSchemaNode schemaNode) {
+        return schemaNode.getJavaPackage() + PERIOD +
+                getCapitalCase(schemaNode.getJavaClassNameOrBuiltInType());
     }
-}
+
+    /**
+     * Returns schema node's generated op param class name.
+     *
+     * @param schemaNode schema node
+     * @return schema node's generated op param class name
+     */
+    private String getOpParamClassName(YangSchemaNode schemaNode) {
+        return getInterfaceClassName(schemaNode) + OP_PARAM;
+    }
+
+    /**
+     * Returns schema node's generated event class name.
+     *
+     * @param schemaNode schema node
+     * @return schema node's generated event class name
+     */
+    private String getEventClassName(YangSchemaNode schemaNode) {
+        return getInterfaceClassName(schemaNode).toLowerCase() + PERIOD +
+                getCapitalCase(schemaNode.getJavaClassNameOrBuiltInType()) +
+                EVENT_STRING;
+    }
+
+    /**
+     * Returns schema node's generated service class name.
+     *
+     * @param schemaNode schema node
+     * @return schema node's generated service class name
+     */
+    String getServiceName(YangSchemaNode schemaNode) {
+        return getInterfaceClassName(schemaNode) + SERVICE;
+    }
+
+    /**
+     * Removes YSR generated temporary resources.
+     *
+     * @param rscPath resource path
+     * @param appName application name
+     */
+    private void removeYsrGeneratedTemporaryResources(String rscPath,
+                                                      String appName) {
+        if (rscPath != null) {
+            File jarPath = new File(rscPath);
+            if (jarPath.exists()) {
+                try {
+                    deleteDirectory(jarPath);
+                } catch (IOException e) {
+                    log.error("failed to delete ysr resources for {} : {}",
+                              appName, e.getLocalizedMessage());
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/YangSchemaRegistry.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/YangSchemaRegistry.java
index 8098188..ed5d95a 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/YangSchemaRegistry.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/YangSchemaRegistry.java
@@ -17,6 +17,8 @@
 package org.onosproject.yms.app.ysr;
 
 import org.onosproject.yangutils.datamodel.YangSchemaNode;
+import org.onosproject.yms.ysr.YangModuleIdentifier;
+import org.onosproject.yms.ysr.YangModuleLibrary;
 
 /**
  * Abstraction of entity which provides interfaces to YANG schema registry.
@@ -27,7 +29,8 @@
      * Registers applications to YMS.
      *
      * @param managerObject application's object
-     * @param serviceClass  service class to be registered
+     * @param serviceClass  service class which needs to be
+     *                      registered
      */
     void registerApplication(Object managerObject, Class<?> serviceClass);
 
@@ -96,9 +99,46 @@
      * Returns registered service class.
      *
      * @param schemaNode YANG schema node
-     * @param appName    application's name
      * @return registered service class
      */
-    Class<?> getRegisteredClass(YangSchemaNode schemaNode, String appName);
+    Class<?> getRegisteredClass(YangSchemaNode schemaNode);
+
+    /**
+     * Verifies if the manager object is already registered with notification
+     * handler.
+     *
+     * @param appObj  application object
+     * @param service service class
+     * @return true if the manager object is already registered with
+     * notification handler
+     */
+    boolean verifyNotificationObject(Object appObj, Class<?> service);
+
+    /**
+     * Clears database for YSR.
+     */
+    void flushYsrData();
+
+    /**
+     * Protocols like RESTCONF, use the definitions within the YANG modules
+     * advertised by the server are used to construct an RPC operation or
+     * data resource identifier.
+     * <p>
+     * Schema Resource:
+     * The server can optionally support retrieval of the YANG modules it
+     * supports.
+     *
+     * @param moduleIdentifier module's identifier
+     * @return YANG file contents of the requested YANG module.
+     */
+    String getYangFile(YangModuleIdentifier moduleIdentifier);
+
+    /**
+     * Process module library for a registered service.
+     *
+     * @param serviceName service class name
+     * @param library     YANG module library
+     */
+    void processModuleLibrary(String serviceName, YangModuleLibrary library);
 
 }
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/YsrAppContext.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/YsrAppContext.java
deleted file mode 100644
index 4f076ab..0000000
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/YsrAppContext.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * 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.ysr;
-
-import com.google.common.collect.ImmutableMap;
-import org.onosproject.yangutils.datamodel.YangSchemaNode;
-
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * Represents registered application's context for YANG schema registry.
- */
-public class YsrAppContext {
-
-    /**
-     * Current application's YANG schema node.
-     */
-    private YangSchemaNode curNode;
-
-    /**
-     * Current application's YANG schema node with different revision store.
-     */
-    private final ConcurrentMap<String, YangSchemaNode>
-            multiRevisionSchemaNodeStore;
-
-    /**
-     * Current application's object.
-     */
-    private Object appObject;
-
-    /**
-     * Jar file path.
-     */
-    private String jarPath;
-
-    /**
-     * If for current object notification is registered.
-     */
-    private boolean isNotificationRegistered;
-
-    /**
-     * Creates an instance of YANG schema registry application context.
-     */
-    YsrAppContext() {
-        multiRevisionSchemaNodeStore = new ConcurrentHashMap<>();
-    }
-
-    /**
-     * Returns current application's object.
-     *
-     * @return current application's object
-     */
-    Object appObject() {
-        return appObject;
-    }
-
-    /**
-     * Sets current application's object.
-     *
-     * @param appObject current application's object
-     */
-    void appObject(Object appObject) {
-        this.appObject = appObject;
-    }
-
-    /**
-     * Returns current application's YANG schema node.
-     *
-     * @return current application's YANG schema node
-     */
-    YangSchemaNode curNode() {
-        return curNode;
-    }
-
-    /**
-     * Sets current application's schema node.
-     *
-     * @param node current schema's node
-     */
-    void curNode(YangSchemaNode node) {
-        curNode = node;
-    }
-
-    /**
-     * Returns jar file path.
-     *
-     * @return jar file path
-     */
-    String jarPath() {
-        return jarPath;
-    }
-
-    /**
-     * Sets jar file path.
-     *
-     * @param jarPath jar file path
-     */
-    void jarPath(String jarPath) {
-        this.jarPath = jarPath;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(curNode, appObject);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj instanceof YsrAppContext) {
-            YsrAppContext that = (YsrAppContext) obj;
-            return Objects.equals(curNode, that.curNode) &&
-                    Objects.equals(appObject, that.appObject);
-        }
-        return false;
-    }
-
-    /**
-     * Returns true if for application object notification is registered.
-     *
-     * @return true if for application object notification is registered
-     */
-    boolean isNotificationRegistered() {
-        return isNotificationRegistered;
-    }
-
-    /**
-     * Sets true if for application object notification is registered.
-     *
-     * @param notificationRegistered true if for application object notification is registered
-     */
-    void setNotificationRegistered(boolean notificationRegistered) {
-        isNotificationRegistered = notificationRegistered;
-    }
-
-    /**
-     * Returns YANG schema node store for specific revision.
-     *
-     * @return YANG schema node store for specific revision
-     */
-    Map<String, YangSchemaNode> getYangSchemaNodeForRevisionStore() {
-        return ImmutableMap.copyOf(multiRevisionSchemaNodeStore);
-    }
-
-    /**
-     * Returns a schema node for specific revision from store.
-     *
-     * @param nodeNameWithRevision schema node name for specific revision
-     * @return schema node for specific revision.
-     */
-    YangSchemaNode getSchemaNodeForRevisionStore(String nodeNameWithRevision) {
-        return multiRevisionSchemaNodeStore.get(nodeNameWithRevision);
-    }
-
-    /**
-     * Removes a schema node of specific revision from store.
-     *
-     * @param nodeNameWithRevision schema node name for specific revision
-     */
-    void removeSchemaNodeForRevisionStore(String nodeNameWithRevision) {
-        multiRevisionSchemaNodeStore.remove(nodeNameWithRevision);
-    }
-
-    /**
-     * Adds schema node with revision from store.
-     *
-     * @param nodeNameWithRevision schema node name for specific revision
-     * @param schemaNode           schema node for specific revision
-     */
-    void addSchemaNodeWithRevisionStore(String nodeNameWithRevision, YangSchemaNode schemaNode) {
-        multiRevisionSchemaNodeStore.put(nodeNameWithRevision, schemaNode);
-    }
-}
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ytb/YtbUtil.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ytb/YtbUtil.java
index 8329c9f..b81743b 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ytb/YtbUtil.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ytb/YtbUtil.java
@@ -229,8 +229,8 @@
         YangNode moduleNode = curNode.getParent();
         String moduleName = moduleNode.getJavaClassNameOrBuiltInType();
         String modulePackage = moduleNode.getJavaPackage();
-        return registry.getRegisteredClass(moduleNode,
-                                           modulePackage + PERIOD + moduleName);
+        return registry.getRegisteredClass(moduleNode
+        );
     }
 
     /**
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yab/MockYmsManager.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yab/MockYmsManager.java
deleted file mode 100644
index 22f4fd9..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yab/MockYmsManager.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * 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.yab;
-
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ysr.TestYangSchemaNodeProvider;
-import org.onosproject.yms.app.ysr.YangSchemaRegistry;
-import org.onosproject.yms.ych.YangCodecHandler;
-import org.onosproject.yms.ych.YangDataTreeCodec;
-import org.onosproject.yms.ych.YangProtocolEncodingFormat;
-import org.onosproject.yms.ydt.YdtBuilder;
-import org.onosproject.yms.ydt.YdtResponse;
-import org.onosproject.yms.ydt.YdtWalker;
-import org.onosproject.yms.ydt.YmsOperationType;
-import org.onosproject.yms.ymsm.YmsService;
-import org.onosproject.yms.ynh.YangNotificationService;
-import org.onosproject.yms.ysr.YangModuleIdentifier;
-import org.onosproject.yms.ysr.YangModuleLibrary;
-
-import java.util.List;
-
-/**
- * Represents implementation of YANG application management system manager.
- */
-public class MockYmsManager
-        implements YmsService {
-
-    YangSchemaRegistry schemaRegistry;
-    TestYangSchemaNodeProvider testYangSchemaNodeProvider =
-            new TestYangSchemaNodeProvider();
-
-    @Override
-    public YdtBuilder getYdtBuilder(String logicalRootName,
-                                    String rootNamespace,
-                                    YmsOperationType operationType) {
-        testYangSchemaNodeProvider.processSchemaRegistry(new TestManager());
-        schemaRegistry = testYangSchemaNodeProvider.getDefaultYangSchemaRegistry();
-        return new YangRequestWorkBench(logicalRootName, rootNamespace,
-                                        operationType, schemaRegistry, false);
-    }
-
-    @Override
-    public YdtBuilder getYdtBuilder(String logicalRootName,
-                                    String rootNamespace,
-                                    YmsOperationType operationType,
-                                    Object schemaRegistryForYdt) {
-        return null;
-    }
-
-    @Override
-    public YdtWalker getYdtWalker() {
-        return null;
-    }
-
-    @Override
-    public YdtResponse executeOperation(YdtBuilder operationRequest) {
-        YangApplicationBroker requestBroker =
-                new YangApplicationBroker(schemaRegistry);
-        switch (operationRequest.getYmsOperationType()) {
-            case EDIT_CONFIG_REQUEST:
-                try {
-                    return requestBroker.processEdit(operationRequest);
-                } catch (CloneNotSupportedException e) {
-                }
-                break;
-            case QUERY_CONFIG_REQUEST:
-            case QUERY_REQUEST:
-                return requestBroker.processQuery(operationRequest);
-            case RPC_REQUEST:
-                return requestBroker.processOperation(operationRequest);
-            default:
-        }
-        return null;
-    }
-
-    @Override
-    public YangNotificationService getYangNotificationService() {
-        return null;
-    }
-
-    @Override
-    public void registerService(Object appManager, Class<?> yangService,
-                                List<String> supportedFeatureList) {
-    }
-
-    @Override
-    public void unRegisterService(Object appManager, Class<?> yangService) {
-
-    }
-
-    @Override
-    public YangModuleLibrary getYangModuleLibrary() {
-        return null;
-    }
-
-    @Override
-    public String getYangFile(YangModuleIdentifier moduleIdentifier) {
-        return null;
-    }
-
-    @Override
-    public void registerDefaultCodec(YangDataTreeCodec defaultCodec,
-                                     YangProtocolEncodingFormat dataFormat) {
-    }
-
-    @Override
-    public YangCodecHandler getYangCodecHandler() {
-        return null;
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yab/TestManager.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yab/TestManager.java
deleted file mode 100644
index c07a18f..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yab/TestManager.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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.yab;
-
-import org.onosproject.yang.gen.v1.ydt.test.rev20160524.Test;
-import org.onosproject.yang.gen.v1.ydt.test.rev20160524.TestOpParam;
-import org.onosproject.yang.gen.v1.ydt.test.rev20160524.TestService;
-import org.onosproject.yang.gen.v1.ydt.test.rev20160524.test.Cont1;
-import org.onosproject.yang.gen.v1.ydt.test.rev20160524.test.DefaultCont1;
-import org.onosproject.yang.gen.v1.ydt.test.rev20160524.test.rockthehouse.DefaultRockTheHouseOutput;
-import org.onosproject.yang.gen.v1.ydt.test.rev20160524.test.rockthehouse.RockTheHouseInput;
-import org.onosproject.yang.gen.v1.ydt.test.rev20160524.test.rockthehouse.RockTheHouseOutput;
-import org.onosproject.yang.gen.v1.ydt.test.rev20160524.test.rockthehouse1.RockTheHouse1Input;
-import org.onosproject.yang.gen.v1.ydt.test.rev20160524.test.rockthehouse2.DefaultRockTheHouse2Output;
-import org.onosproject.yang.gen.v1.ydt.test.rev20160524.test.rockthehouse2.RockTheHouse2Output;
-
-/**
- * Implementation of the application management service.
- */
-public class TestManager implements TestService {
-
-    Test response;
-
-    @Override
-    public Test getTest(TestOpParam test) {
-        Cont1 cont = new DefaultCont1.Cont1Builder().leaf4("4").build();
-        Test response = new TestOpParam.TestBuilder().cont1(cont).build();
-        return response;
-    }
-
-    @Override
-    public void setTest(TestOpParam test) {
-        response = test;
-    }
-
-    @Override
-    public Test getAugmentedTestCont4(TestOpParam test) {
-        Cont1 cont = new DefaultCont1.Cont1Builder().leaf4("4").build();
-        Test response = new TestOpParam.TestBuilder().cont1(cont).build();
-        return response;
-    }
-
-    @Override
-    public void setAugmentedTestCont4(TestOpParam augmentedTestCont4) {
-        response = augmentedTestCont4;
-    }
-
-    @Override
-    public RockTheHouseOutput rockTheHouse(RockTheHouseInput inputVar) {
-        return DefaultRockTheHouseOutput.builder().hello("hello").build();
-    }
-
-
-    @Override
-    public void rockTheHouse1(RockTheHouse1Input inputVar) {
-        // TODO : to be implemented
-    }
-
-    @Override
-    public RockTheHouse2Output rockTheHouse2() {
-        return DefaultRockTheHouse2Output
-                .builder().leaf14("14").build();
-    }
-
-    @Override
-    public void rockTheHouse3() {
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yab/YangApplicationBrokerTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yab/YangApplicationBrokerTest.java
deleted file mode 100644
index 0d77306..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yab/YangApplicationBrokerTest.java
+++ /dev/null
@@ -1,1088 +0,0 @@
-/*
- * 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.yab;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtAppContext;
-import org.onosproject.yms.app.ydt.YdtAppNodeOperationType;
-import org.onosproject.yms.app.ydt.YdtNode;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yms.ydt.YdtContextOperationType.DELETE;
-import static org.onosproject.yms.ydt.YdtContextOperationType.MERGE;
-import static org.onosproject.yms.ydt.YmsOperationType.EDIT_CONFIG_REQUEST;
-import static org.onosproject.yms.ydt.YmsOperationType.QUERY_CONFIG_REQUEST;
-import static org.onosproject.yms.ydt.YmsOperationType.RPC_REQUEST;
-
-/**
- * Unit test case for YANG application broker.
- */
-public class YangApplicationBrokerTest {
-
-    MockYmsManager ymsManager = new MockYmsManager();
-
-    /**
-     * Returns YANG data tree to check edit operation of container.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtForEditOperationWithoutDelete() {
-        String rootName = "root";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                EDIT_CONFIG_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test", MERGE);
-        defaultYdtBuilder.addChild("cont1", null, MERGE);
-        defaultYdtBuilder.addChild("cont2", null, MERGE);
-        defaultYdtBuilder.addChild("cont3", null, MERGE);
-        defaultYdtBuilder.addLeaf("leaf1", null, "1");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf4", null, "4");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addChild("cont4", null, MERGE);
-        defaultYdtBuilder.addChild("cont5", null, MERGE);
-        defaultYdtBuilder.addLeaf("leaf9", null, "9");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf10", null, "10");
-        return defaultYdtBuilder;
-    }
-
-    private YangRequestWorkBench buildYdtForKeyLeavesInDeleteTree() {
-        String rootName = "root";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                EDIT_CONFIG_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test", MERGE);
-        defaultYdtBuilder.addChild("list2", null, MERGE);
-        defaultYdtBuilder.addLeaf("leaf5", null, "5");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf6", null, "6");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf7", null, "7");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addChild("cont7", null, DELETE);
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to check delete operation of container.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtForEditOperationWithDelete() {
-        String rootName = "rootNode";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                EDIT_CONFIG_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test", MERGE);
-        defaultYdtBuilder.addChild("cont1", null, MERGE);
-        defaultYdtBuilder.addChild("cont2", null, DELETE);
-        defaultYdtBuilder.addChild("cont3", null, DELETE);
-        defaultYdtBuilder.addLeaf("leaf1", null, "1");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf4", null, "4");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addChild("cont4", null, DELETE);
-        defaultYdtBuilder.addChild("cont5", null, DELETE);
-        defaultYdtBuilder.addLeaf("leaf9", null, "9");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf10", null, "10");
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to check edit operation of list.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtForListEditOperationWithoutDelete() {
-        String rootName = "listWithoutDelete";
-        Set<String> valueSet = new HashSet<>();
-        valueSet.add("10");
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                EDIT_CONFIG_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test", MERGE);
-        defaultYdtBuilder.addChild("cont1", null, MERGE);
-        defaultYdtBuilder.addChild("list1", null, MERGE);
-        defaultYdtBuilder.addLeaf("leaf2", null, "2");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf3", null, "3");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf4", null, "4");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addChild("list2", null, MERGE);
-        defaultYdtBuilder.addLeaf("leaf5", null, "5");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf6", null, "6");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf7", null, "7");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaflist8", null, valueSet);
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf10", null, "10");
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to check delete operation of list.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtForListEditOperationWithDelete() {
-        String rootName = "listWithDelete";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                EDIT_CONFIG_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test", MERGE);
-        defaultYdtBuilder.addChild("cont1", null, MERGE);
-        defaultYdtBuilder.addChild("list1", null, DELETE);
-        defaultYdtBuilder.addLeaf("leaf2", null, "2");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf3", null, "3");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf4", null, "4");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addChild("list2", null, DELETE);
-        defaultYdtBuilder.addLeaf("leaf5", null, "5");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf6", null, "6");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf10", null, "10");
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to check query operation of container.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtForQueryOperation() {
-        String rootName = "root";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                QUERY_CONFIG_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test");
-        defaultYdtBuilder.addChild("cont1", null);
-        defaultYdtBuilder.addChild("cont2", null);
-        defaultYdtBuilder.addChild("cont3", null);
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addChild("cont4", null);
-        defaultYdtBuilder.addChild("cont5", null);
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to check query operation of list.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtForListQueryOperation() {
-        String rootName = "listQuery";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                QUERY_CONFIG_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test");
-        defaultYdtBuilder.addChild("cont1", null);
-        defaultYdtBuilder.addChild("list1", null);
-        defaultYdtBuilder.addLeaf("leaf2", null, "2");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addChild("list2", null);
-        defaultYdtBuilder.addLeaf("leaf5", null, "5");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf6", null, "6");
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to check delete operation of a node.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtWithOneDeleteNode() {
-        String rootName = "root";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                EDIT_CONFIG_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test");
-        defaultYdtBuilder.addChild("cont1", null, MERGE);
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addChild("cont4", null, DELETE);
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf10", null, "10");
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to check delete operation of last node.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtWithDeleteNodeAsLastChild() {
-        String rootName = "root";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                EDIT_CONFIG_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test", MERGE);
-        defaultYdtBuilder.addChild("cont1", null, MERGE);
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addChild("list2", null, MERGE);
-        defaultYdtBuilder.addLeaf("leaf5", null, "10");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf6", null, "10");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addChild("cont4", null, DELETE);
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to with delete operation of all the nodes.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtWithAllDeleteNode() {
-        String rootName = "root";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                EDIT_CONFIG_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test", DELETE);
-        defaultYdtBuilder.addChild("cont1", null, DELETE);
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addChild("list2", null, DELETE);
-        defaultYdtBuilder.addLeaf("leaf5", null, "10");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addLeaf("leaf6", null, "10");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addChild("cont4", null, DELETE);
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to check rpc operation with only input.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtForRpcWithOnlyInput() {
-        String rootName = "root";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                RPC_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test");
-        defaultYdtBuilder.addChild("rock-the-house1", null);
-        defaultYdtBuilder.addChild("input", null);
-        defaultYdtBuilder.addLeaf("leaf13", null, "5");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to check rpc operation with only output.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtForRpcWithOnlyOutput() {
-        String rootName = "root";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                RPC_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test");
-        defaultYdtBuilder.addChild("rock-the-house2", null);
-        defaultYdtBuilder.addChild("output", null);
-        defaultYdtBuilder.addLeaf("leaf14", null, "14");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to check rpc operation with both input and output.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtForRpcWithBothInputOutput() {
-        String rootName = "root";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                RPC_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test");
-        defaultYdtBuilder.addChild("rock-the-house", null);
-        defaultYdtBuilder.addChild("input", null);
-        defaultYdtBuilder.addLeaf("zip-code", null, "5");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.addChild("output", null);
-        defaultYdtBuilder.addLeaf("hello", null, "5");
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to check rpc operation.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtForRpc() {
-        String rootName = "root";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                RPC_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test");
-        defaultYdtBuilder.addChild("rock-the-house3", null);
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to check query operation with multiple level of
-     * augment.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtForQueryWithMultipleAugment() {
-        String rootName = "root";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                QUERY_CONFIG_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test");
-        defaultYdtBuilder.traverseToParent();
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Returns YANG data tree to check delete operation with multiple level of
-     * augment.
-     *
-     * @return YANG data tree
-     */
-    private YangRequestWorkBench buildYdtForDeleteWithMultipleAugment() {
-        String rootName = "root";
-        YangRequestWorkBench defaultYdtBuilder =
-                (YangRequestWorkBench) ymsManager.getYdtBuilder(rootName, null,
-                                                                EDIT_CONFIG_REQUEST);
-        defaultYdtBuilder.addChild("test", "ydt.test");
-        defaultYdtBuilder.addChild("cont4", null, DELETE);
-        defaultYdtBuilder.traverseToParent();
-        defaultYdtBuilder.traverseToParent();
-        return defaultYdtBuilder;
-    }
-
-    /**
-     * Checks whether YANG data tree and delete tree is correct.
-     */
-    @Test
-    public void validateDeleteTreeOnlyOneNodeInDeleteList()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtForEditOperationWithDelete();
-        YdtAppContext appContext =
-                defaultYdtBuilder.getAppRootNode().getFirstChild();
-        YdtContext ydtContext = appContext.getModuleContext();
-        List<YdtContext> deleteNodes = appContext.getDeleteNodes();
-
-        YdtContext cont1YdtContext;
-        YdtContext cont2YdtContext;
-        YdtContext cont3YdtContext;
-        YdtContext cont4YdtContext;
-        YdtContext deleteTree;
-
-        // verify whether ydt tree is correct
-        assertThat(ydtContext.getName(), is("test"));
-
-        cont1YdtContext = ydtContext.getFirstChild();
-        assertThat(cont1YdtContext.getName(), is("cont1"));
-
-        cont2YdtContext = cont1YdtContext.getFirstChild();
-        assertThat(cont2YdtContext.getName(), is("cont2"));
-
-        cont3YdtContext = cont2YdtContext.getFirstChild();
-        assertThat(cont3YdtContext.getName(), is("cont3"));
-
-        ydtContext = cont3YdtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("leaf1"));
-        assertThat(ydtContext.getValue(), is("1"));
-
-        ydtContext = cont2YdtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf4"));
-        assertThat(ydtContext.getValue(), is("4"));
-
-        cont4YdtContext = cont1YdtContext.getNextSibling();
-        assertThat(cont4YdtContext.getName(), is("cont4"));
-
-        ydtContext = cont4YdtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("cont5"));
-
-        ydtContext = ydtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("leaf9"));
-        assertThat(ydtContext.getValue(), is("9"));
-
-        ydtContext = cont4YdtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf10"));
-        assertThat(ydtContext.getValue(), is("10"));
-
-        // build delete tree
-        YangApplicationBroker yab = new YangApplicationBroker(null);
-        deleteTree = yab.buildDeleteTree(deleteNodes);
-
-        // verify whether delete ydt tree is correct
-        assertThat(deleteTree.getFirstChild().getName(), is("test"));
-
-        cont1YdtContext = deleteTree.getFirstChild().getFirstChild();
-        assertThat(cont1YdtContext.getName(), is("cont1"));
-
-        cont2YdtContext = cont1YdtContext.getFirstChild();
-        assertThat(cont2YdtContext.getName(), is("cont2"));
-
-        cont3YdtContext = cont2YdtContext.getFirstChild();
-        assertThat(cont3YdtContext.getName(), is("cont3"));
-
-        ydtContext = cont3YdtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("leaf1"));
-        assertThat(ydtContext.getValue(), is("1"));
-
-        assertThat(cont2YdtContext.getNextSibling(), nullValue());
-
-        cont4YdtContext = cont1YdtContext.getNextSibling();
-        assertThat(cont4YdtContext.getName(), is("cont4"));
-
-        ydtContext = cont4YdtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("cont5"));
-
-        ydtContext = ydtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("leaf9"));
-        assertThat(ydtContext.getValue(), is("9"));
-
-        assertThat(cont4YdtContext.getNextSibling(), nullValue());
-
-        // ydtTree after removing delete nodes
-        ydtContext = appContext.getModuleContext();
-        assertThat(ydtContext.getName(), is("test"));
-
-        cont1YdtContext = ydtContext.getFirstChild();
-        assertThat(cont1YdtContext.getName(), is("cont1"));
-
-        ydtContext = cont1YdtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("leaf4"));
-        assertThat(ydtContext.getValue(), is("4"));
-
-        ydtContext = cont1YdtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf10"));
-        assertThat(ydtContext.getValue(), is("10"));
-    }
-
-    /**
-     * Checks whether YANG data tree and delete tree is correct.
-     */
-    @Test
-    public void validateListDeleteTree()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtForListEditOperationWithDelete();
-        YdtAppContext appContext =
-                defaultYdtBuilder.getAppRootNode().getFirstChild();
-        YdtContext ydtContext = appContext.getModuleContext();
-        List<YdtContext> deleteNodes = appContext.getDeleteNodes();
-
-        YdtContext cont1YdtContext;
-        YdtContext list1YdtContext;
-        YdtContext list2YdtContext;
-        YdtContext deleteTree;
-
-        // verify whether ydt tree is correct
-        assertThat(ydtContext.getName(), is("test"));
-
-        cont1YdtContext = ydtContext.getFirstChild();
-        assertThat(cont1YdtContext.getName(), is("cont1"));
-
-        list1YdtContext = cont1YdtContext.getFirstChild();
-        assertThat(list1YdtContext.getName(), is("list1"));
-
-        ydtContext = list1YdtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("leaf2"));
-        assertThat(ydtContext.getValue(), is("2"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf3"));
-        assertThat(ydtContext.getValue(), is("3"));
-
-        ydtContext = list1YdtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf4"));
-        assertThat(ydtContext.getValue(), is("4"));
-
-        list2YdtContext = cont1YdtContext.getNextSibling();
-        assertThat(list2YdtContext.getName(), is("list2"));
-
-        ydtContext = list2YdtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("leaf5"));
-        assertThat(ydtContext.getValue(), is("5"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf6"));
-        assertThat(ydtContext.getValue(), is("6"));
-
-        ydtContext = list2YdtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf10"));
-        assertThat(ydtContext.getValue(), is("10"));
-
-        // build delete tree
-        YangApplicationBroker yab = new YangApplicationBroker(null);
-        deleteTree = yab.buildDeleteTree(deleteNodes);
-
-        assertThat(deleteTree.getFirstChild().getName(), is("test"));
-
-        cont1YdtContext = deleteTree.getFirstChild().getFirstChild();
-        assertThat(cont1YdtContext.getName(), is("cont1"));
-
-        list1YdtContext = cont1YdtContext.getFirstChild();
-        assertThat(list1YdtContext.getName(), is("list1"));
-
-        ydtContext = list1YdtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("leaf2"));
-        assertThat(ydtContext.getValue(), is("2"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf3"));
-        assertThat(ydtContext.getValue(), is("3"));
-
-        assertThat(list1YdtContext.getNextSibling(), nullValue());
-
-        list2YdtContext = cont1YdtContext.getNextSibling();
-        assertThat(list2YdtContext.getName(), is("list2"));
-
-        ydtContext = list2YdtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("leaf5"));
-        assertThat(ydtContext.getValue(), is("5"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf6"));
-        assertThat(ydtContext.getValue(), is("6"));
-
-        assertThat(ydtContext.getNextSibling(), nullValue());
-
-        // verify whether ydt tree is correct
-        ydtContext = appContext.getModuleContext();
-        assertThat(ydtContext.getName(), is("test"));
-
-        cont1YdtContext = ydtContext.getFirstChild();
-        assertThat(cont1YdtContext.getName(), is("cont1"));
-
-        ydtContext = cont1YdtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("leaf4"));
-        assertThat(ydtContext.getValue(), is("4"));
-
-        ydtContext = cont1YdtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf10"));
-        assertThat(ydtContext.getValue(), is("10"));
-    }
-
-    /**
-     * Checks whether there is no exception when there is valid edit
-     * request.
-     */
-    @Test
-    public void testExecuteEditOperationWithoutDelete()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtForEditOperationWithoutDelete();
-        ymsManager.executeOperation(defaultYdtBuilder);
-    }
-
-    /**
-     * Checks whether there is no exception when there is valid delete
-     * request.
-     */
-    @Test
-    public void testExecuteEditOperationWithDelete()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtForEditOperationWithDelete();
-        ymsManager.executeOperation(defaultYdtBuilder);
-    }
-
-    /**
-     * Checks whether there is no exception when there is valid edit
-     * request for list.
-     */
-    @Test
-    public void testExecuteListEditOperationWithoutDelete()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtForListEditOperationWithoutDelete();
-        ymsManager.executeOperation(defaultYdtBuilder);
-    }
-
-    /**
-     * Checks whether there is no exception when there is valid delete
-     * request for list.
-     */
-    @Test
-    public void testExecuteListEditOperationWithDelete()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtForListEditOperationWithDelete();
-        ymsManager.executeOperation(defaultYdtBuilder);
-    }
-
-    /**
-     * Checks whether there is no exception when there is valid query
-     * request.
-     */
-    @Test
-    public void testExecuteQueryOperation()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder = buildYdtForQueryOperation();
-        ymsManager.executeOperation(defaultYdtBuilder);
-    }
-
-    /**
-     * Checks whether there is no exception when there is valid query
-     * request for list.
-     */
-    @Test
-    public void testExecuteListQueryOperation()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtForListQueryOperation();
-        ymsManager.executeOperation(defaultYdtBuilder);
-    }
-
-    /**
-     * Checks whether delete tree is updated correctly.
-     */
-    @Test
-    public void testSiblingsInDeleteTree()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder = buildYdtWithOneDeleteNode();
-        YdtAppContext appContext =
-                defaultYdtBuilder.getAppRootNode().getFirstChild();
-        YdtContext ydtContext = appContext.getModuleContext();
-        List<YdtContext> deleteNodes = appContext.getDeleteNodes();
-
-        // verify whether ydt tree is correct
-        assertThat(ydtContext.getName(), is("test"));
-
-        ydtContext = ydtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("cont1"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("cont4"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf10"));
-        assertThat(ydtContext.getValue(), is("10"));
-
-        // build delete tree
-        YangApplicationBroker yab = new YangApplicationBroker(null);
-        YdtContext deleteTree = yab.buildDeleteTree(deleteNodes);
-
-        assertThat(deleteTree.getFirstChild().getName(), is("test"));
-
-        ydtContext = deleteTree.getFirstChild().getFirstChild();
-        assertThat(ydtContext.getName(), is("cont4"));
-
-        assertThat(ydtContext.getNextSibling(), nullValue());
-        assertThat(ydtContext.getPreviousSibling(), nullValue());
-
-        ydtContext = appContext.getModuleContext();
-
-        // verify whether ydt tree is correct
-        assertThat(ydtContext.getName(), is("test"));
-
-        ydtContext = ydtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("cont1"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf10"));
-        assertThat(ydtContext.getValue(), is("10"));
-
-        assertThat(ydtContext.getNextSibling(), nullValue());
-    }
-
-    /**
-     * Checks last child is updated correctly after delete tree is built.
-     */
-    @Test
-    public void testLastChildInYdtTree()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtWithDeleteNodeAsLastChild();
-        YdtAppContext appContext =
-                defaultYdtBuilder.getAppRootNode().getFirstChild();
-        YdtContext ydtContext = appContext.getModuleContext();
-        List<YdtContext> deleteNodes = appContext.getDeleteNodes();
-        assertThat(YdtAppNodeOperationType.BOTH,
-                   is(appContext.getOperationType()));
-
-        // verify whether ydt tree is correct
-        assertThat(ydtContext.getName(), is("test"));
-
-        ydtContext = ydtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("cont1"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("list2"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("cont4"));
-
-        assertThat(ydtContext.getNextSibling(), nullValue());
-
-        // build delete tree
-        YangApplicationBroker yab = new YangApplicationBroker(null);
-        YdtContext deleteTree = yab.buildDeleteTree(deleteNodes);
-
-        assertThat(deleteTree.getFirstChild().getName(), is("test"));
-
-        ydtContext = deleteTree.getFirstChild().getFirstChild();
-        assertThat(ydtContext.getName(), is("cont4"));
-
-        ydtContext = deleteTree.getFirstChild().getLastChild();
-        assertThat(ydtContext.getName(), is("cont4"));
-
-        assertThat(ydtContext.getNextSibling(), nullValue());
-        assertThat(ydtContext.getPreviousSibling(), nullValue());
-
-        ydtContext = appContext.getModuleContext();
-
-        assertThat(ydtContext.getLastChild().getName(), is("list2"));
-
-        // verify whether ydt tree is correct
-        assertThat(ydtContext.getName(), is("test"));
-
-        ydtContext = ydtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("cont1"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("list2"));
-
-        assertThat(ydtContext.getNextSibling(), nullValue());
-    }
-
-    /**
-     * Checks YDT tree with all delete nodes.
-     */
-    @Test
-    public void testYdtTreeWithAllDeleteNodes()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder = buildYdtWithAllDeleteNode();
-        YdtAppContext appContext =
-                defaultYdtBuilder.getAppRootNode().getFirstChild();
-        YdtContext ydtContext = appContext.getModuleContext();
-        List<YdtContext> deleteNodes = appContext.getDeleteNodes();
-
-        assertThat(YdtAppNodeOperationType.DELETE_ONLY,
-                   is(appContext.getOperationType()));
-
-        // verify whether ydt tree is correct
-        assertThat(ydtContext.getName(), is("test"));
-
-        ydtContext = ydtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("cont1"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("list2"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("cont4"));
-
-        assertThat(ydtContext.getNextSibling(), nullValue());
-
-        // build delete tree
-        YangApplicationBroker yab = new YangApplicationBroker(null);
-        YdtContext deleteTree = yab.buildDeleteTree(deleteNodes);
-
-        assertThat(deleteTree.getFirstChild().getName(), is("test"));
-
-        ydtContext = deleteTree.getFirstChild().getFirstChild();
-        assertThat(ydtContext.getName(), is("cont1"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("list2"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("cont4"));
-
-        assertThat(ydtContext.getNextSibling(), nullValue());
-    }
-
-    /**
-     * Checks whether key leaves are also available when there is delete
-     * request for list.
-     */
-    @Test
-    public void testKeyLeavesInDeleteTree() throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder = buildYdtForKeyLeavesInDeleteTree();
-
-        YdtAppContext appContext =
-                defaultYdtBuilder.getAppRootNode().getFirstChild();
-        YdtContext ydtContext = appContext.getModuleContext();
-        List<YdtContext> deleteNodes = appContext.getDeleteNodes();
-
-        assertThat(YdtAppNodeOperationType.BOTH, is(appContext.getOperationType()));
-
-        // verify whether ydt tree is correct
-        assertThat(ydtContext.getName(), is("test"));
-
-        ydtContext = ydtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("list2"));
-
-        ydtContext = ydtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("leaf5"));
-        assertThat(ydtContext.getValue(), is("5"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf6"));
-        assertThat(ydtContext.getValue(), is("6"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf7"));
-        assertThat(ydtContext.getValue(), is("7"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("cont7"));
-
-        assertThat(ydtContext.getNextSibling(), nullValue());
-
-        // build delete tree
-        YangApplicationBroker yab = new YangApplicationBroker(null);
-        YdtContext deleteTree = yab.buildDeleteTree(deleteNodes);
-
-        assertThat(deleteTree.getFirstChild().getName(), is("test"));
-
-        ydtContext = deleteTree.getFirstChild().getFirstChild();
-        assertThat(ydtContext.getName(), is("list2"));
-
-        ydtContext = ydtContext.getFirstChild();
-        assertThat(ydtContext, notNullValue());
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext, notNullValue());
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("cont7"));
-
-        assertThat(ydtContext.getNextSibling(), nullValue());
-
-        ydtContext = appContext.getModuleContext();
-
-        // verify whether ydt tree is correct
-        assertThat(ydtContext.getName(), is("test"));
-
-        ydtContext = ydtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("list2"));
-
-        ydtContext = ydtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("leaf5"));
-        assertThat(ydtContext.getValue(), is("5"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf6"));
-        assertThat(ydtContext.getValue(), is("6"));
-
-        ydtContext = ydtContext.getNextSibling();
-        assertThat(ydtContext.getName(), is("leaf7"));
-        assertThat(ydtContext.getValue(), is("7"));
-
-        assertThat(ydtContext.getNextSibling(), nullValue());
-    }
-
-    /**
-     * Checks YDT tree and application tree for query request with mutiple
-     * augments.
-     */
-    @Test
-    public void testApptreeForQueryWithMultipleAugment()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder = buildYdtForQueryWithMultipleAugment();
-        YdtAppContext appContext = defaultYdtBuilder.getAppRootNode()
-                .getFirstChild();
-        YdtContext ydtNode = appContext.getModuleContext();
-        YangNode yangNode = (YangNode) ((YdtNode) ydtNode).getYangSchemaNode();
-
-        YangApplicationBroker yab = new YangApplicationBroker(defaultYdtBuilder.
-                getYangSchemaRegistry());
-        yab.processAugmentForChildNode(appContext, yangNode);
-
-        assertThat(appContext.getModuleContext().getName(), is("test"));
-
-        appContext = appContext.getFirstChild();
-
-        String augmentName = ((YangAugment) appContext
-                .getAugmentingSchemaNode()).getTargetNode().get(0)
-                .getResolvedNode().getJavaClassNameOrBuiltInType();
-        assertThat(augmentName, is("cont4"));
-
-        appContext = appContext.getFirstChild();
-        augmentName = ((YangAugment) appContext
-                .getAugmentingSchemaNode()).getTargetNode().get(0)
-                .getResolvedNode().getJavaClassNameOrBuiltInType();
-        assertThat(augmentName, is("cont4"));
-        assertThat(appContext.getFirstChild(), nullValue());
-        assertThat(appContext.getLastChild(), nullValue());
-    }
-
-    /**
-     * Checks whether there is no exception when there is valid query request
-     * for data resource with multiple augments.
-     */
-    @Test
-    public void testQueryWithMultipleAugment()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder = buildYdtForQueryWithMultipleAugment();
-        ymsManager.executeOperation(defaultYdtBuilder);
-    }
-
-    /**
-     * Checks whether YDT is updated correctly for delete with multiple augment.
-     */
-    @Test
-    public void testYdtForDeleteWithMultipleAugment()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtForDeleteWithMultipleAugment();
-        YdtAppContext appContext = defaultYdtBuilder.getAppRootNode()
-                .getFirstChild();
-
-        YangApplicationBroker yab = new YangApplicationBroker(defaultYdtBuilder.
-                getYangSchemaRegistry());
-        YdtContext deleteTree = yab.buildDeleteTree(appContext.getDeleteNodes());
-        yab.processAugmentedNodesForDelete(deleteTree.getFirstChild(),
-                                           appContext);
-
-        assertThat(appContext.getModuleContext().getName(), is("test"));
-
-        appContext = appContext.getFirstChild();
-        String augmentName = ((YangAugment) appContext
-                .getAugmentingSchemaNode()).getTargetNode().get(0)
-                .getResolvedNode().getJavaClassNameOrBuiltInType();
-        assertThat(augmentName, is("cont4"));
-
-        appContext = appContext.getFirstChild();
-        augmentName = ((YangAugment) appContext
-                .getAugmentingSchemaNode()).getTargetNode().get(0)
-                .getResolvedNode().getJavaClassNameOrBuiltInType();
-        assertThat(augmentName, is("cont4"));
-        assertThat(appContext.getFirstChild(), nullValue());
-        assertThat(appContext.getLastChild(), nullValue());
-
-        YdtContext ydtContext = deleteTree.getFirstChild();
-        assertThat(ydtContext.getName(), is("test"));
-
-        ydtContext = ydtContext.getFirstChild();
-        assertThat(ydtContext.getName(), is("cont4"));
-    }
-
-    /**
-     * Checks whether there is no exception when there is valid delete request
-     * for data resource with multiple augments.
-     */
-    @Test
-    public void testDeleteWithMultipleAugment() {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtForDeleteWithMultipleAugment();
-        ymsManager.executeOperation(defaultYdtBuilder);
-    }
-
-    /**
-     * Checks execute operation for rpc request with only output.
-     */
-    @Test
-    public void testRpcWithOutput()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtForRpcWithOnlyOutput();
-        ymsManager.executeOperation(defaultYdtBuilder);
-    }
-
-    /**
-     * Checks execute operation for rpc request with only input.
-     */
-    @Test
-    public void testRpcWithInput()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtForRpcWithOnlyInput();
-        ymsManager.executeOperation(defaultYdtBuilder);
-    }
-
-    /**
-     * Checks execute operation for rpc request with input and output.
-     */
-    @Test
-    public void testRpcWithInputOutput()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtForRpcWithBothInputOutput();
-        ymsManager.executeOperation(defaultYdtBuilder);
-    }
-
-    /**
-     * Checks execute operation for rpc request without input and
-     * output.
-     */
-    @Test
-    public void testRpcWithoutInputOutput()
-            throws IOException, CloneNotSupportedException {
-        YangRequestWorkBench defaultYdtBuilder =
-                buildYdtForRpc();
-        ymsManager.executeOperation(defaultYdtBuilder);
-    }
-}
\ No newline at end of file
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobAugmentTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobAugmentTest.java
deleted file mode 100644
index a50d3a5..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobAugmentTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2016. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
- * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
- * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
- * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
- * Vestibulum commodo. Ut rhoncus gravida arcu.
- */
-
-package org.onosproject.yms.app.yob;
-
-import org.junit.Test;
-import org.onosproject.yang.gen.v1.urn.ip.topo.rev20140101.ymsiptopology.node.AugmentedTopoNode;
-import org.onosproject.yang.gen.v1.urn.ip.topo.rev20140101.ymsiptopology.node.DefaultAugmentedTopoNode;
-import org.onosproject.yang.gen.v1.urn.topo.rev20140101.YmsTopologyOpParam;
-import org.onosproject.yang.gen.v1.urn.topo.rev20140101.ymstopology.DefaultNode;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.io.IOException;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-import static org.onosproject.yms.app.yob.YobTestUtils.NODE;
-import static org.onosproject.yms.app.yob.YobTestUtils.ROOT_DATA_RESOURCE;
-import static org.onosproject.yms.app.yob.YobTestUtils.ROUTER_ID;
-import static org.onosproject.yms.app.yob.YobTestUtils.ROUTER_IP;
-import static org.onosproject.yms.app.yob.YobTestUtils.STR_LEAF_VALUE;
-import static org.onosproject.yms.app.yob.YobTestUtils.TOPOLOGY;
-import static org.onosproject.yms.ydt.YdtContextOperationType.NONE;
-
-/**
- * Test the YANG object building for the YANG data tree based on the non
- * schema augmented nodes.
- */
-public class YobAugmentTest {
-
-    private YobTestUtils utils = YobTestUtils.instance();
-
-    @Test
-    public void augmentedLeaf() throws IOException {
-
-        YangRequestWorkBench ydtBuilder = new YangRequestWorkBench(
-                ROOT_DATA_RESOURCE, null, null, utils.schemaRegistry(),
-                true);
-
-        ydtBuilder.addChild(TOPOLOGY, null, NONE);
-        ydtBuilder.addChild(NODE, null);
-        ydtBuilder.addLeaf(ROUTER_ID, "urn:ip:topo", STR_LEAF_VALUE);
-
-        YdtContext logicalRoot = ydtBuilder.getRootNode();
-        YdtExtendedContext appRoot =
-                (YdtExtendedContext) logicalRoot.getFirstChild();
-
-        DefaultYobBuilder yobBuilder = new DefaultYobBuilder();
-        Object yangObject = yobBuilder.getYangObject(appRoot,
-                                                     utils.schemaRegistry());
-        assertNotNull("Fail to create augmented YANG object", yangObject);
-
-        assertEquals("invalid augmented node created", YmsTopologyOpParam.class,
-                     yangObject.getClass());
-
-        YmsTopologyOpParam topology = (YmsTopologyOpParam) yangObject;
-        assertNotNull("failed to build augmented node", topology.node());
-        assertEquals("Single node entry is expected", 1, topology.node().size());
-        assertEquals("Node type is not DefaultNode", DefaultNode.class,
-                     topology.node().get(0).getClass());
-
-        DefaultNode node = (DefaultNode) topology.node().get(0);
-        assertNotNull("Augmented info is missing", node.yangAugmentedInfo(
-                AugmentedTopoNode.class));
-        assertEquals("Augmented class is incorrect",
-                     DefaultAugmentedTopoNode.class,
-                     node.yangAugmentedInfo(AugmentedTopoNode.class)
-                             .getClass());
-
-        DefaultAugmentedTopoNode augmentedNode = (DefaultAugmentedTopoNode)
-                node.yangAugmentedInfo(AugmentedTopoNode.class);
-        assertThat("Augmented leaf value is incorrect",
-                   augmentedNode.routerId(), is(STR_LEAF_VALUE));
-    }
-
-    @Test
-    public void augmentedLeaves() throws IOException {
-
-        YangRequestWorkBench ydtBuilder = new YangRequestWorkBench(
-                ROOT_DATA_RESOURCE, null, null, utils.schemaRegistry(),
-                true);
-
-        ydtBuilder.addChild(TOPOLOGY, null, NONE);
-        ydtBuilder.addChild(NODE, null);
-        ydtBuilder.addLeaf(ROUTER_ID, "urn:ip:topo", STR_LEAF_VALUE);
-        ydtBuilder.traverseToParent();
-        ydtBuilder.addLeaf(ROUTER_IP, "urn:ip:topo", STR_LEAF_VALUE);
-
-        YdtContext logicalRoot = ydtBuilder.getRootNode();
-        YdtExtendedContext appRoot =
-                (YdtExtendedContext) logicalRoot.getFirstChild();
-
-        DefaultYobBuilder yobBuilder = new DefaultYobBuilder();
-        Object yangObject = yobBuilder.getYangObject(appRoot,
-                                                     utils.schemaRegistry());
-        assertNotNull("Fail to create augmented YANG object", yangObject);
-
-        assertEquals("invalid augmented node created",
-                     YmsTopologyOpParam.class, yangObject.getClass());
-
-        YmsTopologyOpParam topology = (YmsTopologyOpParam) yangObject;
-        assertNotNull("failed to build augmented node", topology.node());
-        assertEquals("Single node entry is expected", 1,
-                     topology.node().size());
-        assertEquals("Node type is not DefaultNode", DefaultNode.class,
-                     topology.node().get(0).getClass());
-
-        DefaultNode node = (DefaultNode) topology.node().get(0);
-        assertNotNull("Augmented info is missing", node.yangAugmentedInfo(
-                AugmentedTopoNode.class));
-        assertEquals("Augmented class is incorrect",
-                     DefaultAugmentedTopoNode.class,
-                     node.yangAugmentedInfo(AugmentedTopoNode.class)
-                             .getClass());
-
-        DefaultAugmentedTopoNode augmentedNode = (DefaultAugmentedTopoNode)
-                node.yangAugmentedInfo(AugmentedTopoNode.class);
-        assertThat("Augmented router id is incorrect",
-                   augmentedNode.routerId(), is(STR_LEAF_VALUE));
-        assertThat("Augmented router ip is incorrect",
-                   augmentedNode.routerIp(), is(STR_LEAF_VALUE));
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobBinaryTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobBinaryTest.java
deleted file mode 100644
index a749874..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobBinaryTest.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-import org.onosproject.yang.gen.v1.ydt.binarytest.rev20160524.BinarytestOpParam;
-import org.onosproject.yang.gen.v1.ydt.binarytest.rev20160524.binarytest.cont1.AugmentedCont1;
-import org.onosproject.yang.gen.v1.ydt.binarytest.rev20160524.binarytest.food.snack.Sportsarena;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.io.IOException;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.IsNull.notNullValue;
-import static org.onosproject.yms.app.yob.YobTestUtils.ROOT_DATA_RESOURCE;
-
-/**
- * Test the YANG object building for the YANG data tree based on the binary.
- */
-public class YobBinaryTest {
-
-    private YobTestUtils utils = YobTestUtils.instance();
-
-    @Test
-    public void testBinaryInLeaf() throws IOException {
-        YangRequestWorkBench ydtBuilder = new YangRequestWorkBench(
-                ROOT_DATA_RESOURCE, null, null, utils.schemaRegistry(), true);
-        ydtBuilder.addChild("binarytest", "ydt.binarytest");
-        ydtBuilder.addChild("binaryList", null);
-        ydtBuilder.addLeaf("binary", null, "YmluYXJ5");
-        ydtBuilder.traverseToParent();
-        ydtBuilder.traverseToParent();
-        ydtBuilder.traverseToParent();
-        YdtContext rootCtx = ydtBuilder.getRootNode();
-        YdtContext childCtx = rootCtx.getFirstChild();
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, utils.schemaRegistry());
-        assertThat(yangObject, notNullValue());
-        BinarytestOpParam binarytestOpParam = ((BinarytestOpParam) yangObject);
-
-        byte[] binaryValue = binarytestOpParam.binaryList().get(0).binary();
-        String value = new String(binaryValue);
-        assertThat(value, is("binary"));
-    }
-
-    @Test
-    public void testBinaryInTypedef() throws IOException {
-        YangRequestWorkBench ydtBuilder = new YangRequestWorkBench(
-                ROOT_DATA_RESOURCE, null, null, utils.schemaRegistry(), true);
-        ydtBuilder.addChild("binarytest", "ydt.binarytest");
-        ydtBuilder.addLeaf("name", null, "YmluYXJ5");
-        ydtBuilder.traverseToParent();
-        ydtBuilder.traverseToParent();
-        YdtContext rootCtx = ydtBuilder.getRootNode();
-        YdtContext childCtx = rootCtx.getFirstChild();
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, utils.schemaRegistry());
-        assertThat(yangObject, notNullValue());
-        BinarytestOpParam binarytestOpParam = ((BinarytestOpParam) yangObject);
-
-        byte[] binaryValue = binarytestOpParam.name().binary();
-        String value = new String(binaryValue);
-        assertThat(value, is("binary"));
-    }
-
-    @Test
-    public void testBinaryInGrouping() throws IOException {
-        YangRequestWorkBench ydtBuilder = new YangRequestWorkBench(
-                ROOT_DATA_RESOURCE, null, null, utils.schemaRegistry(), true);
-        ydtBuilder.addChild("binarytest", "ydt.binarytest");
-        ydtBuilder.addChild("cont1", "ydt.binarytest");
-        ydtBuilder.addLeaf("surname", null, "YmluYXJ5");
-        ydtBuilder.traverseToParent();
-        ydtBuilder.traverseToParent();
-        YdtContext rootCtx = ydtBuilder.getRootNode();
-        YdtContext childCtx = rootCtx.getFirstChild();
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, utils.schemaRegistry());
-        assertThat(yangObject, notNullValue());
-        BinarytestOpParam binarytestOpParam = ((BinarytestOpParam) yangObject);
-
-        byte[] binaryValue = binarytestOpParam.cont1().surname();
-        String value = new String(binaryValue);
-        assertThat(value, is("binary"));
-    }
-
-    @Test
-    public void testBinaryInAugment() throws IOException {
-        YangRequestWorkBench ydtBuilder = new YangRequestWorkBench(
-                ROOT_DATA_RESOURCE, null, null, utils.schemaRegistry(), true);
-        ydtBuilder.addChild("binarytest", "ydt.binarytest");
-        ydtBuilder.addChild("cont1", "ydt.binarytest");
-        ydtBuilder.addLeaf("lastname", null, "YmluYXJ5");
-        ydtBuilder.traverseToParent();
-        ydtBuilder.traverseToParent();
-        YdtContext rootCtx = ydtBuilder.getRootNode();
-        YdtContext childCtx = rootCtx.getFirstChild();
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, utils.schemaRegistry());
-        assertThat(yangObject, notNullValue());
-        BinarytestOpParam binarytestOpParam = ((BinarytestOpParam) yangObject);
-
-        AugmentedCont1 augmentedCont1 = (AugmentedCont1) binarytestOpParam.cont1()
-                .yangAugmentedInfo(AugmentedCont1.class);
-        byte[] binaryValue = augmentedCont1.lastname();
-        String value = new String(binaryValue);
-        assertThat(value, is("binary"));
-    }
-
-    @Test
-    public void testBinaryInCase() throws IOException {
-        YangRequestWorkBench ydtBuilder = new YangRequestWorkBench(
-                ROOT_DATA_RESOURCE, null, null, utils.schemaRegistry(), true);
-        ydtBuilder.addChild("binarytest", "ydt.binarytest");
-        ydtBuilder.addChild("food", "ydt.binarytest");
-        ydtBuilder.addLeaf("pretzel", null, "YmluYXJ5");
-        ydtBuilder.traverseToParent();
-        ydtBuilder.traverseToParent();
-        YdtContext rootCtx = ydtBuilder.getRootNode();
-        YdtContext childCtx = rootCtx.getFirstChild();
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, utils.schemaRegistry());
-        assertThat(yangObject, notNullValue());
-        BinarytestOpParam binarytestOpParam = ((BinarytestOpParam) yangObject);
-        Sportsarena sportsArena = ((Sportsarena) binarytestOpParam.food()
-                .snack());
-        byte[] binaryValue = sportsArena.pretzel();
-        String value = new String(binaryValue);
-        assertThat(value, is("binary"));
-    }
-
-    @Test
-    public void testBinaryInUnion() throws IOException {
-        YangRequestWorkBench ydtBuilder = new YangRequestWorkBench(
-                ROOT_DATA_RESOURCE, null, null, utils.schemaRegistry(), true);
-        ydtBuilder.addChild("binarytest", "ydt.binarytest");
-        ydtBuilder.addLeaf("middlename", null, "YmluYXJ5");
-        ydtBuilder.traverseToParent();
-        ydtBuilder.traverseToParent();
-        YdtContext rootCtx = ydtBuilder.getRootNode();
-        YdtContext childCtx = rootCtx.getFirstChild();
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, utils.schemaRegistry());
-        assertThat(yangObject, notNullValue());
-        BinarytestOpParam binarytestOpParam = ((BinarytestOpParam) yangObject);
-
-        byte[] binaryValue = binarytestOpParam.middlename().binary();
-        String value = new String(binaryValue);
-        assertThat(value, is("binary"));
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobBitTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobBitTest.java
deleted file mode 100644
index 6b4b526..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobBitTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-
-import java.io.IOException;
-
-public class YobBitTest {
-
-/*
-    BINARY
-
-    Positive scenario
-    input with position 0
-    input with position 1
-    input with position 2
-*/
-
-
-    @Test
-    public void positiveTest() throws IOException {
-
-        //TODO for getYangObject
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobBooleanTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobBooleanTest.java
deleted file mode 100644
index 83ce3f6..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobBooleanTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.app.ydt.YdtTestUtils;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.lang.reflect.Field;
-import java.util.List;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-public class YobBooleanTest {
-
-    private static final String BOOLEAN_LIST = "booleanList";
-    private static final String AUTO_PREFIX_BOOLEAN = "yangAutoPrefixBoolean";
-
-    /*
-        BOOLEAN
-        Positive scenario
-        input with in true and false
-    */
-    @Test
-    public void positiveTest() {
-        YangRequestWorkBench defaultYdtBuilder = YdtTestUtils.booleanYdt();
-        validateYangObject(defaultYdtBuilder);
-    }
-
-    private void validateYangObject(YangRequestWorkBench defaultYdtBuilder) {
-
-        YdtContext rootCtx = defaultYdtBuilder.getRootNode();
-
-        YdtContext childCtx = rootCtx.getFirstChild();
-
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, YdtTestUtils
-                        .getSchemaRegistry());
-        assertNotNull(yangObject);
-        try {
-
-            Field field = yangObject.getClass().getDeclaredField(BOOLEAN_LIST);
-            field.setAccessible(true);
-            List booleanList = (List) field.get(yangObject);
-            Field invalidInterval = booleanList.get(0).getClass()
-                    .getDeclaredField(AUTO_PREFIX_BOOLEAN);
-            invalidInterval.setAccessible(true);
-            assertTrue((boolean) invalidInterval.get(booleanList.get(0)));
-            assertFalse((boolean) invalidInterval.get(booleanList.get(1)));
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            fail("No such field or illegal access exception: " + e);
-        }
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobChoiceTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobChoiceTest.java
deleted file mode 100644
index 305d7bf..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobChoiceTest.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-import org.onosproject.yang.gen.v1.urn.topo.rev20140101.YmsTopologyOpParam;
-import org.onosproject.yang.gen.v1.urn.topo.rev20140101.ymstopology.DefaultNode;
-import org.onosproject.yang.gen.v1.urn.topo.rev20140101.ymstopology.Node;
-import org.onosproject.yang.gen.v1.urn.topo.rev20140101.ymstopology.node.choice1.Case1a;
-import org.onosproject.yang.gen.v1.urn.topo.rev20140101.ymstopology.node.choice1.Case1b;
-import org.onosproject.yang.gen.v1.urn.topo.rev20140101.ymstopology.node.choice1.DefaultCase1a;
-import org.onosproject.yang.gen.v1.urn.topo.rev20140101.ymstopology.node.choice1.DefaultCase1b;
-import org.onosproject.yang.gen.v1.urn.topo.rev20140101.ymstopology.node.choice1.case1b.choice1b.Case1Bi;
-import org.onosproject.yang.gen.v1.urn.topo.rev20140101.ymstopology.node.choice1.case1b.choice1b.DefaultCase1Bi;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.io.IOException;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.onosproject.yms.app.yob.YobTestUtils.LEAF_1A1;
-import static org.onosproject.yms.app.yob.YobTestUtils.LEAF_1A2;
-import static org.onosproject.yms.app.yob.YobTestUtils.LEAF_1BIA;
-import static org.onosproject.yms.app.yob.YobTestUtils.LEAF_1BIB;
-import static org.onosproject.yms.app.yob.YobTestUtils.NODE;
-import static org.onosproject.yms.app.yob.YobTestUtils.ROOT_DATA_RESOURCE;
-import static org.onosproject.yms.app.yob.YobTestUtils.STR_LEAF_VALUE;
-import static org.onosproject.yms.app.yob.YobTestUtils.TOPOLOGY;
-import static org.onosproject.yms.ydt.YdtContextOperationType.NONE;
-
-/**
- * Test the YANG object building for the YANG data tree based on the non
- * schema choice and case nodes.
- */
-public class YobChoiceTest {
-
-    private YobTestUtils utils = YobTestUtils.instance();
-
-    @Test
-    public void caseInChoice() throws IOException {
-
-        YangRequestWorkBench ydtBuilder = new YangRequestWorkBench(
-                ROOT_DATA_RESOURCE, null, null, utils.schemaRegistry(),
-                true);
-
-        ydtBuilder.addChild(TOPOLOGY, null, NONE);
-        ydtBuilder.addChild(NODE, null);
-        ydtBuilder.addLeaf(LEAF_1A1, null, STR_LEAF_VALUE);
-
-        YdtContext logicalRoot = ydtBuilder.getRootNode();
-        YdtExtendedContext appRoot =
-                (YdtExtendedContext) logicalRoot.getFirstChild();
-
-        DefaultYobBuilder yobBuilder = new DefaultYobBuilder();
-        Object yangObject = yobBuilder.getYangObject(appRoot,
-                                                     utils.schemaRegistry());
-        assertNotNull(yangObject);
-        assertEquals("YANG object created is not topology object",
-                     YmsTopologyOpParam.class, yangObject.getClass());
-
-        YmsTopologyOpParam topology = (YmsTopologyOpParam) yangObject;
-        assertNotNull("Failed to build the object", topology.node());
-        assertEquals("Single node entry is expected", 1,
-                     topology.node().size());
-        assertEquals("Node type is not DefaultNode", DefaultNode.class,
-                     topology.node().get(0).getClass());
-
-        Node node = topology.node().get(0);
-        assertNotNull("choice1 is not set in node", node.choice1());
-        assertEquals("choice 1 type is not ", DefaultCase1a.class,
-                     node.choice1().getClass());
-
-        Case1a case1a = (Case1a) node.choice1();
-        assertNotNull("leaf1a1 is not set in case", case1a.leaf1A1());
-        assertEquals("leaf1a1 type is not correct", String.class,
-                     case1a.leaf1A1().getClass());
-        assertEquals("leaf1a1 value is not correct", STR_LEAF_VALUE,
-                     case1a.leaf1A1());
-
-    }
-
-    @Test
-    public void caseWithMultiAttribute() throws IOException {
-
-        YangRequestWorkBench ydtBuilder = new YangRequestWorkBench(
-                ROOT_DATA_RESOURCE, null, null, utils.schemaRegistry(),
-                true);
-
-        ydtBuilder.addChild(TOPOLOGY, null, NONE);
-        ydtBuilder.addChild(NODE, null);
-        ydtBuilder.addLeaf(LEAF_1A1, null, STR_LEAF_VALUE);
-        ydtBuilder.traverseToParent();
-        ydtBuilder.addLeaf(LEAF_1A2, null, STR_LEAF_VALUE);
-
-        YdtContext logicalRoot = ydtBuilder.getRootNode();
-        YdtExtendedContext appRoot =
-                (YdtExtendedContext) logicalRoot.getFirstChild();
-
-        DefaultYobBuilder yobBuilder = new DefaultYobBuilder();
-        Object yangObject = yobBuilder.getYangObject(appRoot,
-                                                     utils.schemaRegistry());
-        assertNotNull(yangObject);
-        assertEquals("YANG object created is not topology object",
-                     YmsTopologyOpParam.class, yangObject.getClass());
-
-        YmsTopologyOpParam topology = (YmsTopologyOpParam) yangObject;
-        assertNotNull("Failed to build the object", topology.node());
-        assertEquals("Single node entry is expected", 1,
-                     topology.node().size());
-        assertEquals("Node type is not DefaultNode", DefaultNode.class,
-                     topology.node().get(0).getClass());
-
-        Node node = topology.node().get(0);
-        assertNotNull("choice1 is not set in node", node.choice1());
-        assertEquals("choice 1 type is not ", DefaultCase1a.class,
-                     node.choice1().getClass());
-
-        Case1a case1a = (Case1a) node.choice1();
-        assertNotNull("leaf1a1 is not set in case", case1a.leaf1A1());
-        assertEquals("leaf1a1 type is not correct", String.class,
-                     case1a.leaf1A1().getClass());
-        assertEquals("leaf1a1 value is not correct", STR_LEAF_VALUE,
-                     case1a.leaf1A1());
-
-        assertNotNull("leaf1a2 is not set in case", case1a.leaf1A2());
-        assertEquals("leaf1a2 type is not correct", String.class,
-                     case1a.leaf1A2().getClass());
-        assertEquals("leaf1a1 value is not correct", STR_LEAF_VALUE,
-                     case1a.leaf1A1());
-
-    }
-
-    @Test
-    public void recursiveChoice() throws IOException {
-
-        YangRequestWorkBench ydtBuilder = new YangRequestWorkBench(
-                ROOT_DATA_RESOURCE, null, null, utils.schemaRegistry(),
-                true);
-
-        ydtBuilder.addChild(TOPOLOGY, null, NONE);
-        ydtBuilder.addChild(NODE, null);
-        ydtBuilder.addLeaf(LEAF_1BIA, null, STR_LEAF_VALUE);
-
-        YdtContext logicalRoot = ydtBuilder.getRootNode();
-        YdtExtendedContext appRoot =
-                (YdtExtendedContext) logicalRoot.getFirstChild();
-
-        DefaultYobBuilder yobBuilder = new DefaultYobBuilder();
-        Object yangObject = yobBuilder.getYangObject(appRoot,
-                                                     utils.schemaRegistry());
-        assertNotNull(yangObject);
-        assertEquals("YANG object created is not topology object",
-                     YmsTopologyOpParam.class, yangObject.getClass());
-
-        YmsTopologyOpParam topology = (YmsTopologyOpParam) yangObject;
-        assertNotNull("Failed to build the object", topology.node());
-        assertEquals("Single node entry is expected", 1,
-                     topology.node().size());
-        assertEquals("Node type is not DefaultNode", DefaultNode.class,
-                     topology.node().get(0).getClass());
-
-        Node node = topology.node().get(0);
-        assertNotNull("Choice 1 is not set in Node", node.choice1());
-        assertEquals("Choice 1 is not of type DefaultCase1b",
-                     DefaultCase1b.class, node.choice1().getClass());
-
-        Case1b case1b = (Case1b) node.choice1();
-        assertNotNull("Case1b does not have child choice1b ",
-                      case1b.choice1b());
-        assertEquals("choice1b is not of type DefaultCase1Bi",
-                     DefaultCase1Bi.class, case1b.choice1b().getClass());
-
-        Case1Bi case1Bi = (Case1Bi) case1b.choice1b();
-        assertNotNull("leaf1bia is not set", case1Bi.leaf1Bia());
-        assertEquals("leaf1bia type is not string", String.class,
-                     case1Bi.leaf1Bia().getClass());
-        assertEquals("leaf1bia value is wrong", STR_LEAF_VALUE,
-                     case1Bi.leaf1Bia());
-    }
-
-    @Test
-    public void recursiveChoiceWithMultipleAttribute() throws IOException {
-
-        YangRequestWorkBench ydtBuilder = new YangRequestWorkBench(
-                ROOT_DATA_RESOURCE, null, null, utils.schemaRegistry(),
-                true);
-
-        ydtBuilder.addChild(TOPOLOGY, null, NONE);
-        ydtBuilder.addChild(NODE, null);
-        ydtBuilder.addLeaf(LEAF_1BIA, null, STR_LEAF_VALUE);
-        ydtBuilder.traverseToParent();
-        ydtBuilder.addLeaf(LEAF_1BIB, null, STR_LEAF_VALUE);
-
-
-        YdtContext logicalRoot = ydtBuilder.getRootNode();
-        YdtExtendedContext appRoot =
-                (YdtExtendedContext) logicalRoot.getFirstChild();
-
-        DefaultYobBuilder yobBuilder = new DefaultYobBuilder();
-        Object yangObject = yobBuilder.getYangObject(appRoot,
-                                                     utils.schemaRegistry());
-        assertNotNull(yangObject);
-        assertEquals("YANG object created is not topology object",
-                     YmsTopologyOpParam.class, yangObject.getClass());
-
-        YmsTopologyOpParam topology = (YmsTopologyOpParam) yangObject;
-        assertNotNull("Failed to build the object", topology.node());
-        assertEquals("Single node entry is expected", 1,
-                     topology.node().size());
-        assertEquals("Node type is not DefaultNode", DefaultNode.class,
-                     topology.node().get(0).getClass());
-
-        Node node = topology.node().get(0);
-        assertNotNull("Choice 1 is not set in Node", node.choice1());
-        assertEquals("Choice 1 is not of type DefaultCase1b",
-                     DefaultCase1b.class,
-                     node.choice1().getClass());
-
-        Case1b case1b = (Case1b) node.choice1();
-        assertNotNull("Case1b does not have child choice1b ",
-                      case1b.choice1b());
-        assertEquals("choice1b is not of type DefaultCase1Bi",
-                     DefaultCase1Bi.class,
-                     case1b.choice1b().getClass());
-
-        Case1Bi case1Bi = (Case1Bi) case1b.choice1b();
-        assertNotNull("leaf1bia is not set", case1Bi.leaf1Bia());
-        assertEquals("leaf1bia type is not string", String.class,
-                     case1Bi.leaf1Bia().getClass());
-        assertEquals("leaf1bia value is wrong", STR_LEAF_VALUE,
-                     case1Bi.leaf1Bia());
-
-        assertNotNull("leaf1bib is not set", case1Bi.leaf1Bib());
-        assertEquals("leaf1bia type is not string", String.class,
-                     case1Bi.leaf1Bib().getClass());
-        assertEquals("leaf1bia value is wrong", STR_LEAF_VALUE,
-                     case1Bi.leaf1Bib());
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobDecimal64Test.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobDecimal64Test.java
deleted file mode 100644
index b069ad2..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobDecimal64Test.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.app.ydt.YdtTestUtils;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.lang.reflect.Field;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-public class YobDecimal64Test {
-
-    /*
-
-    Positive scenario
-
-    input at boundary for decimal64 with fraction 2
-        i. min value
-        ii. max value
-
-    input at boundary for decimal64 with minimum fraction
-        i. min value
-        ii. mid value
-        iii. max value
-
-    input at boundary for decimal64 with maximum fraction
-        i. min value
-        ii. mid value
-        iii. max value
-
-    input with in range
-        if range is 10 to 100 for integer
-            i.1. input 11
-            i.2. min value 10
-            i.3. max value 100
-
-    input with multi interval range
-        if range is 10..40 | 50..100 for decimal64
-            i.1. input 11
-            i.2. input 10
-            i.3. input 40
-            i.4. input 50
-            i.5. input 55
-            i.6. input 100
-
-        if range is "min .. 3.14 | 10 | 20..max" for decimal64
-            i.1. input min
-            i.2. input 2.505
-            i.3. input 3.14
-            i.4. input 10
-            i.5. input 20
-            i.6. input 92233720368547757
-            i.7. input 92233720368547758.07
-
-    */
-    @Test
-    public void positiveTest() {
-        YangRequestWorkBench defaultYdtBuilder = YdtTestUtils.decimal64Ydt();
-        validateYangObject(defaultYdtBuilder);
-    }
-
-    private void validateYangObject(YangRequestWorkBench defaultYdtBuilder) {
-
-        YdtContext rootCtx = defaultYdtBuilder.getRootNode();
-
-        YdtContext childCtx = rootCtx.getFirstChild();
-
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, YdtTestUtils
-                        .getSchemaRegistry());
-        assertNotNull(yangObject);
-        try {
-            Field negInt = yangObject.getClass().getDeclaredField("negInt");
-            negInt.setAccessible(true);
-            assertEquals("-92233720368547758.08", negInt
-                    .get(yangObject).toString());
-            Field negIntWithMaxFraction = yangObject.getClass()
-                    .getDeclaredField("negIntWithMaxFraction");
-            negIntWithMaxFraction.setAccessible(true);
-            assertEquals("-9.223372036854775808", negIntWithMaxFraction
-                    .get(yangObject).toString());
-            Field negIntWithMinFraction = yangObject.getClass()
-                    .getDeclaredField("negIntWithMinFraction");
-            negIntWithMinFraction.setAccessible(true);
-            assertEquals("-922337203685477580.8", negIntWithMinFraction
-                    .get(yangObject).toString());
-            Field posInt = yangObject.getClass()
-                    .getDeclaredField("posInt");
-            posInt.setAccessible(true);
-            assertEquals("92233720368547758.07", posInt
-                    .get(yangObject).toString());
-            Field posIntWithMaxFraction = yangObject
-                    .getClass().getDeclaredField("posIntWithMaxFraction");
-            posIntWithMaxFraction.setAccessible(true);
-            assertEquals("9.223372036854775807", posIntWithMaxFraction
-                    .get(yangObject).toString());
-            Field posIntWithMinFraction = yangObject.getClass()
-                    .getDeclaredField("posIntWithMinFraction");
-            posIntWithMinFraction.setAccessible(true);
-            assertEquals("922337203685477580.7", posIntWithMinFraction
-                    .get(yangObject).toString());
-            Field minIntWithRange = yangObject.getClass()
-                    .getDeclaredField("minIntWithRange");
-            minIntWithRange.setAccessible(true);
-            assertEquals("10", minIntWithRange
-                    .get(yangObject).toString());
-            Field midIntWithRange = yangObject
-                    .getClass().getDeclaredField("midIntWithRange");
-            midIntWithRange.setAccessible(true);
-            assertEquals("11", midIntWithRange.get(yangObject).toString());
-            Field maxIntWithRange = yangObject
-                    .getClass().getDeclaredField("maxIntWithRange");
-            maxIntWithRange.setAccessible(true);
-            assertEquals("100", maxIntWithRange.get(yangObject).toString());
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            fail("No such field or illegal access exception: " + e);
-        }
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobEmptyTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobEmptyTest.java
deleted file mode 100644
index 55c416e..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobEmptyTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.app.ydt.YdtTestUtils;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.lang.reflect.Field;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-public class YobEmptyTest {
-
-    /*
-        EMPTY
-        Positive scenario
-        input with in empty.
-    */
-    @Test
-    public void positiveTest() {
-        YangRequestWorkBench defaultYdtBuilder = YdtTestUtils.emptyTypeYdt();
-        validateYangObject(defaultYdtBuilder);
-    }
-
-    private void validateYangObject(YangRequestWorkBench defaultYdtBuilder) {
-
-        YdtContext rootCtx = defaultYdtBuilder.getRootNode();
-
-        YdtContext childCtx = rootCtx.getFirstChild();
-
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, YdtTestUtils
-                        .getSchemaRegistry());
-        assertNotNull(yangObject);
-        try {
-
-            Field field = yangObject.getClass().getDeclaredField("emptyList");
-            field.setAccessible(true);
-            List booleanList = (List) field.get(yangObject);
-            Field invalidInterval = booleanList.get(0)
-                    .getClass().getDeclaredField("empty");
-            invalidInterval.setAccessible(true);
-            assertEquals(false, invalidInterval.get(booleanList.get(0)));
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            fail("No such field or illegal access exception: " + e);
-        }
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobEnumTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobEnumTest.java
deleted file mode 100644
index c479afa..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobEnumTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.app.ydt.YdtTestUtils;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.lang.reflect.Field;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-public class YobEnumTest {
-
-/*
-    ENUM
-
-    Positive scenario
-
-        input with in enum
-        input with "ten"
-        input with "hundred"
-        input with "thousand"
-*/
-
-    @Test
-    public void positiveTest() {
-        YangRequestWorkBench defaultYdtBuilder = YdtTestUtils.enumYdt();
-        validateYangObject(defaultYdtBuilder);
-    }
-
-    private void validateYangObject(YangRequestWorkBench defaultYdtBuilder) {
-
-        YdtContext rootCtx = defaultYdtBuilder.getRootNode();
-
-        YdtContext childCtx = rootCtx.getFirstChild();
-
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, YdtTestUtils
-                        .getSchemaRegistry());
-        assertNotNull(yangObject);
-        try {
-            Field field = yangObject.getClass().getDeclaredField("enumList");
-            field.setAccessible(true);
-            List enumList = (List) field.get(yangObject);
-            assertEquals(false, enumList.isEmpty());
-            Field enumleaf = enumList.get(0)
-                    .getClass().getDeclaredField("enumleaf");
-            enumleaf.setAccessible(true);
-            assertEquals("ten", enumleaf
-                    .get(enumList.get(0)).toString().toLowerCase());
-            assertEquals("hundred", enumleaf
-                    .get(enumList.get(1)).toString().toLowerCase());
-            assertEquals("thousand", enumleaf
-                    .get(enumList.get(2)).toString().toLowerCase());
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            fail("No such field or illegal access exception: " + e);
-        }
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobIetfNetworkTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobIetfNetworkTest.java
deleted file mode 100644
index 462dccb..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobIetfNetworkTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.app.ydt.YdtTestUtils;
-import org.onosproject.yms.ydt.YdtContext;
-
-import static org.junit.Assert.assertNotNull;
-
-public class YobIetfNetworkTest {
-
-    @Test
-    public void ietfNetwork1Test() {
-        YangRequestWorkBench defaultYdtBuilder = YdtTestUtils.ietfNetwork1Ydt();
-        validateYangObject(defaultYdtBuilder);
-    }
-
-    private void validateYangObject(YangRequestWorkBench defaultYdtBuilder) {
-
-        YdtContext rootCtx = defaultYdtBuilder.getRootNode();
-
-        YdtContext childCtx = rootCtx.getFirstChild();
-
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, YdtTestUtils
-                        .getSchemaRegistry());
-        assertNotNull(yangObject);
-        //TODO yangObject need to verify
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobInteger16Test.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobInteger16Test.java
deleted file mode 100644
index 39281b7..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobInteger16Test.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.app.ydt.YdtTestUtils;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.lang.reflect.Field;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-public class YobInteger16Test {
-
-    /*
-
-    Positive scenario
-
-    input at boundary for integer
-        i. min value
-        ii. max value
-
-    input at boundary for unsigned integer
-        i. min value
-        ii. max value
-
-    input with in range
-        if range is 10 to 100 for integer
-            i.1. input 11
-            i.2. min value 10
-            i.3. max value 100
-
-        if range is 10 to 100 for unsigned integer
-            i.1. input 11
-            i.2. min value 10
-            i.3. max value 100
-
-    */
-    @Test
-    public void positiveTest() {
-        YangRequestWorkBench defaultYdtBuilder = YdtTestUtils.integer16Ydt();
-        validateYangObject(defaultYdtBuilder);
-    }
-
-    public void validateYangObject(YangRequestWorkBench defaultYdtBuilder) {
-
-        YdtContext rootCtx = defaultYdtBuilder.getRootNode();
-
-        YdtContext childCtx = rootCtx.getFirstChild();
-
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, YdtTestUtils
-                        .getSchemaRegistry());
-        assertNotNull(yangObject);
-        try {
-            Field negInt = yangObject.getClass().getDeclaredField("negInt");
-            negInt.setAccessible(true);
-            assertEquals("-32768", negInt.get(yangObject).toString());
-            Field posInt = yangObject.getClass().getDeclaredField("posInt");
-            posInt.setAccessible(true);
-            assertEquals("32767", posInt.get(yangObject).toString());
-            Field minIntWithRange = yangObject
-                    .getClass().getDeclaredField("minIntWithRange");
-            minIntWithRange.setAccessible(true);
-            assertEquals("10", minIntWithRange.get(yangObject).toString());
-            Field midIntWithRange = yangObject
-                    .getClass().getDeclaredField("midIntWithRange");
-            midIntWithRange.setAccessible(true);
-            assertEquals("11", midIntWithRange.get(yangObject).toString());
-            Field maxIntWithRange = yangObject
-                    .getClass().getDeclaredField("maxIntWithRange");
-            maxIntWithRange.setAccessible(true);
-            assertEquals("100", maxIntWithRange.get(yangObject).toString());
-            Field minUint = yangObject.getClass().getDeclaredField("minUint");
-            minUint.setAccessible(true);
-            assertEquals("0", minUint.get(yangObject).toString());
-            Field maxUint = yangObject.getClass().getDeclaredField("maxUint");
-            maxUint.setAccessible(true);
-            assertEquals("65535", maxUint.get(yangObject).toString());
-            Field minUintWithRange = yangObject
-                    .getClass().getDeclaredField("minUintWithRange");
-            minUintWithRange.setAccessible(true);
-            assertEquals("10", minUintWithRange.get(yangObject).toString());
-            Field midUintWithRange = yangObject
-                    .getClass().getDeclaredField("midUintWithRange");
-            midUintWithRange.setAccessible(true);
-            assertEquals("11", midUintWithRange.get(yangObject).toString());
-            Field maxUintWithRange = yangObject
-                    .getClass().getDeclaredField("maxUintWithRange");
-            maxUintWithRange.setAccessible(true);
-            assertEquals("100", maxUintWithRange.get(yangObject).toString());
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            fail("No such field or illegal access exception: " + e);
-        }
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobInteger32Test.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobInteger32Test.java
deleted file mode 100644
index d97f783..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobInteger32Test.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.app.ydt.YdtTestUtils;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.lang.reflect.Field;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-public class YobInteger32Test {
-
-    /*
-
-    Positive scenario
-
-    input at boundary for integer
-        i. min value
-        ii. max value
-
-    input at boundary for unsigned integer
-        i. min value
-        ii. max value
-
-    input with in range
-        if range is 10 to 100 for integer
-            i.1. input 11
-            i.2. min value 10
-            i.3. max value 100
-
-        if range is 10 to 100 for unsigned integer
-            i.1. input 11
-            i.2. min value 10
-            i.3. max value 100
-
-    */
-    @Test
-    public void positiveTest() {
-        YangRequestWorkBench defaultYdtBuilder = YdtTestUtils.integer32Ydt();
-        validateYangObject(defaultYdtBuilder);
-    }
-
-    public void validateYangObject(YangRequestWorkBench defaultYdtBuilder) {
-
-        YdtContext rootCtx = defaultYdtBuilder.getRootNode();
-
-        YdtContext childCtx = rootCtx.getFirstChild();
-
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, YdtTestUtils
-                        .getSchemaRegistry());
-        assertNotNull(yangObject);
-        try {
-            Field negInt = yangObject.getClass().getDeclaredField("negInt");
-            negInt.setAccessible(true);
-            assertEquals("-2147483648", negInt.get(yangObject).toString());
-            Field posInt = yangObject.getClass().getDeclaredField("posInt");
-            posInt.setAccessible(true);
-            assertEquals("2147483647", posInt.get(yangObject).toString());
-            Field minIntWithRange = yangObject
-                    .getClass().getDeclaredField("minIntWithRange");
-            minIntWithRange.setAccessible(true);
-            assertEquals("10", minIntWithRange.get(yangObject).toString());
-            Field midIntWithRange = yangObject
-                    .getClass().getDeclaredField("midIntWithRange");
-            midIntWithRange.setAccessible(true);
-            assertEquals("11", midIntWithRange.get(yangObject).toString());
-            Field maxIntWithRange = yangObject
-                    .getClass().getDeclaredField("maxIntWithRange");
-            maxIntWithRange.setAccessible(true);
-            assertEquals("100", maxIntWithRange.get(yangObject).toString());
-            Field minUint = yangObject.getClass().getDeclaredField("minUint");
-            minUint.setAccessible(true);
-            assertEquals("0", minUint.get(yangObject).toString());
-            Field maxUint = yangObject.getClass().getDeclaredField("maxUint");
-            maxUint.setAccessible(true);
-            assertEquals("4294967295", maxUint.get(yangObject).toString());
-            Field minUintWithRange = yangObject
-                    .getClass().getDeclaredField("minUintWithRange");
-            minUintWithRange.setAccessible(true);
-            assertEquals("10", minUintWithRange.get(yangObject).toString());
-            Field midUintWithRange = yangObject
-                    .getClass().getDeclaredField("midUintWithRange");
-            midUintWithRange.setAccessible(true);
-            assertEquals("11", midUintWithRange.get(yangObject).toString());
-            Field maxUintWithRange = yangObject
-                    .getClass().getDeclaredField("maxUintWithRange");
-            maxUintWithRange.setAccessible(true);
-            assertEquals("100", maxUintWithRange.get(yangObject).toString());
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            fail("No such field or illegal access exception: " + e);
-        }
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobInteger64Test.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobInteger64Test.java
deleted file mode 100644
index a3ee166..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobInteger64Test.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.app.ydt.YdtTestUtils;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.lang.reflect.Field;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-
-public class YobInteger64Test {
-
-    /*
-
-    Positive scenario
-
-    input at boundary for integer
-        i. min value
-        ii. max value
-
-    input at boundary for unsigned integer
-        i. min value
-        ii. max value
-
-    input with in range
-        if range is 10 to 100 for integer
-            i.1. input 11
-            i.2. min value 10
-            i.3. max value 100
-
-        if range is 10 to 100 for unsigned integer
-            i.1. input 11
-            i.2. min value 10
-            i.3. max value 100
-
-    */
-    @Test
-    public void positiveTest() {
-        YangRequestWorkBench defaultYdtBuilder = YdtTestUtils.integer64Ydt();
-        validateYangObject(defaultYdtBuilder);
-    }
-
-    private void validateYangObject(YangRequestWorkBench defaultYdtBuilder) {
-
-        YdtContext rootCtx = defaultYdtBuilder.getRootNode();
-
-        YdtContext childCtx = rootCtx.getFirstChild();
-
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, YdtTestUtils
-                        .getSchemaRegistry());
-        assertNotNull(yangObject);
-        try {
-            Field negInt = yangObject.getClass().getDeclaredField("negInt");
-            negInt.setAccessible(true);
-            assertEquals("-9223372036854775808", negInt
-                    .get(yangObject).toString());
-            Field posIntField = yangObject
-                    .getClass().getDeclaredField("posInt");
-            posIntField.setAccessible(true);
-            assertEquals("9223372036854775807", posIntField
-                    .get(yangObject).toString());
-            Field minIntWithRange = yangObject
-                    .getClass().getDeclaredField("minIntWithRange");
-            minIntWithRange.setAccessible(true);
-            assertEquals("10", minIntWithRange.get(yangObject).toString());
-            Field midIntWithRange = yangObject
-                    .getClass().getDeclaredField("midIntWithRange");
-            midIntWithRange.setAccessible(true);
-            assertEquals("11", midIntWithRange.get(yangObject).toString());
-            Field maxIntWithRange = yangObject
-                    .getClass().getDeclaredField("maxIntWithRange");
-            maxIntWithRange.setAccessible(true);
-            assertEquals("100", maxIntWithRange.get(yangObject).toString());
-            Field minUint = yangObject.getClass().getDeclaredField("minUint");
-            minUint.setAccessible(true);
-            assertEquals("0", minUint.get(yangObject).toString());
-            Field maxUint = yangObject.getClass().getDeclaredField("maxUint");
-            maxUint.setAccessible(true);
-            assertEquals("18446744073709551615", maxUint
-                    .get(yangObject).toString());
-            Field minUintWithRange = yangObject
-                    .getClass().getDeclaredField("minUintWithRange");
-            minUintWithRange.setAccessible(true);
-            assertEquals("10", minUintWithRange.get(yangObject).toString());
-            Field midUintWithRange = yangObject
-                    .getClass().getDeclaredField("midUintWithRange");
-            midUintWithRange.setAccessible(true);
-            assertEquals("11", midUintWithRange.get(yangObject).toString());
-            Field maxUintWithRange = yangObject
-                    .getClass().getDeclaredField("maxUintWithRange");
-            maxUintWithRange.setAccessible(true);
-            assertEquals("100", maxUintWithRange.get(yangObject).toString());
-        } catch (IllegalAccessException | NoSuchFieldException e) {
-            fail("No such field or illegal access exception: " + e);
-        }
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobInteger8Test.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobInteger8Test.java
deleted file mode 100644
index 11bd8e5..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobInteger8Test.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.app.ydt.YdtTestUtils;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.lang.reflect.Field;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-public class YobInteger8Test {
-
-    /*
-
-    Positive scenario
-
-    input at boundary for integer
-        i. min value
-        ii. max value
-
-    input at boundary for unsigned integer
-        i. min value
-        ii. max value
-
-    input with in range
-        if range is 10 to 100 for integer
-            i.1. input 11
-            i.2. min value 10
-            i.3. max value 100
-
-        if range is 10 to 100 for unsigned integer
-            i.1. input 11
-            i.2. min value 10
-            i.3. max value 100
-
-    input with multi interval range
-        if range is 10..40 | 50..100 for integer
-            i.1. input 11
-            i.2. input 10
-            i.3. input 40
-            i.4. input 50
-            i.5. input 55
-            i.6. input 100
-
-        if range is 10..40 | 50..100 for unsigned integer
-            i.1. input 11
-            i.2. input 10
-            i.3. input 40
-            i.4. input 50
-            i.5. input 55
-            i.6. input 100
-
-        if range is "min .. 2 | 10 | 20..max" for integer
-            i.1. input -128
-            i.2. input 1
-            i.3. input 2
-            i.4. input 10
-            i.5. input 20
-            i.6. input 100
-            i.7. input 127
-
-         if range is "min .. 2 | 10 | 20..max" for unsigned Integer
-            i.1. input 0
-            i.2. input 1
-            i.3. input 2
-            i.4. input 10
-            i.5. input 20
-            i.6. input 100
-            i.7. input 255
-    */
-    @Test
-    public void positiveTest() {
-        YangRequestWorkBench defaultYdtBuilder = YdtTestUtils.integer8Ydt();
-        validateYangObject(defaultYdtBuilder);
-    }
-
-    private void validateYangObject(YangRequestWorkBench defaultYdtBuilder) {
-
-        YdtContext rootCtx = defaultYdtBuilder.getRootNode();
-
-        YdtContext childCtx = rootCtx.getFirstChild();
-
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, YdtTestUtils
-                        .getSchemaRegistry());
-        assertNotNull(yangObject);
-        try {
-            Field negInt = yangObject.getClass().getDeclaredField("negInt");
-            negInt.setAccessible(true);
-            assertEquals("-128", negInt.get(yangObject).toString());
-            Field posInt = yangObject.getClass().getDeclaredField("posInt");
-            posInt.setAccessible(true);
-            assertEquals("127", posInt.get(yangObject).toString());
-            Field minIntWithRange = yangObject
-                    .getClass().getDeclaredField("minIntWithRange");
-            minIntWithRange.setAccessible(true);
-            assertEquals("10", minIntWithRange
-                    .get(yangObject).toString());
-            Field midIntWithRange = yangObject
-                    .getClass().getDeclaredField("midIntWithRange");
-            midIntWithRange.setAccessible(true);
-            assertEquals("11", midIntWithRange
-                    .get(yangObject).toString());
-            Field maxIntWithRange = yangObject
-                    .getClass().getDeclaredField("maxIntWithRange");
-            maxIntWithRange.setAccessible(true);
-            assertEquals("100", maxIntWithRange.get(yangObject).toString());
-            Field minUint = yangObject.getClass().getDeclaredField("minUint");
-            minUint.setAccessible(true);
-            assertEquals("0", minUint.get(yangObject).toString());
-            Field maxUint = yangObject.getClass().getDeclaredField("maxUint");
-            maxUint.setAccessible(true);
-            assertEquals("255", maxUint.get(yangObject).toString());
-            Field minUintWithRange = yangObject
-                    .getClass().getDeclaredField("maxIntWithRange");
-            minUintWithRange.setAccessible(true);
-            assertEquals("100", minUintWithRange.get(yangObject).toString());
-            Field midUintWithRange = yangObject
-                    .getClass().getDeclaredField("midUintWithRange");
-            midUintWithRange.setAccessible(true);
-            assertEquals("11", midUintWithRange.get(yangObject).toString());
-            Field maxUintWithRange = yangObject
-                    .getClass().getDeclaredField("maxUintWithRange");
-            maxUintWithRange.setAccessible(true);
-            assertEquals("100", maxUintWithRange.get(yangObject).toString());
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            fail("No such field or illegal access exception: " + e);
-        }
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobListTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobListTest.java
deleted file mode 100644
index 47ec8ef..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobListTest.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.app.ydt.YdtTestUtils;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-public class YobListTest {
-
-    @Test
-    public void listwithoutcontainerTest() {
-        YangRequestWorkBench defaultYdtBuilder =
-                YdtTestUtils.listWithoutContainerYdt();
-        validateYangObjectList(defaultYdtBuilder);
-    }
-
-    private void validateYangObjectList(
-            YangRequestWorkBench defaultYdtBuilder) {
-
-        YdtContext rootCtx = defaultYdtBuilder.getRootNode();
-
-        YdtContext childCtx = rootCtx.getFirstChild();
-
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-
-        Object yangObject = builder.getYangObject(
-                (YdtExtendedContext) childCtx, YdtTestUtils.
-                        getSchemaRegistry());
-        assertNotNull(yangObject);
-        assertTrue(yangObject.getClass().getSimpleName()
-                           .equals("RootlistOpParam"));
-        try {
-
-            Field field =
-                    yangObject.getClass().getDeclaredField("listwithcontainer");
-            field.setAccessible(true);
-            List listwithcontainer = (List) field.get(yangObject);
-            assertEquals(true, listwithcontainer.isEmpty());
-            Field field1 = yangObject.getClass()
-                    .getDeclaredField("listwithoutcontainer");
-            field1.setAccessible(true);
-            List listwithoutcontainer = (List) field1.get(yangObject);
-            assertEquals(false, listwithoutcontainer.isEmpty());
-            Field invalidinterval = listwithoutcontainer.get(0).getClass()
-                    .getDeclaredField("invalidinterval");
-            invalidinterval.setAccessible(true);
-            assertEquals("12", invalidinterval.get(listwithoutcontainer.get(0))
-                    .toString());
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            fail("No such field or illegal access exception: " + e);
-        }
-    }
-
-    @Test
-    public void listwithcontainerTest()
-            throws IOException {
-        YangRequestWorkBench defaultYdtBuilder =
-                YdtTestUtils.listWithContainerYdt();
-
-        validateYangObject(defaultYdtBuilder);
-    }
-
-    public void validateYangObject(YangRequestWorkBench defaultYdtBuilder) {
-
-        YdtContext ydtContext = defaultYdtBuilder.getRootNode();
-
-        YdtContext ydtContext1 = ydtContext.getFirstChild();
-
-        DefaultYobBuilder defaultYobBuilder = new DefaultYobBuilder();
-
-        Object yangObject = defaultYobBuilder.getYangObject(
-                (YdtExtendedContext) ydtContext1, YdtTestUtils
-                        .getSchemaRegistry());
-        assertNotNull(yangObject);
-        assertTrue(yangObject.getClass().getSimpleName()
-                           .equals("RootlistOpParam"));
-        try {
-
-            Field field = yangObject.getClass()
-                    .getDeclaredField("listwithoutcontainer");
-            field.setAccessible(true);
-            List listwithoutcontainer = (List) field.get(yangObject);
-            assertEquals(true, listwithoutcontainer.isEmpty());
-            Field listwithcontainerField =
-                    yangObject.getClass().getDeclaredField("listwithcontainer");
-            listwithcontainerField.setAccessible(true);
-            List listwithcontainer =
-                    (List) listwithcontainerField.get(yangObject);
-            Field invalid = listwithcontainer.get(0).getClass()
-                    .getDeclaredField("invalid");
-            invalid.setAccessible(true);
-            assertEquals("12",
-                         invalid.get(listwithcontainer.get(0)).toString());
-            Field invalidinterval = listwithcontainer.get(0).getClass()
-                    .getDeclaredField("invalidinterval");
-            invalidinterval.setAccessible(true);
-            List invalidintervalList =
-                    (List) invalidinterval.get(listwithcontainer.get(0));
-            assertEquals("1", invalidintervalList.get(0).toString());
-            assertEquals("2", invalidintervalList.get(1).toString());
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            fail("No such field or illegal access exception: " + e);
-        }
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobLogisticsManagerTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobLogisticsManagerTest.java
deleted file mode 100644
index c66f555..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobLogisticsManagerTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.yob;
-
-import org.junit.Test;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedContext;
-import org.onosproject.yms.app.ydt.YdtTestUtils;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-public class YobLogisticsManagerTest {
-
-    @Test
-    public void logisticsManagerTest() throws IOException {
-        YangRequestWorkBench defaultYdtBuilder = YdtTestUtils
-                .logisticsManagerYdt();
-
-        YdtContext rootCtx = defaultYdtBuilder.getRootNode();
-
-        YdtContext childCtx = rootCtx.getFirstChild();
-
-        DefaultYobBuilder builder = new DefaultYobBuilder();
-
-        while (childCtx != null) {
-
-            Object yangObject = builder.getYangObject(
-                    (YdtExtendedContext) childCtx, YdtTestUtils
-                            .getSchemaRegistry());
-            Class<?> aClass = yangObject.getClass();
-            if (aClass.getSimpleName().equals("CustomssupervisorOpParam")) {
-                try {
-                    Field field = aClass.getDeclaredField("supervisor");
-                    Field onosYangNodeOperationType = aClass
-                            .getDeclaredField("onosYangNodeOperationType");
-                    field.setAccessible(true);
-                    onosYangNodeOperationType.setAccessible(true);
-                    try {
-                        assertEquals("abc", field.get(yangObject).toString());
-                        assertEquals("MERGE", onosYangNodeOperationType
-                                .get(yangObject).toString());
-                    } catch (IllegalAccessException e) {
-                        fail("Illegal access exception: " + e);
-                    }
-                } catch (NoSuchFieldException e) {
-                    fail("No such field exception: " + e);
-                }
-            }
-
-            if (aClass.getSimpleName().equals(
-                    "MerchandisersupervisorOpParam")) {
-                try {
-                    Field field = aClass.getDeclaredField("supervisor");
-                    field.setAccessible(true);
-                    try {
-                        assertEquals("abc", field.get(yangObject).toString());
-                    } catch (IllegalAccessException e) {
-                        fail("Illegal access exception: " + e);
-                    }
-                } catch (NoSuchFieldException e) {
-                    fail("No such field found exception: " + e);
-                }
-            }
-
-            if (aClass.getSimpleName().equals("WarehousesupervisorOpParam")) {
-                try {
-                    Field field = aClass.getDeclaredField("supervisor");
-                    field.setAccessible(true);
-                    try {
-                        ArrayList<String> arrayList =
-                                (ArrayList<String>) field.get(yangObject);
-                        assertEquals("1", arrayList.get(0));
-                        assertEquals("2", arrayList.get(1));
-                        assertEquals("3", arrayList.get(2));
-                        assertEquals("4", arrayList.get(3));
-                        assertEquals("5", arrayList.get(4));
-                    } catch (IllegalAccessException e) {
-                        fail("Illegal access exception: " + e);
-                    }
-                } catch (NoSuchFieldException e) {
-                    fail("No such field exception: " + e);
-                }
-            }
-            childCtx = childCtx.getNextSibling();
-        }
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobTestUtils.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobTestUtils.java
deleted file mode 100644
index 17b41dd..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/yob/YobTestUtils.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * 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.yob;
-
-import org.onosproject.yms.app.ysr.TestYangSchemaNodeProvider;
-import org.onosproject.yms.app.ysr.YangSchemaRegistry;
-
-/**
- * YOB test Utility.
- */
-final class YobTestUtils {
-
-    /**
-     * Schema nodes.
-     */
-    static final String ROOT_DATA_RESOURCE = "/restconf/data";
-    static final String TOPOLOGY = "yms-topology";
-    static final String NODE = "node";
-    static final String LEAF_1A1 = "leaf1a1";
-    static final String LEAF_1A2 = "leaf1a2";
-    static final String LEAF_1BIA = "leaf1bia";
-    static final String LEAF_1BIB = "leaf1bib";
-    static final String ROUTER_ID = "router-id";
-    static final String ROUTER_IP = "router-ip";
-    static final String STR_LEAF_VALUE = "leaf value";
-
-    private YobTestUtils() {
-        TEST_SCHEMA_PROVIDER.processSchemaRegistry(null);
-    }
-
-    private static final TestYangSchemaNodeProvider
-            TEST_SCHEMA_PROVIDER = new TestYangSchemaNodeProvider();
-
-    YangSchemaRegistry schemaRegistry() {
-        return TEST_SCHEMA_PROVIDER.getDefaultYangSchemaRegistry();
-    }
-
-    /**
-     * Returns the YANG object builder factory instance.
-     *
-     * @return YANG object builder factory instance
-     */
-    static YobTestUtils instance() {
-        return LazyHolder.INSTANCE;
-    }
-
-    /*
-     * Bill Pugh Singleton pattern. INSTANCE won't be instantiated until the
-     * LazyHolder class is loaded via a call to the instance() method below.
-     */
-    private static class LazyHolder {
-        private static final YobTestUtils INSTANCE = new YobTestUtils();
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ysr/TestYangSchemaNodeProvider.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/ysr/TestYangSchemaNodeProvider.java
deleted file mode 100644
index 778afd7..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/ysr/TestYangSchemaNodeProvider.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * 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.ysr;
-
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network1.rev20151208.IetfNetwork1Service;
-import org.onosproject.yangutils.datamodel.YangSchemaNode;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Set;
-
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.TEMP;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-
-/**
- * Represents mock bundle context. provides bundle context for YSR to do unit
- * testing.
- */
-public class TestYangSchemaNodeProvider {
-
-    private static final String FS = File.separator;
-    private static final String PATH = System.getProperty("user.dir") +
-            FS + "target" + FS + "classes" + FS;
-    private static final String SER_FILE_PATH = "yang" + FS + "resources" +
-            FS + "YangMetaData.ser";
-    private static final String TEMP_FOLDER_PATH = PATH + TEMP;
-    private final DefaultYangSchemaRegistry defaultYangSchemaRegistry =
-            new DefaultYangSchemaRegistry("module-id");
-
-    /**
-     * Creates an instance of mock bundle context.
-     */
-    public TestYangSchemaNodeProvider() {
-    }
-
-    /**
-     * Process YANG schema node for a application.
-     *
-     * @param appObject application object
-     */
-    public void processSchemaRegistry(Object appObject) {
-
-        Set<YangSchemaNode> appNode = defaultYangSchemaRegistry
-                .deSerializeDataModel(PATH + SER_FILE_PATH);
-        YsrAppContext appContext = new YsrAppContext();
-        defaultYangSchemaRegistry.ysrContextForSchemaStore(appContext);
-        defaultYangSchemaRegistry
-                .setClassLoader(this.getClass().getClassLoader());
-        String appName;
-        for (YangSchemaNode node : appNode) {
-            defaultYangSchemaRegistry.processApplicationContext(node);
-            defaultYangSchemaRegistry.ysrAppContext().appObject(appObject);
-            defaultYangSchemaRegistry.ysrContextForAppStore()
-                    .appObject(appObject);
-            defaultYangSchemaRegistry.ysrContextForSchemaStore()
-                    .appObject(appObject);
-            appName = node.getJavaPackage() + PERIOD +
-                    getCapitalCase(node.getJavaClassNameOrBuiltInType());
-            storeClasses(appName);
-        }
-
-        try {
-            deleteDirectory(TEMP_FOLDER_PATH);
-        } catch (IOException e) {
-        }
-    }
-
-    /**
-     * Stores test generated class to YSR store.
-     *
-     * @param name name of class
-     */
-    private void storeClasses(String name) {
-        ClassLoader classLoader = this.getClass().getClassLoader();
-        if (getDefaultYangSchemaRegistry().verifyClassExistence(name)) {
-            try {
-                Class<?> nodeClass = classLoader.loadClass(name);
-                getDefaultYangSchemaRegistry().updateServiceClass(nodeClass);
-            } catch (ClassNotFoundException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    /**
-     * Unregisters services.
-     *
-     * @param appName application name
-     */
-    public void unregisterService(String appName) {
-
-        if (getDefaultYangSchemaRegistry().verifyClassExistence(appName)) {
-            try {
-                Class<?> curClass = Class.forName(appName);
-                getDefaultYangSchemaRegistry()
-                        .unRegisterApplication(null, curClass);
-            } catch (ClassNotFoundException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    /**
-     * Returns schema registry.
-     *
-     * @return schema registry
-     */
-    public DefaultYangSchemaRegistry getDefaultYangSchemaRegistry() {
-        return defaultYangSchemaRegistry;
-    }
-
-    /**
-     * Process registration of a service.
-     */
-    public void processRegistrationOfApp() {
-        getDefaultYangSchemaRegistry()
-                .processRegistration(IetfNetwork1Service.class,
-                                     new MockIetfManager(), "target");
-
-    }
-
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ytb/DefaultYangTreeBuilderTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/ytb/DefaultYangTreeBuilderTest.java
deleted file mode 100644
index b7bec31..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/ytb/DefaultYangTreeBuilderTest.java
+++ /dev/null
@@ -1,1127 +0,0 @@
-/*
- * 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.ytb;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yang.gen.v1.yms.test.ytb.derived.type.with.bits.and.binary.rev20160826.YtbDerivedTypeWithBitsAndBinary;
-import org.onosproject.yang.gen.v1.yms.test.ytb.derived.type.with.bits.and.binary.rev20160826.YtbDerivedTypeWithBitsAndBinaryOpParam;
-import org.onosproject.yang.gen.v1.yms.test.ytb.derived.type.with.bits.and.binary.rev20160826.ytbderivedtypewithbitsandbinary.Derivedbinarya;
-import org.onosproject.yang.gen.v1.yms.test.ytb.derived.type.with.bits.and.binary.rev20160826.ytbderivedtypewithbitsandbinary.Derivedbinaryb;
-import org.onosproject.yang.gen.v1.yms.test.ytb.derived.type.with.bits.and.binary.rev20160826.ytbderivedtypewithbitsandbinary.Derivedbitsa;
-import org.onosproject.yang.gen.v1.yms.test.ytb.derived.type.with.bits.and.binary.rev20160826.ytbderivedtypewithbitsandbinary.Derivedbitsb;
-import org.onosproject.yang.gen.v1.yms.test.ytb.derived.type.with.bits.and.binary.rev20160826.ytbderivedtypewithbitsandbinary.ForunionUnion;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.container.rev20160826.YtbModuleWithContainer;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.container.rev20160826.YtbModuleWithContainerOpParam;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.container.rev20160826.ytbmodulewithcontainer.DefaultSched;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.container.rev20160826.ytbmodulewithcontainer.Sched;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.leaf.ietfschedule.rev20160826.YtbIetfSchedule;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.leaf.ietfschedule.rev20160826.YtbIetfScheduleOpParam;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.leaf.ietfschedule.rev20160826.ytbietfschedule.Enum1Enum;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.leaf.ietfschedule.rev20160826.ytbietfschedule.Enum2Enum;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.leaflist.rev20160826.YtbModuleWithLeafList;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.leaflist.rev20160826.YtbModuleWithLeafListOpParam;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.list.rev20160826.YtbModuleWithList;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.list.rev20160826.YtbModuleWithListOpParam;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.list.rev20160826.ytbmodulewithlist.DefaultYtblistlist;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.list.rev20160826.ytbmodulewithlist.Find;
-import org.onosproject.yang.gen.v1.yms.test.ytb.module.with.list.rev20160826.ytbmodulewithlist.Ytblistlist;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.module.a.rev20160826.YtbMultiModulea;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.module.a.rev20160826.YtbMultiModuleaOpParam;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.module.a.rev20160826.ytbmultimodulea.DefaultYtbmultilist;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.module.a.rev20160826.ytbmultimodulea.Ytbmultilist;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.module.b.rev20160826.YtbMultiModuleb;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.module.b.rev20160826.YtbMultiModulebOpParam;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.module.b.rev20160826.ytbmultimoduleb.DefaultYtbmultilistb;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.module.b.rev20160826.ytbmultimoduleb.Ytbmultilistb;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.notification.with.container.rev20160826.ytbmultinotificationwithcontainer.DefaultFortesta;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.notification.with.container.rev20160826.ytbmultinotificationwithcontainer.Fortesta;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.notification.with.container.rev20160826.ytbmultinotificationwithcontainer.YtbMultiNotificationWithContainerEvent;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.notification.with.container.rev20160826.ytbmultinotificationwithcontainer.YtbMultiNotificationWithContainerEventSubject;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.notification.with.container.rev20160826.ytbmultinotificationwithcontainer.fortesta.DefaultYtbnot;
-import org.onosproject.yang.gen.v1.yms.test.ytb.multi.notification.with.container.rev20160826.ytbmultinotificationwithcontainer.fortesta.Ytbnot;
-import org.onosproject.yang.gen.v1.yms.test.ytb.tree.builder.yangautoprefixfor.list.having.list.rev20160826.YtbTreeBuilderForListHavingList;
-import org.onosproject.yang.gen.v1.yms.test.ytb.tree.builder.yangautoprefixfor.list.having.list.rev20160826.YtbTreeBuilderForListHavingListOpParam;
-import org.onosproject.yang.gen.v1.yms.test.ytb.tree.builder.yangautoprefixfor.list.having.list.rev20160826.ytbtreebuilderforlisthavinglist.Carrier;
-import org.onosproject.yang.gen.v1.yms.test.ytb.tree.builder.yangautoprefixfor.list.having.list.rev20160826.ytbtreebuilderforlisthavinglist.DefaultCarrier;
-import org.onosproject.yang.gen.v1.yms.test.ytb.tree.builder.yangautoprefixfor.list.having.list.rev20160826.ytbtreebuilderforlisthavinglist.carrier.DefaultMultiplexes;
-import org.onosproject.yang.gen.v1.yms.test.ytb.tree.builder.yangautoprefixfor.list.having.list.rev20160826.ytbtreebuilderforlisthavinglist.carrier.Multiplexes;
-import org.onosproject.yang.gen.v1.yms.test.ytb.tree.builder.yangautoprefixfor.list.having.list.rev20160826.ytbtreebuilderforlisthavinglist.carrier.multiplexes.ApplicationAreas;
-import org.onosproject.yang.gen.v1.yms.test.ytb.tree.builder.yangautoprefixfor.list.having.list.rev20160826.ytbtreebuilderforlisthavinglist.carrier.multiplexes.DefaultApplicationAreas;
-import org.onosproject.yang.gen.v1.yms.test.ytb.tree.builder.yangautoprefixfor.list.having.list.rev20160826.ytbtreebuilderforlisthavinglist.carrier.multiplexes.TypesEnum;
-import org.onosproject.yms.app.ydt.YdtExtendedBuilder;
-import org.onosproject.yms.app.ydt.YdtNode;
-import org.onosproject.yms.app.ysr.DefaultYangSchemaRegistry;
-import org.onosproject.yms.ydt.YdtBuilder;
-import org.onosproject.yms.ydt.YdtContext;
-import org.onosproject.yms.ydt.YdtContextOperationType;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.util.List;
-import java.util.Set;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yang.gen.v1.yms.test.ytb.module.with.leaf.ietfschedule.rev20160826.YtbIetfScheduleOpParam.OnosYangNodeOperationType;
-import static org.onosproject.yms.ydt.YdtContextOperationType.CREATE;
-import static org.onosproject.yms.ydt.YdtContextOperationType.DELETE;
-import static org.onosproject.yms.ydt.YdtContextOperationType.MERGE;
-import static org.onosproject.yms.ydt.YdtContextOperationType.NONE;
-import static org.onosproject.yms.ydt.YmsOperationType.EDIT_CONFIG_REQUEST;
-import static org.onosproject.yms.ydt.YmsOperationType.QUERY_CONFIG_REQUEST;
-import static org.onosproject.yms.ydt.YmsOperationType.QUERY_REQUEST;
-
-/**
- * Unit test cases for YANG tree builder with different YANG object
- * configuration.
- */
-public class DefaultYangTreeBuilderTest extends YtbErrMsgAndConstants {
-
-
-    private static final String ONE = "1";
-    private static final String TWO = "2";
-    private static final String THREE = "3";
-    private static final String FOUR = "4";
-    private static final String FIVE = "5";
-    private static final String SIX = "6";
-    private static final String NINE = "9";
-    private static final String IETF_SCHEDULE = "YtbIetfSchedule";
-    private static final String TIME = "time";
-    private static final String MOD_LEAF_LIST = "YtbModuleWithLeafList";
-    private static final String ENUM_1 = "enum1";
-    private static final String ENUM_2 = "enum2";
-    private static final String HUNDRED = "hundred";
-    private static final String HUNDRED_100 = "hundred-100";
-    private static final String TEN_10 = "ten-10";
-    private static final String THOUSAND_1000 = "thousand-1000";
-    private static final String MOD_CONT = "YtbModuleWithContainer";
-    private static final String SCHED = "sched";
-    private static final String PREDICT_VAL = "98989";
-    private static final String MOD_LIST = "YtbModuleWithList";
-    private static final String LIST_LIST = "ytblistlist";
-    private static final String PREDICTION = "prediction";
-    private static final String TRUE = "true";
-    private static final String FALSE = "false";
-    private static final String MUL_NOTIFY =
-            "YtbMultiNotificationWithContainer";
-    private static final String NOTIFICATION = "notification";
-    private static final String NOTIFY = "fortesta";
-    private static final String YTB_NOTIFY_CONT = "ytbnot";
-    private static final String NOTIFY_LEAF = "notileaf";
-    private static final String ANT = "ant";
-    private static final String ANIMAL = "animal";
-    private static final String BIRD = "bird";
-    private static final String BALL = "ball";
-    private static final String BAT = "bat";
-    private static final String MUL_MOD_A = "YtbMultiModulea";
-    private static final String MUL_LIST_A = "ytbmultilist";
-    private static final String CHECK = "check";
-    private static final String MUL_MOD_B = "YtbMultiModuleb";
-    private static final String MUL_LIST_B = "ytbmultilistb";
-    private static final String CHECKIN = "checkin";
-    private static final String LIST_WITH_LIST =
-            "YtbTreeBuilderForListHavingList";
-    private static final String CONT_CARRIER = "carrier";
-    private static final String LIST_MULTIPLEXES = "multiplexes";
-    private static final String TYPES = "types";
-    private static final String TIME_DIVISION = "time-division";
-    private static final String APP_AREA_LIST = "application-areas";
-    private static final String DEST_AREA = "destination-areas";
-    private static final String FREQUENCY_DIV = "frequency-division";
-    private static final String MOD_BIT_BIN = "YtbDerivedTypeWithBitsAndBinary";
-    private static final String FOR_BINARY = "forbinary";
-    private static final String BIN_VAL_1 = "BQUF";
-    private static final String FOR_BITS = "forbits";
-    private static final String FOR_BINARY_LIST = "forbinarylist";
-    private static final String BIN_VAL_2 = "CQkA";
-    private static final String BIN_VAL_3 = "DAYA";
-    private static final String BIN_VAL_4 = "EB0Z";
-    private static final String FOR_BITS_LIST = "forbitslist";
-    private static final String FOR_UNION = "forunion";
-    private static final String ZERO = "0";
-
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-
-    private static String emptyObjErrMsg(String objName) {
-        return "The " + objName + " given for tree creation cannot be null";
-    }
-
-    private static BigDecimal getBigDeci(int bigDecimal) {
-        return BigDecimal.valueOf(bigDecimal);
-    }
-
-    /**
-     * Processes an empty object list to the YTB and checks that the
-     * exception is thrown.
-     */
-    @Test
-    public void processInvalidListInput() {
-        thrown.expect(YtbException.class);
-        thrown.expectMessage(emptyObjErrMsg("object list"));
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        treeBuilder.getYdtBuilderForYo(null, ROOT_NAME, ROOT_NAME_SPACE,
-                                       EDIT_CONFIG_REQUEST, null);
-    }
-
-    /**
-     * Processes an empty notification object to the YTB and checks that the
-     * exception is thrown.
-     */
-    @Test
-    public void processInvalidInputForNotification() {
-        thrown.expect(YtbException.class);
-        thrown.expectMessage(emptyObjErrMsg("event object"));
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        treeBuilder.getYdtForNotification(null, ROOT_NAME, null);
-    }
-
-    /**
-     * Processes an empty rpc output object to the YTB and checks that the
-     * exception is thrown.
-     */
-    @Test
-    public void processInvalidInputForRpc() {
-        thrown.expect(YtbException.class);
-        thrown.expectMessage(emptyObjErrMsg("output object"));
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        treeBuilder.getYdtForRpcResponse(null, null);
-    }
-
-    /**
-     * Processes a YAB/YSB request to YTB with a leaf value being filled in
-     * the app object. Checks the constructed YDT tree for module and leaf
-     * and its value.
-     */
-    @Test
-    public void processModuleAndLeaf() {
-
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-        YtbIetfSchedule schedule = new YtbIetfScheduleOpParam
-                .YtbIetfScheduleBuilder()
-                .time((byte) 9)
-                .onosYangNodeOperationType(OnosYangNodeOperationType.MERGE)
-                .build();
-
-        // As YSB or YAB protocol sets the value for YTB.
-        List<Object> objectList = new ArrayList<>();
-        objectList.add(schedule);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtExtendedBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                objectList, ROOT_NAME, ROOT_NAME_SPACE,
-                EDIT_CONFIG_REQUEST, registry);
-
-        // Receives YDT context and checks the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-
-        // Gets the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        YdtContextOperationType opType = ((YdtNode) module)
-                .getYdtContextOperationType();
-        assertThat(getInCrtName(MODULE, IETF_SCHEDULE),
-                   module.getName(), is(IETF_SCHEDULE));
-        assertThat(getInCrtOpType(MODULE, IETF_SCHEDULE),
-                   opType, is(MERGE));
-
-        // Gets the first leaf from module IetfSchedule.
-        YdtContext leafContext = module.getFirstChild();
-        assertThat(getInCrtName(LEAF, TIME),
-                   leafContext.getName(), is(TIME));
-        assertThat(getInCrtLeafValue(TIME, NINE),
-                   leafContext.getValue(), is(NINE));
-    }
-
-    /**
-     * Processes a YAB/YSB request to YTB with a leaf-list value being filled
-     * in the app object. Checks the constructed YDT tree for module and
-     * leaf-list and its value.
-     */
-    @Test
-    public void processModuleAndLeafList() {
-
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-
-        // Creates list of type long for setting the leaf-list.
-        List<Long> longList = new ArrayList<>();
-        longList.add((long) 1);
-        longList.add((long) 2);
-        longList.add((long) 3);
-
-        YtbModuleWithLeafList leafListModule = new YtbModuleWithLeafListOpParam
-                .YtbModuleWithLeafListBuilder().time(longList).build();
-
-        // As YSB or YAB protocol sets the value for YTB.
-        List<Object> objectList = new ArrayList<>();
-        objectList.add(leafListModule);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                objectList, ROOT_NAME, ROOT_NAME_SPACE, QUERY_REQUEST, registry);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-
-        // Gets the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        YdtContextOperationType opType = ((YdtNode) module)
-                .getYdtContextOperationType();
-        assertThat(getInCrtName(MODULE, MOD_LEAF_LIST),
-                   module.getName(), is(MOD_LEAF_LIST));
-        assertThat(getInCrtOpType(MODULE, MOD_LEAF_LIST), opType, is(NONE));
-
-        // Gets the first leaf-list from module.
-        YdtContext leafList = module.getFirstChild();
-        assertThat(getInCrtName(LEAF_LIST, TIME), leafList.getName(),
-                   is(TIME));
-        Set<String> value = leafList.getValueSet();
-        assertThat(getInCrtLeafListValue(TIME, ONE),
-                   value.contains(ONE), is(true));
-        assertThat(getInCrtLeafListValue(TIME, TWO),
-                   value.contains(TWO), is(true));
-        assertThat(getInCrtLeafListValue(TIME, THREE),
-                   value.contains(THREE), is(true));
-    }
-
-    /**
-     * Processes leaf and leaf-list with type enum under module. Checks the
-     * constructed YDT tree has YANG enum value.
-     */
-    @Test
-    public void processWithTypeEnum() {
-
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-
-        // Creates enum list for setting the leaf-list.
-        List<Enum2Enum> enumList = new ArrayList<>();
-        enumList.add(Enum2Enum.HUNDRED_100);
-        enumList.add(Enum2Enum.TEN_10);
-        enumList.add(Enum2Enum.THOUSAND_1000);
-
-        YtbIetfSchedule schedule = new YtbIetfScheduleOpParam
-                .YtbIetfScheduleBuilder()
-                .time((byte) 9)
-                .onosYangNodeOperationType(OnosYangNodeOperationType.MERGE)
-                .enum1(Enum1Enum.HUNDRED)
-                .enum2(enumList)
-                .build();
-
-
-        // As YSB or YAB protocol sets the value for YTB.
-        List<Object> objectList = new ArrayList<>();
-        objectList.add(schedule);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtExtendedBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                objectList, ROOT_NAME, ROOT_NAME_SPACE,
-                EDIT_CONFIG_REQUEST, registry);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-
-        // Gets the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        YdtContextOperationType opType =
-                ((YdtNode) module).getYdtContextOperationType();
-        assertThat(getInCrtName(MODULE, IETF_SCHEDULE),
-                   module.getName(), is(IETF_SCHEDULE));
-        assertThat(getInCrtOpType(MODULE, IETF_SCHEDULE), opType, is(MERGE));
-
-        // Checks the leaf and leaf-list values.
-        YdtContext timeLeaf = module.getFirstChild();
-        assertThat(getInCrtName(LEAF, TIME), timeLeaf.getName(), is(TIME));
-        assertThat(getInCrtLeafValue(TIME, NINE),
-                   timeLeaf.getValue(), is(NINE));
-
-        YdtContext enum1Leaf = timeLeaf.getNextSibling();
-        assertThat(getInCrtName(LEAF, ENUM_1), enum1Leaf.getName(), is(ENUM_1));
-        assertThat(getInCrtLeafValue(ENUM_1, HUNDRED),
-                   enum1Leaf.getValue(), is(HUNDRED));
-
-        YdtContext enum2LeafList = enum1Leaf.getNextSibling();
-        assertThat(getInCrtName(LEAF_LIST, ENUM_2),
-                   enum2LeafList.getName(), is(ENUM_2));
-        Set<String> valueSet = enum2LeafList.getValueSet();
-        assertThat(getInCrtLeafListValue(ENUM_2, HUNDRED_100),
-                   valueSet.contains(HUNDRED_100), is(true));
-        assertThat(getInCrtLeafListValue(ENUM_2, TEN_10),
-                   valueSet.contains(TEN_10), is(true));
-        assertThat(getInCrtLeafListValue(ENUM_2, THOUSAND_1000),
-                   valueSet.contains(THOUSAND_1000), is(true));
-    }
-
-    /**
-     * Processes a YAB/YSB request to YTB with a container having leaf value
-     * being filled in the app object. Checks the constructed YDT tree for
-     * module and container and leaf.
-     */
-    @Test
-    public void processModuleWithContainer() {
-
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-
-        // Creates container object with leaf of decimal type.
-        Sched sched = new DefaultSched.SchedBuilder()
-                .predict(getBigDeci(98989))
-                .onosYangNodeOperationType(
-                        DefaultSched.OnosYangNodeOperationType.DELETE)
-                .build();
-        // Creates module object with the container.
-        YtbModuleWithContainer contModule = new YtbModuleWithContainerOpParam
-                .YtbModuleWithContainerBuilder()
-                .sched(sched)
-                .onosYangNodeOperationType(
-                        YtbModuleWithContainerOpParam
-                                .OnosYangNodeOperationType.CREATE)
-                .build();
-
-        // As YSB or YAB protocol sets the value for YTB.
-        List<Object> objectList = new ArrayList<>();
-        objectList.add(contModule);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                objectList, ROOT_NAME, ROOT_NAME_SPACE,
-                QUERY_CONFIG_REQUEST, registry);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-
-        // Gets the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        YdtContextOperationType opType = ((YdtNode) module)
-                .getYdtContextOperationType();
-
-        assertThat(getInCrtName(MODULE, MOD_CONT),
-                   module.getName(), is(MOD_CONT));
-        assertThat(getInCrtOpType(MODULE, MOD_CONT), opType, is(CREATE));
-
-        // Get the container from module.
-        YdtContext container = module.getFirstChild();
-        YdtContextOperationType opTypeOfCont = ((YdtNode) container)
-                .getYdtContextOperationType();
-
-        assertThat(getInCrtName(CONTAINER, SCHED),
-                   container.getName(), is("sched"));
-        assertThat(getInCrtOpType(CONTAINER, SCHED), opTypeOfCont, is(DELETE));
-
-        // Gets leaf from container.
-        YdtContext leafContext = container.getFirstChild();
-        assertThat(getInCrtName(LEAF, PREDICT),
-                   leafContext.getName(), is(PREDICT));
-        assertThat(getInCrtLeafValue(PREDICT, PREDICT_VAL),
-                   leafContext.getValue(), is(PREDICT_VAL));
-    }
-
-    /**
-     * Processes a YAB/YSB request to YTB with a list having leaf-list value
-     * being filled in the app object. Checks the constructed YDT tree for
-     * module and list and leaf-list.
-     */
-    @Test
-    public void processModuleWithList() {
-
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-
-        // Creates multi typedef values.
-        Find find1 = new Find(true);
-        Find find2 = new Find(false);
-        Find find3 = new Find(true);
-        Find find4 = new Find(false);
-
-        // Creates two lists, with the typedef values added.
-        List<Find> findList1 = new ArrayList<>();
-        List<Find> findList2 = new ArrayList<>();
-        findList1.add(find1);
-        findList1.add(find2);
-        findList2.add(find3);
-        findList2.add(find4);
-
-        // Creates two list contents.
-        Ytblistlist list1 = new DefaultYtblistlist
-                .YtblistlistBuilder().prediction(findList1).build();
-        Ytblistlist list2 = new DefaultYtblistlist
-                .YtblistlistBuilder().prediction(findList2).build();
-
-        List<Ytblistlist> ytbList = new ArrayList<>();
-        ytbList.add(list1);
-        ytbList.add(list2);
-
-        // Creates module having list.
-        YtbModuleWithList listModule = new YtbModuleWithListOpParam
-                .YtbModuleWithListBuilder().ytblistlist(ytbList).build();
-
-        // As YSB or YAB protocol sets the value for YTB.
-        List<Object> objectList = new ArrayList<>();
-        objectList.add(listModule);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                objectList, ROOT_NAME, ROOT_NAME_SPACE,
-                EDIT_CONFIG_REQUEST, registry);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-
-        // Gets the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        YdtContextOperationType opType = ((YdtNode) module)
-                .getYdtContextOperationType();
-
-        assertThat(getInCrtName(MODULE, MOD_LIST),
-                   module.getName(), is(MOD_LIST));
-        assertThat(getInCrtOpType(MODULE, MOD_LIST), opType, is(NONE));
-
-        // Gets the first list from module YtbModuleWithList.
-        YdtContext firstList = module.getFirstChild();
-        YdtContextOperationType listOpType = ((YdtNode) firstList)
-                .getYdtContextOperationType();
-        // Checks the contents in the list.
-        assertThat(getInCrtName(LIST, LIST_LIST),
-                   firstList.getName(), is(LIST_LIST));
-        assertThat(getInCrtOpType(LIST, LIST_LIST), listOpType, is(NONE));
-
-        // Gets the contents of the leaf-list in the first list content.
-        YdtContext leafListInList1 = firstList.getFirstChild();
-
-        // Evaluates the leaf-list values.
-        Set leafListValue1 = leafListInList1.getValueSet();
-        assertThat(getInCrtName(LEAF_LIST, PREDICTION),
-                   leafListInList1.getName(), is(PREDICTION));
-        assertThat(getInCrtLeafListValue(PREDICTION, TRUE),
-                   leafListValue1.contains(TRUE), is(true));
-        assertThat(getInCrtLeafListValue(PREDICTION, FALSE),
-                   leafListValue1.contains(FALSE), is(true));
-
-        // Gets the second list from module YtbModuleWithList.
-        YdtContext secondList = firstList.getNextSibling();
-
-        // Gets the contents of the leaf-list in the second list content.
-        YdtContext leafListInList2 = secondList.getFirstChild();
-        // Evaluates the leaf-list values.
-        Set leafListValue2 = leafListInList2.getValueSet();
-        assertThat(getInCrtName(LEAF_LIST, PREDICTION),
-                   leafListInList2.getName(), is(PREDICTION));
-        assertThat(getInCrtLeafListValue(PREDICTION, TRUE),
-                   leafListValue2.contains(TRUE), is(true));
-        assertThat(getInCrtLeafListValue(PREDICTION, FALSE),
-                   leafListValue2.contains(FALSE), is(true));
-    }
-
-    /**
-     * Processes multi notification under module when request comes for one
-     * notification event in module.
-     */
-    @Test
-    public void processMultiNotificationWithContainer() {
-
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-
-        // Sets the bit value.
-        BitSet bitleaf = new BitSet();
-        bitleaf.set(5);
-        bitleaf.set(7);
-
-        // Creates container with the leaf.
-        Ytbnot ytbnot = new DefaultYtbnot.YtbnotBuilder().notileaf(bitleaf)
-                .build();
-        // Creates notification with container.
-        Fortesta testa = new DefaultFortesta.FortestaBuilder()
-                .ytbnot(ytbnot).build();
-        // Invokes event subject class with notification.
-        YtbMultiNotificationWithContainerEventSubject eventSubject = new
-                YtbMultiNotificationWithContainerEventSubject();
-        eventSubject.fortesta(testa);
-        // Invokes event class with the event type and the event subject obj.
-        YtbMultiNotificationWithContainerEvent event =
-                new YtbMultiNotificationWithContainerEvent(
-                        YtbMultiNotificationWithContainerEvent.Type.FORTESTA,
-                        eventSubject);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtContext ydtContext = treeBuilder.getYdtForNotification(
-                event, ROOT_NAME, registry);
-
-        // Gets the first module from logical root node.
-        YdtContext context = ydtContext.getFirstChild();
-        YdtContextOperationType opType = ((YdtNode) context)
-                .getYdtContextOperationType();
-
-        assertThat(getInCrtName(MODULE, MUL_NOTIFY), context.getName(),
-                   is(MUL_NOTIFY));
-        assertThat(getInCrtOpType(MODULE, MUL_NOTIFY), opType, is(NONE));
-
-        // Gets the notification under module.
-        YdtContext notify = context.getFirstChild();
-        YdtContextOperationType notifyOpType = ((YdtNode) notify)
-                .getYdtContextOperationType();
-
-        // Checks the contents in the first notification.
-        assertThat(getInCrtName(NOTIFICATION, NOTIFY), notify.getName(),
-                   is(NOTIFY));
-        assertThat(getInCrtOpType(NOTIFICATION, NOTIFY), notifyOpType,
-                   is(NONE));
-
-        // Gets the container in notification
-        YdtContext container = notify.getFirstChild();
-        assertThat(getInCrtName(CONTAINER, YTB_NOTIFY_CONT),
-                   container.getName(), is(YTB_NOTIFY_CONT));
-
-        // Evaluates the leaf values.
-        YdtContext leafInCont = container.getFirstChild();
-        assertThat(getInCrtName(LEAF, NOTIFY_LEAF), leafInCont.getName(),
-                   is(NOTIFY_LEAF));
-        // TODO: check the bits to string.
-    }
-
-    /**
-     * Processes multi module with list in both the modules and checks the
-     * YANG data tree building.
-     */
-    @Test
-    public void processMultiModule() {
-
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-
-        // Creates list of big integer for leaf-list under list1.
-        List<BigInteger> bigIntegerList = new ArrayList<>();
-        bigIntegerList.add(BigInteger.valueOf(1));
-        bigIntegerList.add(BigInteger.valueOf(2));
-        bigIntegerList.add(BigInteger.valueOf(3));
-        // Creates list of big integer for leaf-list under list2.
-        List<BigInteger> bigIntegerList1 = new ArrayList<>();
-        bigIntegerList1.add(BigInteger.valueOf(4));
-        bigIntegerList1.add(BigInteger.valueOf(5));
-        bigIntegerList1.add(BigInteger.valueOf(6));
-
-        // Creates two list contents.
-        Ytbmultilist listContent1 = new DefaultYtbmultilist
-                .YtbmultilistBuilder().check(bigIntegerList).build();
-        Ytbmultilist listContent2 = new DefaultYtbmultilist
-                .YtbmultilistBuilder().check(bigIntegerList1).build();
-
-        List<Ytbmultilist> ytbmultilists = new ArrayList<>();
-        ytbmultilists.add(listContent1);
-        ytbmultilists.add(listContent2);
-
-        // Creates module-a with two list contents created.
-        YtbMultiModulea modulea = new YtbMultiModuleaOpParam
-                .YtbMultiModuleaBuilder().ytbmultilist(ytbmultilists).build();
-
-        // Creates list of string for leaf-list under list1.
-        List<String> stringList = new ArrayList<>();
-        stringList.add(ANT);
-        stringList.add(ANIMAL);
-        stringList.add(BIRD);
-
-        // Creates list of string for leaf-list under list2.
-        List<String> stringList1 = new ArrayList<>();
-        stringList1.add(CATCH);
-        stringList1.add(BALL);
-        stringList1.add(BAT);
-
-        // Creates two list contents.
-        Ytbmultilistb listContent3 = new DefaultYtbmultilistb
-                .YtbmultilistbBuilder().checkin(stringList).build();
-        Ytbmultilistb listContent4 = new DefaultYtbmultilistb
-                .YtbmultilistbBuilder().checkin(stringList1).build();
-
-        List<Ytbmultilistb> ytbMultiListb = new ArrayList<>();
-        ytbMultiListb.add(listContent3);
-        ytbMultiListb.add(listContent4);
-
-        // Creates module-b with two list contents created.
-        YtbMultiModuleb moduleb = new YtbMultiModulebOpParam
-                .YtbMultiModulebBuilder().ytbmultilistb(ytbMultiListb).build();
-
-        // As YSB or YAB protocol sets the value for YTB.
-        List<Object> listOfModules = new ArrayList<>();
-        listOfModules.add(modulea);
-        listOfModules.add(moduleb);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                listOfModules, ROOT_NAME, ROOT_NAME_SPACE,
-                EDIT_CONFIG_REQUEST, registry);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-
-        // Checks module-a under root node.
-        YdtContext moduleA = context.getFirstChild();
-        assertThat(getInCrtName(MODULE, MUL_MOD_A), moduleA.getName(),
-                   is(MUL_MOD_A));
-
-        // Checks list-a in module-a and its respective leaf-list.
-        YdtContext list1InModuleA = moduleA.getFirstChild();
-        assertThat(getInCrtName(LIST, MUL_LIST_A), list1InModuleA.getName(),
-                   is(MUL_LIST_A));
-
-        YdtContext leafListA = list1InModuleA.getFirstChild();
-        assertThat(getInCrtName(LEAF_LIST, CHECK), leafListA.getName(),
-                   is(CHECK));
-
-        Set<String> valueA = leafListA.getValueSet();
-        assertThat(getInCrtLeafListValue(CHECK, ONE), valueA.contains(ONE),
-                   is(true));
-        assertThat(getInCrtLeafListValue(CHECK, TWO), valueA.contains(TWO),
-                   is(true));
-        assertThat(getInCrtLeafListValue(CHECK, THREE), valueA.contains(THREE),
-                   is(true));
-
-        // Checks list-b in module-a and its respective leaf-list.
-        YdtContext list2InModuleA = list1InModuleA.getNextSibling();
-        assertThat(getInCrtName(LIST, MUL_LIST_A), list2InModuleA.getName(),
-                   is(MUL_LIST_A));
-
-        YdtContext leafListB = list2InModuleA.getFirstChild();
-        assertThat(getInCrtName(LEAF_LIST, CHECK), leafListB.getName(),
-                   is(CHECK));
-
-        Set<String> valueB = leafListB.getValueSet();
-        assertThat(getInCrtLeafListValue(CHECK, FOUR), valueB.contains(FOUR),
-                   is(true));
-        assertThat(getInCrtLeafListValue(CHECK, FIVE), valueB.contains(FIVE),
-                   is(true));
-        assertThat(getInCrtLeafListValue(CHECK, SIX), valueB.contains(SIX),
-                   is(true));
-
-        // Checks module-b under root node.
-        YdtContext moduleB = moduleA.getNextSibling();
-        assertThat(getInCrtName(MODULE, MUL_MOD_B), moduleB.getName(),
-                   is(MUL_MOD_B));
-
-        // Checks list-a in module-b and its respective leaf-list.
-        YdtContext list1InModuleB = moduleB.getFirstChild();
-        assertThat(getInCrtName(LIST, MUL_LIST_B), list1InModuleB.getName(),
-                   is(MUL_LIST_B));
-
-        YdtContext leafListC = list1InModuleB.getFirstChild();
-        assertThat(getInCrtName(LEAF_LIST, CHECKIN), leafListC.getName(),
-                   is(CHECKIN));
-
-        Set<String> valueC = leafListC.getValueSet();
-        assertThat(getInCrtLeafListValue(CHECKIN, ANT), valueC.contains(ANT),
-                   is(true));
-        assertThat(getInCrtLeafListValue(CHECKIN, ANIMAL),
-                   valueC.contains(ANIMAL), is(true));
-        assertThat(getInCrtLeafListValue(CHECKIN, BIRD),
-                   valueC.contains(BIRD), is(true));
-
-        // Checks list-b in module-b and its respective leaf-list.
-        YdtContext list2InModuleB = list1InModuleB.getNextSibling();
-        assertThat(getInCrtName(LIST, MUL_LIST_B), list2InModuleB.getName(),
-                   is(MUL_LIST_B));
-
-        YdtContext leafListD = list2InModuleB.getFirstChild();
-        assertThat(getInCrtName(LEAF_LIST, CHECKIN), leafListD.getName(),
-                   is(CHECKIN));
-
-        Set<String> valueD = leafListD.getValueSet();
-        assertThat(getInCrtLeafListValue(CHECKIN, CATCH),
-                   valueD.contains(CATCH), is(true));
-        assertThat(getInCrtLeafListValue(CHECKIN, BALL),
-                   valueD.contains(BALL), is(true));
-        assertThat(getInCrtLeafListValue(CHECKIN, BAT),
-                   valueD.contains(BAT), is(true));
-    }
-
-    /**
-     * Processes tree building when a list node is having list inside it.
-     */
-    @Test
-    public void processTreeBuilderForListHavingList() {
-
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-
-        // Creates two binary leaf-lists for two list app areas.
-        List<byte[]> destArea1 = new ArrayList<>();
-        byte[] arr = new byte[]{1, 6, 3};
-        byte[] arr1 = new byte[]{2, 7, 4};
-        destArea1.add(arr);
-        destArea1.add(arr1);
-
-        List<byte[]> destArea2 = new ArrayList<>();
-        byte[] arr2 = new byte[]{3, 8, 4};
-        byte[] arr3 = new byte[]{5, 6, 1};
-        destArea2.add(arr2);
-        destArea2.add(arr3);
-
-        // Creates two app areas list.
-        ApplicationAreas appArea1 = new DefaultApplicationAreas
-                .ApplicationAreasBuilder().destinationAreas(destArea1).build();
-        ApplicationAreas appArea2 = new DefaultApplicationAreas
-                .ApplicationAreasBuilder().destinationAreas(destArea2).build();
-
-        List<ApplicationAreas> applicationAreasList = new ArrayList<>();
-        applicationAreasList.add(appArea1);
-        applicationAreasList.add(appArea2);
-
-        // Adds two lists under the multiplex list for content 1.
-        Multiplexes mpx1 = new DefaultMultiplexes.MultiplexesBuilder()
-                .types(TypesEnum.TIME_DIVISION)
-                .applicationAreas(applicationAreasList).build();
-
-        // Creates two binary leaf-lists for two list app areas.
-        List<byte[]> destArea3 = new ArrayList<>();
-        byte[] arrB = new byte[]{0, 0, 1};
-        byte[] arr1B = new byte[]{1, 0, 0};
-        destArea3.add(arrB);
-        destArea3.add(arr1B);
-
-        List<byte[]> destArea4 = new ArrayList<>();
-        byte[] arr2B = new byte[]{7, 7, 7};
-        byte[] arr3B = new byte[]{0, 1};
-        destArea4.add(arr2B);
-        destArea4.add(arr3B);
-
-        // Creates two app areas list.
-        ApplicationAreas appArea3 = new DefaultApplicationAreas
-                .ApplicationAreasBuilder().destinationAreas(destArea3).build();
-        ApplicationAreas appArea4 = new DefaultApplicationAreas
-                .ApplicationAreasBuilder().destinationAreas(destArea4).build();
-
-        List<ApplicationAreas> applicationAreasListB = new ArrayList<>();
-        applicationAreasListB.add(appArea3);
-        applicationAreasListB.add(appArea4);
-
-        // Adds two lists under the multiplex list for content 2.
-        Multiplexes mpx2 = new DefaultMultiplexes.MultiplexesBuilder()
-                .types(TypesEnum.FREQUENCY_DIVISION)
-                .applicationAreas(applicationAreasListB).build();
-
-        List<Multiplexes> multiplexList = new ArrayList<>();
-        multiplexList.add(mpx1);
-        multiplexList.add(mpx2);
-
-        // Sets it in the container carrier.
-        Carrier carrier = new DefaultCarrier.CarrierBuilder()
-                .multiplexes(multiplexList).build();
-
-        YtbTreeBuilderForListHavingList listWithList = new
-                YtbTreeBuilderForListHavingListOpParam
-                        .YtbTreeBuilderForListHavingListBuilder()
-                .carrier(carrier).build();
-
-        // As YSB or YAB protocol sets the value for YTB.
-        List<Object> objectList = new ArrayList<>();
-        objectList.add(listWithList);
-
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                objectList, ROOT_NAME, ROOT_NAME_SPACE,
-                QUERY_CONFIG_REQUEST, registry);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-
-        // Gets the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        assertThat(getInCrtName(LIST, LIST_WITH_LIST), module.getName(),
-                   is(LIST_WITH_LIST));
-
-        // Checks the container node under module node.
-        YdtContext container = module.getFirstChild();
-        assertThat(getInCrtName(CONTAINER, CONT_CARRIER), container.getName(),
-                   is(CONT_CARRIER));
-
-        // Checks the list node with content 1 of multiplex.
-        YdtContext mtx1 = container.getFirstChild();
-        assertThat(getInCrtName(LIST, LIST_MULTIPLEXES), mtx1.getName(),
-                   is(LIST_MULTIPLEXES));
-
-        // Checks enum leaf under multiplex of content1.
-        YdtContext enumLeaf1 = mtx1.getFirstChild();
-        assertThat(getInCrtName(LEAF, TYPES), enumLeaf1.getName(), is(TYPES));
-        assertThat(getInCrtLeafValue(TYPES, TIME_DIVISION),
-                   enumLeaf1.getValue(), is(TIME_DIVISION));
-
-        // Checks list app area content 1 under multiplex content 1.
-        YdtContext appAreaList1 = enumLeaf1.getNextSibling();
-        assertThat(getInCrtName(LIST, APP_AREA_LIST), appAreaList1.getName(),
-                   is(APP_AREA_LIST));
-
-        YdtContext leafList1 = appAreaList1.getFirstChild();
-        assertThat(getInCrtName(LEAF_LIST, DEST_AREA), leafList1.getName(),
-                   is(DEST_AREA));
-        Set value1 = leafList1.getValueSet();
-        // TODO: check the leaf-list value.
-
-        // Checks list app area content 2 under multiplex content 1.
-        YdtContext appAreaList2 = appAreaList1.getNextSibling();
-        assertThat(getInCrtName(LIST, APP_AREA_LIST), appAreaList2.getName(),
-                   is(APP_AREA_LIST));
-
-        YdtContext leafList2 = appAreaList2.getFirstChild();
-        assertThat(getInCrtName(LEAF_LIST, DEST_AREA), leafList2.getName(),
-                   is(DEST_AREA));
-        Set value2 = leafList1.getValueSet();
-        // TODO: check the leaf-list value.
-
-        // Checks the list node with content 2 of multiplex.
-        YdtContext mtx2 = mtx1.getNextSibling();
-        assertThat(getInCrtName(LIST, LIST_MULTIPLEXES), mtx2.getName(),
-                   is(LIST_MULTIPLEXES));
-
-        // Checks enum leaf under multiplex of content2.
-        YdtContext enumLeaf2 = mtx2.getFirstChild();
-        assertThat(getInCrtName(LEAF, TYPES), enumLeaf2.getName(), is(TYPES));
-        assertThat(getInCrtLeafValue(TYPES, FREQUENCY_DIV),
-                   enumLeaf2.getValue(), is(FREQUENCY_DIV));
-
-        // Checks list app area content 1 under multiplex content 2.
-        YdtContext appAreaList3 = enumLeaf2.getNextSibling();
-        assertThat(getInCrtName(LIST, APP_AREA_LIST), appAreaList3.getName(),
-                   is(APP_AREA_LIST));
-
-        YdtContext leafList3 = appAreaList3.getFirstChild();
-        assertThat(getInCrtName(LEAF_LIST, DEST_AREA), leafList3.getName(),
-                   is(DEST_AREA));
-        Set value3 = leafList3.getValueSet();
-        // TODO: check the leaf-list value.
-
-        // Checks list app area content 2 under multiplex content 2.
-        YdtContext appAreaList4 = appAreaList3.getNextSibling();
-        assertThat(getInCrtName(LIST, APP_AREA_LIST), appAreaList4.getName(),
-                   is(APP_AREA_LIST));
-
-        YdtContext leafList4 = appAreaList4.getFirstChild();
-        assertThat(getInCrtName(LEAF_LIST, DEST_AREA), leafList4.getName(),
-                   is(DEST_AREA));
-        Set value4 = leafList4.getValueSet();
-        // TODO: check the leaf-list value.
-    }
-
-    /**
-     * Processes tree building from the derived type of leaf and leaf-list
-     * having binary and bits .
-     */
-    @Test
-    public void processTreeBuilderForBinaryAndBits() {
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-
-        // Creates a byte array for binary leaf.
-        byte[] binLeaf = new byte[]{5, 5, 5};
-
-        // Assigns the value in the chained loop of typedef.
-        Derivedbinaryb derBinb = new Derivedbinaryb(binLeaf);
-        Derivedbinarya derBina = new Derivedbinarya(derBinb);
-
-        // Creates bit set for bit leaf.
-        BitSet bitLeaf = new BitSet();
-        bitLeaf.set(1);
-        bitLeaf.set(100);
-
-        // Assigns the value in the chained loop of typedef.
-        Derivedbitsb derBitb = new Derivedbitsb(bitLeaf);
-        Derivedbitsa derBita = new Derivedbitsa(derBitb);
-
-        // Creates a byte array list for binary leaf-list.
-        byte[] binList1 = new byte[]{9, 9, 0};
-        byte[] binList2 = new byte[]{12, 6, 0};
-        byte[] binList3 = new byte[]{16, 29, 25};
-
-        // Assigns the value in the chained loop of typedef.
-        Derivedbinaryb derBinBList1 = new Derivedbinaryb(binList1);
-        Derivedbinaryb derBinBList2 = new Derivedbinaryb(binList2);
-        Derivedbinaryb derBinBList3 = new Derivedbinaryb(binList3);
-
-        Derivedbinarya derBinAList1 = new Derivedbinarya(derBinBList1);
-        Derivedbinarya derBinAList2 = new Derivedbinarya(derBinBList2);
-        Derivedbinarya derBinAList3 = new Derivedbinarya(derBinBList3);
-
-        List<Derivedbinarya> binAlist = new ArrayList<>();
-        binAlist.add(derBinAList1);
-        binAlist.add(derBinAList2);
-        binAlist.add(derBinAList3);
-
-        // Creates a bit set list for bit leaf-list.
-        BitSet bitList1 = new BitSet();
-        bitList1.set(1);
-        BitSet bitList2 = new BitSet();
-        bitList2.set(1);
-        bitList2.set(10);
-        BitSet bitList3 = new BitSet();
-        bitList3.set(1);
-        bitList3.set(10);
-        bitList3.set(100);
-
-        // Assigns the value in the chained loop of typedef.
-        Derivedbitsb bitBlist1 = new Derivedbitsb(bitList1);
-        Derivedbitsb bitBlist2 = new Derivedbitsb(bitList2);
-        Derivedbitsb bitBlist3 = new Derivedbitsb(bitList3);
-
-        Derivedbitsa bitAlist1 = new Derivedbitsa(bitBlist1);
-        Derivedbitsa bitAlist2 = new Derivedbitsa(bitBlist2);
-        Derivedbitsa bitAlist3 = new Derivedbitsa(bitBlist3);
-
-        List<Derivedbitsa> bitAlist = new ArrayList<>();
-        bitAlist.add(bitAlist1);
-        bitAlist.add(bitAlist2);
-        bitAlist.add(bitAlist3);
-
-        // Creates a module by assigning all the leaf and leaf-list.
-        YtbDerivedTypeWithBitsAndBinary bitsAndBinary = new
-                YtbDerivedTypeWithBitsAndBinaryOpParam
-                        .YtbDerivedTypeWithBitsAndBinaryBuilder()
-                .forbinary(derBina).forbits(derBita)
-                .forbinarylist(binAlist)
-                .forbitslist(bitAlist).build();
-
-        // As YSB or YAB protocol, sets the value for YTB.
-        List<Object> objectList = new ArrayList<>();
-        objectList.add(bitsAndBinary);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtExtendedBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                objectList, ROOT_NAME, ROOT_NAME_SPACE,
-                EDIT_CONFIG_REQUEST, registry);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-
-        // Gets the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        assertThat(getInCrtName(MODULE, MOD_BIT_BIN), module.getName(),
-                   is(MOD_BIT_BIN));
-
-        // Checks the leaf for binary.
-        YdtContext binaryLeaf = module.getFirstChild();
-        assertThat(getInCrtName(LEAF, FOR_BINARY), binaryLeaf.getName(),
-                   is(FOR_BINARY));
-        assertThat(getInCrtLeafValue(FOR_BINARY, BIN_VAL_1),
-                   binaryLeaf.getValue(), is(BIN_VAL_1));
-
-        // Checks the leaf for bits.
-        YdtContext bitsLeaf = binaryLeaf.getNextSibling();
-        assertThat(getInCrtName(LEAF, FOR_BITS), bitsLeaf.getName(),
-                   is(FOR_BITS));
-        // TODO: The bits is not done.
-        String value1 = bitsLeaf.getValue();
-
-        // Checks the leaf-list for binary.
-        YdtContext binaryLeafList = bitsLeaf.getNextSibling();
-        assertThat(getInCrtName(LEAF_LIST, FOR_BINARY_LIST),
-                   binaryLeafList.getName(), is(FOR_BINARY_LIST));
-
-        Set value2 = binaryLeafList.getValueSet();
-        assertThat(getInCrtLeafListValue(FOR_BINARY_LIST, BIN_VAL_2),
-                   value2.contains(BIN_VAL_2), is(true));
-        assertThat(getInCrtLeafListValue(FOR_BINARY_LIST, BIN_VAL_3),
-                   value2.contains(BIN_VAL_3), is(true));
-        assertThat(getInCrtLeafListValue(FOR_BINARY_LIST, BIN_VAL_4),
-                   value2.contains(BIN_VAL_4), is(true));
-
-        // Checks the leaf-list for bits.
-        YdtContext bitsLeafList = binaryLeafList.getNextSibling();
-        assertThat(getInCrtName(LEAF_LIST, FOR_BITS_LIST),
-                   bitsLeafList.getName(), is(FOR_BITS_LIST));
-        // TODO: The value of bits should be mapped text string.
-        Set value3 = bitsLeafList.getValueSet();
-    }
-
-    /**
-     * Processes tree building for the union type.
-     */
-    @Test
-    public void processYtbUnionType() {
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-
-        // Creates union with binary type.
-        byte[] binary = new byte[]{0, 0, 0};
-        ForunionUnion union = new ForunionUnion(binary);
-
-        // Creates module with union.
-        YtbDerivedTypeWithBitsAndBinary unionType = new
-                YtbDerivedTypeWithBitsAndBinaryOpParam
-                        .YtbDerivedTypeWithBitsAndBinaryBuilder()
-                .forunion(union)
-                .build();
-
-        // As YSB or YAB protocol, sets the value for YTB.
-        List<Object> objectList = new ArrayList<>();
-        objectList.add(unionType);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtExtendedBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                objectList, ROOT_NAME, ROOT_NAME_SPACE,
-                EDIT_CONFIG_REQUEST, registry);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext rootNode = ydtBuilder.getRootNode();
-        YdtContext module = rootNode.getFirstChild();
-        YdtContext unionChild = module.getFirstChild();
-        assertThat(getInCrtName(LEAF, FOR_UNION), unionChild.getName(),
-                   is(FOR_UNION));
-        //TODO: Correct it once union generated code is fixed.
-        assertThat(getInCrtLeafValue(FOR_UNION, ZERO), unionChild.getValue(),
-                   is(ZERO));
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ytb/YtbContextSwitchTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/ytb/YtbContextSwitchTest.java
deleted file mode 100644
index ef48954..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/ytb/YtbContextSwitchTest.java
+++ /dev/null
@@ -1,1237 +0,0 @@
-/*
- * 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.ytb;
-
-import org.junit.Test;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev20130715.ymsietfinettypes.Uri;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.YmsIetfNetwork;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.YmsIetfNetworkOpParam;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ymsietfnetwork.DefaultNetworks;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ymsietfnetwork.Networks;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ymsietfnetwork.NodeId;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ymsietfnetwork.networks.DefaultNetwork;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ymsietfnetwork.networks.Network;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ymsietfnetwork.networks.network.DefaultNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ymsietfnetwork.networks.network.Node;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ymsietfnetwork.networks.network.node.DefaultSupportingNode;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ymsietfnetwork.networks.network.node.SupportingNode;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.from.another.file.rev20160826.ytbaugmentfromanotherfile.networks.network.node.AugmentedNdNode;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.from.another.file.rev20160826.ytbaugmentfromanotherfile.networks.network.node.DefaultAugmentedNdNode;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.from.another.file.rev20160826.ytbaugmentfromanotherfile.networks.network.node.augmentedndnode.DefaultTerminationPoint;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.from.another.file.rev20160826.ytbaugmentfromanotherfile.networks.network.node.augmentedndnode.TerminationPoint;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.from.another.file.rev20160826.ytbaugmentfromanotherfile.networks.network.node.augmentedndnode.terminationpoint.DefaultSupportingTerminationPoint;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.from.another.file.rev20160826.ytbaugmentfromanotherfile.networks.network.node.augmentedndnode.terminationpoint.SupportingTerminationPoint;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.yangautoprefixfor.rpc.input.rev20160826.ytbaugmentforrpcinput.activatesoftwareimage.output.AugmentedRpcOutput;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.yangautoprefixfor.rpc.input.rev20160826.ytbaugmentforrpcinput.activatesoftwareimage.output.DefaultAugmentedRpcOutput;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.yangautoprefixfor.rpc.input.rev20160826.ytbaugmentforrpcinput.activatesoftwareimage.output.augmentedrpcoutput.Selection;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.yangautoprefixfor.rpc.input.rev20160826.ytbaugmentforrpcinput.activatesoftwareimage.output.augmentedrpcoutput.selection.DefaultValueIn;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.yangautoprefixfor.rpc.input.rev20160826.ytbaugmentforrpcinput.activatesoftwareimage.output.augmentedrpcoutput.selection.valuein.ValueIn;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.yangautoprefixfor.rpc.input.rev20160826.ytbaugmentforrpcinput2.activatesoftwareimage.output.AugmentedInputOutput;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.yangautoprefixfor.rpc.input.rev20160826.ytbaugmentforrpcinput2.activatesoftwareimage.output.DefaultAugmentedInputOutput;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.yangautoprefixfor.rpc.input.rev20160826.ytbaugmentforrpcinput2.activatesoftwareimage.output.augmentedinputoutput.DefaultFriction;
-import org.onosproject.yang.gen.v1.yms.test.ytb.augment.yangautoprefixfor.rpc.input.rev20160826.ytbaugmentforrpcinput2.activatesoftwareimage.output.augmentedinputoutput.Friction;
-import org.onosproject.yang.gen.v1.yms.test.ytb.choice.with.container.and.leaf.list.rev20160826.YtbChoiceWithContainerAndLeafList;
-import org.onosproject.yang.gen.v1.yms.test.ytb.choice.with.container.and.leaf.list.rev20160826.YtbChoiceWithContainerAndLeafListOpParam;
-import org.onosproject.yang.gen.v1.yms.test.ytb.choice.with.container.and.leaf.list.rev20160826.ytbchoicewithcontainerandleaflist.ContentTest;
-import org.onosproject.yang.gen.v1.yms.test.ytb.choice.with.container.and.leaf.list.rev20160826.ytbchoicewithcontainerandleaflist.CurrentValue;
-import org.onosproject.yang.gen.v1.yms.test.ytb.choice.with.container.and.leaf.list.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.DefaultChoiceContainer;
-import org.onosproject.yang.gen.v1.yms.test.ytb.choice.with.container.and.leaf.list.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.ChoiceContainer;
-import org.onosproject.yang.gen.v1.yms.test.ytb.choice.with.container.and.leaf.list.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.choicecontainer.DefaultPredict;
-import org.onosproject.yang.gen.v1.yms.test.ytb.choice.with.container.and.leaf.list.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.choicecontainer.Predict;
-import org.onosproject.yang.gen.v1.yms.test.ytb.choice.with.container.and.leaf.list.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.choicecontainer.predict.DefaultReproduce;
-import org.onosproject.yang.gen.v1.yms.test.ytb.choice.with.container.and.leaf.list.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.choicecontainer.predict.Reproduce;
-import org.onosproject.yang.gen.v1.yms.test.ytb.choice.with.container.and.leaf.list.rev20160826.ytbchoicewithcontainerandleaflist.currentvalue.DefaultYtbAbsent;
-import org.onosproject.yang.gen.v1.yms.test.ytb.rpc.response.with.advanced.input.and.output.rev20160826.ytbrpcresponsewithadvancedinputandoutput.activatesoftwareimage.ActivateSoftwareImageOutput;
-import org.onosproject.yang.gen.v1.yms.test.ytb.rpc.response.with.advanced.input.and.output.rev20160826.ytbrpcresponsewithadvancedinputandoutput.activatesoftwareimage.DefaultActivateSoftwareImageOutput;
-import org.onosproject.yang.gen.v1.yms.test.ytb.rpc.response.with.advanced.input.and.output.rev20160826.ytbrpcresponsewithadvancedinputandoutput.activatesoftwareimage.activatesoftwareimageoutput.DefaultOutputList;
-import org.onosproject.yang.gen.v1.yms.test.ytb.rpc.response.with.advanced.input.and.output.rev20160826.ytbrpcresponsewithadvancedinputandoutput.activatesoftwareimage.activatesoftwareimageoutput.OutputList;
-import org.onosproject.yang.gen.v1.yms.test.ytb.rpc.response.with.advanced.input.and.output.rev20160826.ytbrpcresponsewithadvancedinputandoutput.activatesoftwareimage.activatesoftwareimageoutput.outputlist.ContentInside;
-import org.onosproject.yang.gen.v1.yms.test.ytb.rpc.response.with.advanced.input.and.output.rev20160826.ytbrpcresponsewithadvancedinputandoutput.activatesoftwareimage.activatesoftwareimageoutput.outputlist.DefaultContentInside;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.augment.rev20160826.YtbSimpleAugment;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.augment.rev20160826.YtbSimpleAugmentOpParam;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.augment.rev20160826.ytbsimpleaugment.Cont1;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.augment.rev20160826.ytbsimpleaugment.DefaultCont1;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.augment.rev20160826.ytbsimpleaugment.cont1.DefaultCont2;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.augment.rev20160826.ytbsimpleaugment.cont1.cont2.AugmentedCont2;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.augment.rev20160826.ytbsimpleaugment.cont1.cont2.DefaultAugmentedCont2;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.augment.rev20160826.ytbsimpleaugment.cont1.cont2.augmentedcont2.Cont1s;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.augment.rev20160826.ytbsimpleaugment.cont1.cont2.augmentedcont2.DefaultCont1s;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.choice.yangautoprefixcase.rev20160826.YtbSimpleChoiceCase;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.choice.yangautoprefixcase.rev20160826.YtbSimpleChoiceCaseOpParam;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.choice.yangautoprefixcase.rev20160826.ytbsimplechoicecase.DefaultYtbFood;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.choice.yangautoprefixcase.rev20160826.ytbsimplechoicecase.YtbFood;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.choice.yangautoprefixcase.rev20160826.ytbsimplechoicecase.ytbfood.YtbSnack;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.choice.yangautoprefixcase.rev20160826.ytbsimplechoicecase.ytbfood.ytbsnack.DefaultYtbLateNight;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.rpc.response.rev20160826.ytbsimplerpcresponse.rpc.DefaultRpcOutput;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.rpc.response.rev20160826.ytbsimplerpcresponse.rpc.RpcOutput;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ydt.YdtExtendedBuilder;
-import org.onosproject.yms.app.ysr.DefaultYangSchemaRegistry;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsNull.notNullValue;
-import static org.onosproject.yms.ydt.YdtContextOperationType.NONE;
-import static org.onosproject.yms.ydt.YmsOperationType.EDIT_CONFIG_REPLY;
-import static org.onosproject.yms.ydt.YmsOperationType.EDIT_CONFIG_REQUEST;
-import static org.onosproject.yms.ydt.YmsOperationType.QUERY_CONFIG_REPLY;
-import static org.onosproject.yms.ydt.YmsOperationType.RPC_REQUEST;
-
-/**
- * Unit test cases for YANG tree builder for context switch for augment, RPC
- * and case.
- */
-public class YtbContextSwitchTest extends YtbErrMsgAndConstants {
-
-    private static final String RPC_ADV_NAME = "RPCAdvanced";
-    private static final String RPC_ADV_NAMESPACE = "RPCAdvancedSpace";
-    private static final String RPC_ADV_IO =
-            "YtbRpcResponseWithAdvancedInputAndOutput";
-    private static final String ACT_IMG = "activate-software-image";
-    private static final String INPUT = "input";
-    private static final String FINAL = "final";
-    private static final String AUG_NW_REF_1 = "network-ref-aug1";
-    private static final String AUG_NODE_REF_1 = "node-ref-aug1";
-    private static final String AUG_TP_REF_1 = "tp-ref-aug-1";
-    private static final String AUG_TP_ID_1 = "tp-id-aug-1";
-    private static final String AUG_NW_REF_B1 = "network-ref-augb1";
-    private static final String AUG_NODE_REF_B1 = "node-ref-augb1";
-    private static final String AUG_TP_REF_B1 = "tp-ref-aug-b1";
-    private static final String AUG_TP_ID_B1 = "tp-id-aug-1b";
-    private static final String NW_REF = "network-ref";
-    private static final String NODE_REF = "node-ref";
-    private static final String NW_REF_2 = "network-ref2";
-    private static final String NODE_REF_3 = "node-ref3";
-    private static final String NW_REF_B = "network-ref-b";
-    private static final String NODE_REF_B = "node-ref-b";
-    private static final String NW_REF_2B = "network-ref2-b";
-    private static final String NODE_REF_2B = "node-ref2-b";
-    private static final String NODE_REF_3B = "node-ref3-b";
-    private static final String CHOC = "choc";
-    private static final String CHOICE_CASE = "YtbSimpleChoiceCase";
-    private static final String FOOD = "YtbFood";
-    private static final String CHOCOLATE = "chocolate";
-    private static final String VAL = "val";
-    private static final String IND = "ind";
-    private static final String CHOICE_ROOT_NAME = "choiceContainerRootName";
-    private static final String CHOICE_ROOT_NAMESPACE =
-            "choiceContainerRootNamespace";
-    private static final String ROOT = "root";
-    private static final String CHOICE_CONT =
-            "YtbChoiceWithContainerAndLeafList";
-    private static final String CONT_CHOICE = "choice-container";
-    private static final String REPRODUCE = "reproduce";
-    private static final String NINETY = "90";
-    private static final String HUNDRED = "100";
-    private static final String RPC_RT_NAME = "rpcRootName";
-    private static final String RPC_RT_NAMESPACE = "rpcRootNameSpace";
-    private static final String OUTPUT_LEAF = "output-leaf";
-    private static final String FIVE_HUNDRED = "500";
-    private static final String OUTPUT_LIST = "output-list";
-    private static final String LIST_KEY = "list-key";
-    private static final String BIN_VAL_1 = "AAE=";
-    private static final String CONT_INSIDE = "content_inside";
-    private static final String BIN_VAL_2 = "CAk=";
-    private static final String AVAILABLE = "available";
-    private static final String EIGHTY_NINE = "89";
-    private static final String NINETY_EIGHT = "98";
-    private static final String BIN_VAL_3 = "AAA=";
-    private static final String SIM_AUG = "simpleAugment";
-    private static final String SIM_AUG_NAMESPACE = "simpleAugmentSpace";
-    private static final String SIMPLE_AUG = "YtbSimpleAugment";
-    private static final String CONT1 = "cont1";
-    private static final String CONT2 = "cont2";
-    private static final String LEAF4 = "leaf4";
-    private static final String CONT1S = "cont1s";
-    private static final String INTER_AUG = "inter-file-augment";
-    private static final String INTER_AUG_NAMESPACE =
-            "inter-file-augment-space";
-    private static final String IETF_NW = "yms-ietf-network";
-    private static final String NWS = "networks";
-    private static final String NW = "network";
-    private static final String NODE = "node";
-    private static final String NODE_ID = "node-id";
-    private static final String TERM_POINT = "termination-point";
-    private static final String TP_ID = "tp-id";
-    private static final String SUP_TERM_POINT = "supporting-termination-point";
-    private static final String TP_REF = "tp-ref";
-    private static final String SUP_NODE = "supporting-node";
-    private static final String KIN1 = "kin1";
-    private static final String KIN2 = "kin2";
-    private static final String VAL_IN = "value-in";
-    private static final String KINETIC = "kinetic";
-    private static final String FRICTION = "friction";
-    private static final String SPEED = "speed";
-    private static final String THOUSAND = "1000";
-
-    /**
-     * Creates object as like an application for RPC with list.
-     *
-     * @return object of RPC
-     */
-    private List<OutputList> createApplicationBuiltObjectForRpc() {
-
-        // Creates a empty container inside without leaf for list1.
-        ContentInside inside1 = new DefaultContentInside.ContentInsideBuilder()
-                .build();
-
-        // Creates a leaf list-key which is a leaf ref.
-        byte[] listKey1 = new byte[]{0, 1};
-
-        // Creates the list content 1.
-        OutputList output1 = new DefaultOutputList.OutputListBuilder()
-                .listKey(listKey1).contentInside(inside1).build();
-
-        // Creates a list of leaf for available.
-        List<Short> avail = new ArrayList<>();
-        avail.add((short) 89);
-        avail.add((short) 98);
-
-        // Adds the leaf list in the inside container.
-        ContentInside inside2 = new DefaultContentInside.ContentInsideBuilder()
-                .available(avail).build();
-
-        // Creates a leaf, list-key which is a leaf ref.
-        byte[] listKey2 = new byte[]{8, 9};
-
-        // Creates the list content 2.
-        OutputList outputList2 = new DefaultOutputList.OutputListBuilder()
-                .listKey(listKey2).contentInside(inside2).build();
-
-        // Creates only leaf, list-key which is a leaf ref.
-        byte[] arr3 = new byte[]{0, 0};
-
-        // Creates the list content 3.
-        OutputList outputList3 = new DefaultOutputList.OutputListBuilder()
-                .listKey(arr3).build();
-
-        // Adds all the list contents in array list and gives returns it.
-        List<OutputList> outputLists = new ArrayList<>();
-        outputLists.add(output1);
-        outputLists.add(outputList2);
-        outputLists.add(outputList3);
-        return outputLists;
-    }
-
-    /**
-     * Builds YANG request work bench for RPC with container input.
-     *
-     * @param registry schema registry
-     * @return YANG request work bench
-     */
-    private YangRequestWorkBench buildYangRequestWorkBenchForRpc(
-            DefaultYangSchemaRegistry registry) {
-
-        // Creates a request work bench and adds the input child into it.
-        YangRequestWorkBench workBench = new YangRequestWorkBench(
-                RPC_ADV_NAME, RPC_ADV_NAMESPACE, RPC_REQUEST,
-                registry, true);
-        Set<String> valueList = new HashSet<>();
-        valueList.add("800");
-        valueList.add("900");
-        workBench.addChild(RPC_ADV_IO, null, NONE);
-        workBench.addChild(ACT_IMG, null, NONE);
-        workBench.addChild(INPUT, null, NONE);
-        workBench.addChild(FINAL, null, NONE);
-        workBench.addLeaf("value", null, valueList);
-        return workBench;
-    }
-
-    /**
-     * Creates an application object for inter file augment.
-     *
-     * @return application object
-     */
-    private Object createObjectForInterFileAugment() {
-
-        // Creates leaf value for network-ref.
-        Uri nwkRef = new Uri(AUG_NW_REF_1);
-        Uri nwkRef2 = new Uri("network-ref-aug2");
-
-        // Creates leaf value for node-ref
-        Uri nodeRef = new Uri(AUG_NODE_REF_1);
-        NodeId nodeId = new NodeId(nodeRef);
-
-        Uri nodeRef2 = new Uri("node-ref-aug2");
-        NodeId nodeId2 = new NodeId(nodeRef2);
-
-        // Creates support termination list with the above two contents.
-        SupportingTerminationPoint point1 =
-                new DefaultSupportingTerminationPoint
-                        .SupportingTerminationPointBuilder()
-                        .networkRef(nwkRef).nodeRef(nodeId)
-                        .tpRef(AUG_TP_REF_1).build();
-        SupportingTerminationPoint point2 =
-                new DefaultSupportingTerminationPoint
-                        .SupportingTerminationPointBuilder()
-                        .networkRef(nwkRef2).nodeRef(nodeId2)
-                        .tpRef("tp-ref-aug-2").build();
-
-        List<SupportingTerminationPoint> pointList = new ArrayList<>();
-        pointList.add(point1);
-        pointList.add(point2);
-
-        // Adds the list created to the termination point content1.
-        TerminationPoint tPoint1 = new DefaultTerminationPoint
-                .TerminationPointBuilder()
-                .supportingTerminationPoint(pointList)
-                .tpId(AUG_TP_ID_1).build();
-
-        // Creates leaf value for network-ref.
-        Uri nwkRef3 = new Uri(AUG_NW_REF_B1);
-        Uri nwkRef4 = new Uri("network-ref-augb2");
-
-        // Creates leaf value for node-ref
-        Uri nodeRef3 = new Uri(AUG_NODE_REF_B1);
-        NodeId nodeId3 = new NodeId(nodeRef3);
-
-        Uri nodeRef4 = new Uri("node-ref-augb2");
-        NodeId nodeId4 = new NodeId(nodeRef4);
-
-        // Creates support termination list with the above two contents.
-        SupportingTerminationPoint point3 =
-                new DefaultSupportingTerminationPoint
-                        .SupportingTerminationPointBuilder()
-                        .networkRef(nwkRef3).nodeRef(nodeId3)
-                        .tpRef(AUG_TP_REF_B1).build();
-        SupportingTerminationPoint point4 =
-                new DefaultSupportingTerminationPoint
-                        .SupportingTerminationPointBuilder()
-                        .networkRef(nwkRef4).nodeRef(nodeId4)
-                        .tpRef("tp-ref-aug-b2").build();
-
-        List<SupportingTerminationPoint> pointList2 = new ArrayList<>();
-        pointList2.add(point3);
-        pointList2.add(point4);
-
-        // Adds the list created to the termination point content2.
-        TerminationPoint tPoint2 = new DefaultTerminationPoint
-                .TerminationPointBuilder()
-                .supportingTerminationPoint(pointList2)
-                .tpId(AUG_TP_ID_B1).build();
-
-        List<TerminationPoint> terminationPointList = new ArrayList<>();
-        terminationPointList.add(tPoint1);
-        terminationPointList.add(tPoint2);
-
-        // Adds all the above contents to the augment.
-        AugmentedNdNode augment = new DefaultAugmentedNdNode
-                .AugmentedNdNodeBuilder()
-                .terminationPoint(terminationPointList)
-                .build();
-
-        // Creates leaf value for network-ref in augmented node(ietf-network).
-        Uri nwRef5 = new Uri(NW_REF);
-
-        //Creates leaf value for node-ref in augmented node(ietf-network).
-        Uri nodeRef5 = new Uri(NODE_REF);
-        NodeId nodeId5 = new NodeId(nodeRef5);
-
-        // Creates supporting node list content 1 with above contents.
-        SupportingNode supNode1 = new DefaultSupportingNode
-                .SupportingNodeBuilder().nodeRef(nodeId5)
-                .networkRef(nwRef5).build();
-
-        // Creates leaf value for network-ref in augmented node(ietf-network).
-        Uri nwRef6 = new Uri(NW_REF_2);
-
-        //Creates leaf value for node-ref in augmented node(ietf-network).
-        Uri nodeRef6 = new Uri("node-ref2");
-        NodeId nodeId6 = new NodeId(nodeRef6);
-
-        // Creates supporting node list content 2 with above contents.
-        SupportingNode supNode2 = new DefaultSupportingNode
-                .SupportingNodeBuilder()
-                .nodeRef(nodeId6)
-                .networkRef(nwRef6).build();
-
-        List<SupportingNode> supNodeList = new ArrayList<>();
-        supNodeList.add(supNode1);
-        supNodeList.add(supNode2);
-
-        // Creates leaf value for node-id in augmented node(ietf-network).
-        Uri nodeId1 = new Uri(NODE_REF_3);
-        NodeId nodeIdForId = new NodeId(nodeId1);
-
-        // Creates node list with content 1 by adding augment also.
-        DefaultNode.NodeBuilder nodeBuilder = new DefaultNode.NodeBuilder();
-        nodeBuilder.addYangAugmentedInfo(
-                augment, AugmentedNdNode.class);
-        nodeBuilder.supportingNode(supNodeList);
-        nodeBuilder.nodeId(nodeIdForId);
-        Node node1 = nodeBuilder.build();
-
-        // Creates an augment node without any values set to it.
-        AugmentedNdNode augmentedNdNode2 = new DefaultAugmentedNdNode
-                .AugmentedNdNodeBuilder().build();
-
-        // Creates leaf value for network-ref in augmented node(ietf-network).
-        Uri nwRef7 = new Uri(NW_REF_B);
-
-        //Creates leaf value for node-ref in augmented node(ietf-network).
-        Uri nodeRef7 = new Uri(NODE_REF_B);
-        NodeId nodeId7 = new NodeId(nodeRef7);
-
-        // Creates supporting node list content 1 with above contents.
-        SupportingNode supNode3 = new DefaultSupportingNode
-                .SupportingNodeBuilder().nodeRef(nodeId7)
-                .networkRef(nwRef7).build();
-
-        // Creates leaf value for network-ref in augmented node(ietf-network).
-        Uri nwRef8 = new Uri(NW_REF_2B);
-
-        //Creates leaf value for node-ref in augmented node(ietf-network).
-        Uri nodeRef8 = new Uri(NODE_REF_2B);
-        NodeId nodeId8 = new NodeId(nodeRef8);
-
-        // Creates supporting node list content 1 with above contents.
-        SupportingNode supNode4 = new DefaultSupportingNode
-                .SupportingNodeBuilder()
-                .nodeRef(nodeId8)
-                .networkRef(nwRef8).build();
-
-        List<SupportingNode> supNodeList2 = new ArrayList<>();
-        supNodeList2.add(supNode3);
-        supNodeList2.add(supNode4);
-
-        // Creates leaf value for node-id in augmented node(ietf-network).
-        Uri nodeIdLeaf = new Uri(NODE_REF_3B);
-        NodeId nodeIdForId2 = new NodeId(nodeIdLeaf);
-
-        // Creates node list with content 2 by adding empty augment also.
-        DefaultNode.NodeBuilder nodeBuilder2 = new DefaultNode.NodeBuilder();
-        nodeBuilder2.addYangAugmentedInfo(
-                augmentedNdNode2, AugmentedNdNode.class);
-        nodeBuilder2.supportingNode(supNodeList2);
-        nodeBuilder2.nodeId(nodeIdForId2);
-        Node node2 = nodeBuilder2.build();
-
-        // Adds both nodes into the list.
-        List<Node> nodeList = new LinkedList<>();
-        nodeList.add(node1);
-        nodeList.add(node2);
-
-        // Adds the list into the network list.
-        Network nwkList = new DefaultNetwork.NetworkBuilder()
-                .node(nodeList).build();
-
-        List<Network> networkList = new ArrayList<>();
-        networkList.add(nwkList);
-
-        // Adds the network list into networks container.
-        Networks contNetworks = new DefaultNetworks.NetworksBuilder()
-                .network(networkList).build();
-
-        // Adds the container into the module.
-        YmsIetfNetwork opParam = new YmsIetfNetworkOpParam
-                .YmsIetfNetworkBuilder()
-                .networks(contNetworks).build();
-        return opParam;
-    }
-
-    /**
-     * Processes a simple choice case and builds the YDT.
-     */
-    @Test
-    public void processSimpleChoiceCase() {
-
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-
-        // Creates a choice snack with the case late night.
-        YtbSnack lateNight = new DefaultYtbLateNight.YtbLateNightBuilder()
-                .chocolate(CHOC).build();
-
-        // Creates container food with the created case.
-        YtbFood food = new DefaultYtbFood.YtbFoodBuilder()
-                .ytbSnack(lateNight).build();
-
-        // Creates module with the container food.
-        YtbSimpleChoiceCase choiceCase = new YtbSimpleChoiceCaseOpParam
-                .YtbSimpleChoiceCaseBuilder().ytbFood(food).build();
-
-        // As YSB or YAB protocol, sets the value for YTB.
-        List<Object> objectList = new ArrayList<>();
-        objectList.add(choiceCase);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtExtendedBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                objectList, ROOT_NAME, ROOT_NAME_SPACE,
-                EDIT_CONFIG_REPLY, registry);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext rootNode = ydtBuilder.getRootNode();
-
-        // Gets the first module from logical root node.
-        YdtContext module = rootNode.getFirstChild();
-        assertThat(getInCrtName(MODULE, CHOICE_CASE), module.getName(),
-                   is(CHOICE_CASE));
-
-        // Gets the container food from module.
-        YdtContext container = module.getFirstChild();
-        assertThat(getInCrtName(CONTAINER, FOOD), container.getName(),
-                   is(FOOD));
-
-        // Gets the case-leaf from container
-        YdtContext caseNode = container.getFirstChild();
-        assertThat(getInCrtName(LEAF, CHOCOLATE), caseNode.getName(),
-                   is(CHOCOLATE));
-        assertThat(getInCrtLeafValue(CHOCOLATE, CHOC), caseNode.getValue(),
-                   is(CHOC));
-    }
-
-    /**
-     * Processes module with two choices and a choice having node and a
-     * leaf-list.
-     */
-    @Test
-    public void processChoiceWithNodeAndLeafList() {
-
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-
-        // Creates reproduce container for list predict-1.
-        Reproduce reproduce1 = new DefaultReproduce.ReproduceBuilder()
-                .yangAutoPrefixCatch((short) 90).build();
-
-        // Assigns predict-1 with the container.
-        Predict predict1 = new DefaultPredict.PredictBuilder()
-                .reproduce(reproduce1).build();
-
-        // Creates reproduce container for list predict-2.
-        Reproduce reproduce2 = new DefaultReproduce.ReproduceBuilder()
-                .yangAutoPrefixCatch((short) 100).build();
-
-        // Assigns predict-2 with the container.
-        Predict predict2 = new DefaultPredict.PredictBuilder()
-                .reproduce(reproduce2).build();
-
-        List<Predict> predictList = new ArrayList<>();
-        predictList.add(predict1);
-        predictList.add(predict2);
-
-        // Case container is added to the choice content-test.
-        ChoiceContainer containerCase = new org.onosproject.yang.gen.v1.yms
-                .test.ytb.choice.with.container.and.leaf.list.rev20160826
-                .ytbchoicewithcontainerandleaflist.contenttest.choicecontainer
-                .DefaultChoiceContainer.ChoiceContainerBuilder()
-                .predict(predictList).build();
-
-        // Case container is added to the choice content-test.
-        ContentTest contentTest = new DefaultChoiceContainer
-                .ChoiceContainerBuilder().choiceContainer(containerCase).build();
-
-        // Creates string list for leaf-list final.
-        List<String> stringList = new ArrayList<>();
-        stringList.add(VAL);
-        stringList.add(IND);
-
-        // For choice current value, the leaf list gets added as case.
-        CurrentValue currentValue = new DefaultYtbAbsent.YtbAbsentBuilder()
-                .yangAutoPrefixFinal(stringList).build();
-
-        // Adds choice as child to the module.
-        YtbChoiceWithContainerAndLeafList choiceWithContainerAndLeafList =
-                new YtbChoiceWithContainerAndLeafListOpParam
-                        .YtbChoiceWithContainerAndLeafListBuilder()
-                        .contentTest(contentTest).currentValue(currentValue)
-                        .build();
-
-        // As YSB or YAB protocol, sets the value for YTB.
-        List<Object> objectList = new ArrayList<>();
-        objectList.add(choiceWithContainerAndLeafList);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtExtendedBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                objectList, CHOICE_ROOT_NAME, CHOICE_ROOT_NAMESPACE,
-                QUERY_CONFIG_REPLY, registry);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-        assertThat(getInCrtName(ROOT, CHOICE_ROOT_NAME), context.getName(),
-                   is(CHOICE_ROOT_NAME));
-        assertThat(getInCrtName(ROOT, CHOICE_ROOT_NAMESPACE), context.getNamespace(),
-                   is(CHOICE_ROOT_NAMESPACE));
-
-        // Gets the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        assertThat(getInCrtName(MODULE, CHOICE_CONT), module.getName(),
-                   is(CHOICE_CONT));
-
-        // Gets the first choice content under the module, as container.
-        YdtContext choice1 = module.getFirstChild();
-        assertThat(getInCrtName(CONTAINER, CONT_CHOICE), choice1.getName(),
-                   is(CONT_CHOICE));
-
-        // Gets the first content in the list predict.
-        YdtContext list1 = choice1.getFirstChild();
-        assertThat(getInCrtName(LIST, PREDICT), list1.getName(), is(PREDICT));
-
-        // Gets the container and its child leaf in the list predict.
-        YdtContext container1 = list1.getFirstChild();
-        assertThat(getInCrtName(CONTAINER, REPRODUCE), container1.getName(),
-                   is(REPRODUCE));
-        YdtContext leaf1 = container1.getFirstChild();
-        assertThat(getInCrtName(LEAF, CATCH), leaf1.getName(), is(CATCH));
-        assertThat(getInCrtLeafValue(CATCH, NINETY), leaf1.getValue(),
-                   is(NINETY));
-
-        // Gets the second content in the list predict.
-        YdtContext list2 = list1.getNextSibling();
-        assertThat(getInCrtName(LIST, PREDICT), list2.getName(), is(PREDICT));
-
-        // Gets the container and its child leaf in the list predict.
-        YdtContext container2 = list2.getFirstChild();
-        assertThat(getInCrtName(CONTAINER, REPRODUCE), container2.getName(),
-                   is(REPRODUCE));
-        YdtContext leaf2 = container2.getFirstChild();
-        assertThat(getInCrtName(LEAF, CATCH), leaf2.getName(), is(CATCH));
-        assertThat(getInCrtLeafValue(CATCH, HUNDRED), leaf2.getValue(),
-                   is(HUNDRED));
-
-        // Gets the second choice content under the module, as leaf-list.
-        YdtContext choice2 = choice1.getNextSibling();
-        assertThat(getInCrtName(LEAF_LIST, FINAL), choice2.getName(),
-                   is(FINAL));
-        Set value2 = choice2.getValueSet();
-        assertThat(getInCrtLeafListValue(FINAL, VAL), value2.contains(VAL),
-                   is(true));
-        assertThat(getInCrtLeafListValue(FINAL, IND), value2.contains(IND),
-                   is(true));
-    }
-
-    /**
-     * Processes RPC response of a simple output with only a leaf content
-     * inside.
-     */
-    @Test
-    public void processSimpleRpcResponse() {
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-        RpcOutput output = new DefaultRpcOutput.RpcOutputBuilder()
-                .outputLeaf(500).build();
-
-        // Creates request work bench of rpc.
-        YangRequestWorkBench workBench = new YangRequestWorkBench(
-                RPC_RT_NAME, RPC_RT_NAMESPACE, RPC_REQUEST, registry, true);
-        workBench.addChild(RPC_NAME, null, NONE);
-        workBench.addChild(RPC, null, NONE);
-        workBench.addChild(INPUT, null, NONE);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtExtendedBuilder ydtBuilder = treeBuilder.getYdtForRpcResponse(
-                output, workBench);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-        assertThat(getInCrtName(ROOT, RPC_RT_NAME), context.getName(),
-                   is(RPC_RT_NAME));
-        assertThat(getInCrtName(ROOT, RPC_RT_NAMESPACE), context.getNamespace(),
-                   is(RPC_RT_NAMESPACE));
-
-        // Gets the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        assertThat(getInCrtName(MODULE, RPC_NAME), module.getName(),
-                   is(RPC_NAME));
-
-        // Gets the rpc node from the module.
-        YdtContext rpc = module.getFirstChild();
-        assertThat(getInCrtName(RPC, RPC), rpc.getName(), is(RPC));
-
-        // Gets the output node from the module.
-        // TODO: Change assert after YANG utils is merged.
-        YdtContext rpcOutput = rpc.getFirstChild();
-        //assertThat(rpcOutputNode.getName(), is("output"));
-
-        YdtContext outputLeaf = rpcOutput.getFirstChild();
-        assertThat(getInCrtName(LEAF, OUTPUT_LEAF), outputLeaf.getName(),
-                   is(OUTPUT_LEAF));
-        assertThat(getInCrtLeafValue(OUTPUT_LEAF, FIVE_HUNDRED),
-                   outputLeaf.getValue(), is(FIVE_HUNDRED));
-    }
-
-    /**
-     * Processes RPC response of an output defined with list.
-     */
-    @Test
-    public void processRpcResponseForAdvInputOutput() {
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-        List<OutputList> list = createApplicationBuiltObjectForRpc();
-        ActivateSoftwareImageOutput output =
-                new DefaultActivateSoftwareImageOutput
-                        .ActivateSoftwareImageOutputBuilder()
-                        .outputList(list).build();
-
-        // Creates request work bench of rpc.
-        YangRequestWorkBench workBench = buildYangRequestWorkBenchForRpc(
-                registry);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtExtendedBuilder ydtBuilder = treeBuilder.getYdtForRpcResponse(
-                output, workBench);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-        assertThat(getInCrtName(ROOT, RPC_ADV_NAME), context.getName(),
-                   is(RPC_ADV_NAME));
-        assertThat(getInCrtName(ROOT, RPC_ADV_NAMESPACE), context.getNamespace(),
-                   is(RPC_ADV_NAMESPACE));
-
-        // Gets the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        assertThat(getInCrtName(MODULE, RPC_ADV_IO), module.getName(),
-                   is(RPC_ADV_IO));
-
-        // Gets the rpc node from module.
-        YdtContext rpc = module.getFirstChild();
-        assertThat(getInCrtName(RPC, ACT_IMG), rpc.getName(), is(ACT_IMG));
-
-        // Gets the output node from the module.
-        // TODO: Change assert after YANG utils is merged.
-        YdtContext rpcOutput = rpc.getFirstChild();
-        //assertThat(rpcOutputNode.getName(), is("output"));
-
-        // Gets the list content 1 as the node from output.
-        YdtContext outputList1 = rpcOutput.getFirstChild();
-        assertThat(getInCrtName(LIST, OUTPUT_LIST), outputList1.getName(),
-                   is(OUTPUT_LIST));
-
-        // Gets the leaf key-list from list content1.
-        YdtContext keyList1 = outputList1.getFirstChild();
-        assertThat(getInCrtName(LEAF, LIST_KEY), keyList1.getName(),
-                   is(LIST_KEY));
-        assertThat(getInCrtLeafValue(LIST_KEY, BIN_VAL_1), keyList1.getValue(),
-                   is(BIN_VAL_1));
-
-        // Gets the content inside container from list content 1.
-        YdtContext cont1 = keyList1.getNextSibling();
-        assertThat(getInCrtName(CONTAINER, CONT_INSIDE), cont1.getName(),
-                   is(CONT_INSIDE));
-
-        // Gets the list content 2 as the node from output.
-        YdtContext outputList2 = outputList1.getNextSibling();
-        assertThat(getInCrtName(LIST, OUTPUT_LIST), outputList2.getName(),
-                   is(OUTPUT_LIST));
-
-        // Gets the leaf-list key-list from list content2.
-        YdtContext keyList2 = outputList2.getFirstChild();
-        assertThat(getInCrtName(LEAF, LIST_KEY), keyList2.getName(),
-                   is(LIST_KEY));
-        assertThat(getInCrtLeafValue(LIST_KEY, BIN_VAL_2), keyList2.getValue(),
-                   is(BIN_VAL_2));
-
-        // Gets the content inside container from list content 2.
-        YdtContext cont2 = keyList2.getNextSibling();
-        assertThat(getInCrtName(CONTAINER, CONT_INSIDE), cont2.getName(),
-                   is(CONT_INSIDE));
-
-        // Gets the leaf-list available inside container.
-        YdtContext availLeafList = cont2.getFirstChild();
-        assertThat(getInCrtName(LEAF_LIST, AVAILABLE), availLeafList.getName(),
-                   is(AVAILABLE));
-        Set value1 = availLeafList.getValueSet();
-        assertThat(getInCrtLeafListValue(AVAILABLE, EIGHTY_NINE),
-                   value1.contains(EIGHTY_NINE), is(true));
-        assertThat(getInCrtLeafListValue(AVAILABLE, NINETY_EIGHT),
-                   value1.contains(NINETY_EIGHT), is(true));
-
-        // Gets the list content 3.
-        YdtContext outputList3 = outputList2.getNextSibling();
-        assertThat(getInCrtName(LIST, OUTPUT_LIST), outputList3.getName(),
-                   is(OUTPUT_LIST));
-
-        // Gets the leaf list-key in content 3 of list.
-        YdtContext keyList3 = outputList3.getFirstChild();
-        assertThat(getInCrtName(LEAF, LIST_KEY), keyList3.getName(),
-                   is(LIST_KEY));
-        assertThat(getInCrtLeafValue(LIST_KEY, BIN_VAL_3), keyList3.getValue(),
-                   is(BIN_VAL_3));
-    }
-
-    /**
-     * Processes simple self augment file with leaf and container inside
-     * augment.
-     */
-    @Test
-    public void processSimpleAugment() {
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-
-        // Creates container cont1s with the leaf.
-        org.onosproject.yang.gen.v1.yms.test.ytb.simple.augment.rev20160826
-                .ytbsimpleaugment.cont1.cont2.augmentedcont2.cont1s
-                .Cont1s cont1s1 = new org.onosproject.yang.gen.v1.yms.test
-                .ytb.simple.augment.rev20160826.ytbsimpleaugment.cont1.cont2
-                .augmentedcont2.cont1s.DefaultCont1s.Cont1sBuilder().build();
-
-        // Appends the created container into another container.
-        Cont1s cont1s = new DefaultCont1s.Cont1sBuilder()
-                .cont1s(cont1s1).build();
-
-        // Creates augment with the container and leaf.
-        AugmentedCont2 augment = new DefaultAugmentedCont2
-                .AugmentedCont2Builder().cont1s(cont1s).leaf4(500).build();
-
-        // Creates for the node which will be getting augmented.
-        // Creates cont2 where content will be augmented into.
-        DefaultCont2.Cont2Builder augCont2 = new DefaultCont2
-                .Cont2Builder();
-        augCont2.addYangAugmentedInfo(augment, AugmentedCont2.class);
-
-        // Creates cont1 where cont2 is added.
-        Cont1 cont1 = new DefaultCont1.Cont1Builder()
-                .cont2(augCont2.build()).build();
-
-        // Creates module with the nodes inside.
-        YtbSimpleAugment simpleAugment = new YtbSimpleAugmentOpParam
-                .YtbSimpleAugmentBuilder().cont1(cont1).build();
-
-        // As YSB or YAB protocol, sets the value for YTB.
-        List<Object> objectList = new ArrayList<>();
-        objectList.add(simpleAugment);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtExtendedBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                objectList, SIM_AUG, SIM_AUG_NAMESPACE,
-                EDIT_CONFIG_REQUEST, registry);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-        assertThat(getInCrtName(ROOT, SIM_AUG), context.getName(), is(SIM_AUG));
-        assertThat(getInCrtName(ROOT, SIM_AUG_NAMESPACE),
-                   context.getNamespace(), is(SIM_AUG_NAMESPACE));
-
-        // Gets the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        assertThat(getInCrtName(MODULE, SIMPLE_AUG), module.getName(),
-                   is(SIMPLE_AUG));
-
-        // Gets the cont1 under module.
-        YdtContext container1 = module.getFirstChild();
-        assertThat(getInCrtName(CONTAINER, CONT1), container1.getName(),
-                   is(CONT1));
-
-        // Gets the cont2 under cont1.
-        YdtContext container2 = container1.getFirstChild();
-        assertThat(getInCrtName(CONTAINER, CONT2), container2.getName(),
-                   is(CONT2));
-
-        // Gets the leaf4 which was augmented under cont2.
-        YdtContext leaf4 = container2.getFirstChild();
-        assertThat(getInCrtName(LEAF, LEAF4), leaf4.getName(), is(LEAF4));
-        assertThat(getInCrtLeafValue(LEAF4, FIVE_HUNDRED), leaf4.getValue(),
-                   is(FIVE_HUNDRED));
-
-        // Gets the cont1s which was augmented under cont2.
-        YdtContext container1s = leaf4.getNextSibling();
-        assertThat(getInCrtName(CONTAINER, CONT1S), container1s.getName(),
-                   is(CONT1S));
-
-        // Gets the cont2s which was augmented under cont1s.
-        YdtContext container2s = container1s.getFirstChild();
-        assertThat(getInCrtName(CONTAINER, CONT1S), container2s.getName(),
-                   is(CONT1S));
-    }
-
-    /**
-     * Processes inter file augment with augmented node as list and the
-     * augment having list.
-     */
-    @Test
-    public void processInterFileAugment() {
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-        Object opParam = createObjectForInterFileAugment();
-
-        // As YSB or YAB protocol, sets the value for YTB.
-        List<Object> objectList = new ArrayList<>();
-        objectList.add(opParam);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtExtendedBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                objectList, INTER_AUG, INTER_AUG_NAMESPACE,
-                EDIT_CONFIG_REQUEST, registry);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-        assertThat(getInCrtName(ROOT, INTER_AUG), context.getName(),
-                   is(INTER_AUG));
-        assertThat(getInCrtName(ROOT, INTER_AUG_NAMESPACE), context.getNamespace(),
-                   is(INTER_AUG_NAMESPACE));
-
-        // Checks the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        assertThat(getInCrtName(MODULE, IETF_NW), module.getName(),
-                   is(IETF_NW));
-
-        // Checks the container networks from module.
-        YdtContext nwksCont = module.getFirstChild();
-        assertThat(getInCrtName(CONTAINER, NWS), nwksCont.getName(), is(NWS));
-
-        // Checks the list network from container networks.
-        YdtContext nwrkList = nwksCont.getFirstChild();
-        assertThat(getInCrtName(LIST, NW), nwrkList.getName(), is(NW));
-
-        // Checks the node list content 1 under network list.
-        YdtContext node1 = nwrkList.getFirstChild();
-        assertThat(getInCrtName(LIST, NODE), node1.getName(), is(NODE));
-
-        // Checks the node-id leaf for list content 1.
-        YdtContext nodeId1 = node1.getFirstChild();
-        assertThat(getInCrtName(LEAF, NODE_ID), nodeId1.getName(), is(NODE_ID));
-        assertThat(getInCrtLeafValue(NODE_ID, NODE_REF_3), nodeId1.getValue(),
-                   is(NODE_REF_3));
-
-        // Checks termination list 1 under node 1, from augment.
-        YdtContext terList1 = nodeId1.getNextSibling();
-        assertThat(getInCrtName(LIST, TERM_POINT), terList1.getName(),
-                   is(TERM_POINT));
-
-        // Checks tp-id leaf from termination list content 1.
-        YdtContext tpId1 = terList1.getFirstChild();
-        assertThat(getInCrtName(LEAF, TP_ID), tpId1.getName(), is(TP_ID));
-        assertThat(getInCrtLeafValue(TP_ID, AUG_TP_ID_1), tpId1.getValue(),
-                   is(AUG_TP_ID_1));
-
-        // Checks supporting term point list content1 from term list content 1.
-        YdtContext supTerm1 = tpId1.getNextSibling();
-        assertThat(getInCrtName(LIST, SUP_TERM_POINT), supTerm1.getName(),
-                   is(SUP_TERM_POINT));
-
-        YdtContext nwkRefSupTerm1 = supTerm1.getFirstChild();
-        assertThat(getInCrtName(LEAF, NW_REF), nwkRefSupTerm1.getName(),
-                   is(NW_REF));
-        assertThat(getInCrtLeafValue(NW_REF, AUG_NW_REF_1),
-                   nwkRefSupTerm1.getValue(), is(AUG_NW_REF_1));
-
-        YdtContext nodeRefSupTerm1 = nwkRefSupTerm1.getNextSibling();
-        assertThat(getInCrtName(LEAF, NODE_REF), nodeRefSupTerm1.getName(),
-                   is(NODE_REF));
-        assertThat(getInCrtLeafValue(NODE_REF, AUG_NODE_REF_1),
-                   nodeRefSupTerm1.getValue(), is(AUG_NODE_REF_1));
-
-        YdtContext tpRefSupTerm1 = nodeRefSupTerm1.getNextSibling();
-        assertThat(getInCrtName(LEAF, TP_REF), tpRefSupTerm1.getName(),
-                   is(TP_REF));
-        assertThat(getInCrtLeafValue(TP_REF, AUG_TP_REF_1),
-                   tpRefSupTerm1.getValue(), is(AUG_TP_REF_1));
-
-        // Checks termination list 2 under node 1, from augment.
-        YdtContext terminationList2 = terList1.getNextSibling();
-        assertThat(getInCrtName(LIST, TERM_POINT), terminationList2.getName(),
-                   is(TERM_POINT));
-
-        YdtContext terList2 = terminationList2.getFirstChild();
-        assertThat(getInCrtName(LEAF, TP_ID), terList2.getName(), is(TP_ID));
-        assertThat(getInCrtLeafValue(TP_ID, AUG_TP_ID_B1), terList2.getValue(),
-                   is(AUG_TP_ID_B1));
-
-        // Checks supporting term point list content1 from term list content 2.
-        YdtContext supTerm2 = terList2.getNextSibling();
-        assertThat(getInCrtName(LIST, SUP_TERM_POINT), supTerm2.getName(),
-                   is(SUP_TERM_POINT));
-
-        YdtContext nwkRefSupTerm2 = supTerm2.getFirstChild();
-        assertThat(getInCrtName(LEAF, NW_REF), nwkRefSupTerm2.getName(),
-                   is(NW_REF));
-        assertThat(getInCrtLeafValue(NW_REF, AUG_NW_REF_B1),
-                   nwkRefSupTerm2.getValue(), is(AUG_NW_REF_B1));
-
-        YdtContext nodeRefSupTerm2 = nwkRefSupTerm2.getNextSibling();
-        assertThat(getInCrtName(LEAF, NODE_REF), nodeRefSupTerm2.getName(),
-                   is(NODE_REF));
-        assertThat(getInCrtLeafValue(NODE_REF, AUG_NODE_REF_B1),
-                   nodeRefSupTerm2.getValue(), is(AUG_NODE_REF_B1));
-
-        YdtContext tpRefSupTerm2 = nodeRefSupTerm2.getNextSibling();
-        assertThat(getInCrtName(LEAF, TP_REF), tpRefSupTerm2.getName(),
-                   is(TP_REF));
-        assertThat(getInCrtLeafValue(TP_REF, AUG_TP_REF_B1),
-                   tpRefSupTerm2.getValue(), is(AUG_TP_REF_B1));
-
-        // Checks the content of the supporting node list content 1 in node 1.
-        YdtContext supNode1 = terminationList2.getNextSibling();
-        assertThat(getInCrtName(LIST, SUP_NODE), supNode1.getName(),
-                   is(SUP_NODE));
-
-        YdtContext nwkRefSupNode1 = supNode1.getFirstChild();
-        assertThat(getInCrtName(LEAF, NW_REF), nwkRefSupNode1.getName(),
-                   is(NW_REF));
-        assertThat(getInCrtLeafValue(NW_REF, NW_REF), nwkRefSupNode1.getValue(),
-                   is(NW_REF));
-
-        YdtContext nodeRefSupNode1 = nwkRefSupNode1.getNextSibling();
-        assertThat(getInCrtName(LEAF, NODE_REF), nodeRefSupNode1.getName(),
-                   is(NODE_REF));
-        assertThat(getInCrtLeafValue(NODE_REF, NW_REF),
-                   nwkRefSupNode1.getValue(), is(NW_REF));
-
-        // Checks the content of the supporting node list content 2 in node 1.
-        YdtContext supNode2 = supNode1.getNextSibling();
-        assertThat(getInCrtName(LIST, SUP_NODE), supNode2.getName(),
-                   is(SUP_NODE));
-
-        YdtContext nwkRefSupNode2 = supNode2.getFirstChild();
-        assertThat(getInCrtName(LEAF, NW_REF), nwkRefSupNode2.getName(),
-                   is(NW_REF));
-        assertThat(getInCrtLeafValue(NW_REF, NW_REF_2),
-                   nwkRefSupNode2.getValue(), is(NW_REF_2));
-
-        YdtContext nodeRefSupNode2 = nwkRefSupNode2.getNextSibling();
-        assertThat(getInCrtName(LEAF, NODE_REF), nodeRefSupNode2.getName(),
-                   is(NODE_REF));
-        assertThat(getInCrtLeafValue(NODE_REF, NW_REF_2),
-                   nwkRefSupNode2.getValue(), is(NW_REF_2));
-
-        // Checks the node list content 2 under network list.
-        YdtContext node2 = node1.getNextSibling();
-        assertThat(getInCrtName(LIST, NODE), node2.getName(), is(NODE));
-
-        // Checks the node-id leaf for list content 2.
-        YdtContext nodeId2 = node2.getFirstChild();
-        assertThat(getInCrtName(LEAF, NODE_ID), nodeId2.getName(), is(NODE_ID));
-        assertThat(getInCrtLeafValue(NODE_ID, NODE_REF_3B), nodeId2.getValue(),
-                   is(NODE_REF_3B));
-
-        // Checks supporting term point list content1 from term list content 2.
-        YdtContext supNode3 = nodeId2.getNextSibling();
-        assertThat(getInCrtName(LIST, SUP_NODE), supNode3.getName(),
-                   is(SUP_NODE));
-
-        YdtContext nwkRefSupNode3 = supNode3.getFirstChild();
-        assertThat(getInCrtName(LEAF, NW_REF), nwkRefSupNode3.getName(),
-                   is(NW_REF));
-        assertThat(getInCrtLeafValue(NW_REF, NW_REF_B),
-                   nwkRefSupNode3.getValue(), is(NW_REF_B));
-
-        YdtContext nodeRefSupNode3 = nwkRefSupNode3.getNextSibling();
-        assertThat(getInCrtName(LEAF, NODE_REF), nodeRefSupNode3.getName(),
-                   is(NODE_REF));
-        assertThat(getInCrtLeafValue(NODE_REF, NODE_REF_B),
-                   nodeRefSupNode3.getValue(), is(NODE_REF_B));
-
-        // Checks supporting term point list content2 from term list content 2.
-        YdtContext supNode4 = supNode3.getNextSibling();
-        assertThat(getInCrtName(LIST, SUP_NODE), supNode4.getName(),
-                   is(SUP_NODE));
-
-        YdtContext nwkRefSupNode4 = supNode4.getFirstChild();
-        assertThat(getInCrtName(LEAF, NW_REF), nwkRefSupNode4.getName(),
-                   is(NW_REF));
-        assertThat(getInCrtLeafValue(NW_REF, NW_REF_2B),
-                   nwkRefSupNode4.getValue(), is(NW_REF_2B));
-
-        YdtContext nodeRefSupNode4 = nwkRefSupNode4.getNextSibling();
-        assertThat(getInCrtName(LEAF, NODE_REF), nodeRefSupNode4.getName(),
-                   is(NODE_REF));
-        assertThat(getInCrtLeafValue(NODE_REF, NODE_REF_2B),
-                   nodeRefSupNode4.getValue(), is(NODE_REF_2B));
-    }
-
-    /**
-     * Processes inter file augment with rpc output as its target node.
-     */
-    @Test
-    public void processInterFileAugmentWithRpcInputAsTarget() {
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // Builds RPC request tree in YDT.
-        YangRequestWorkBench workBench =
-                buildYangRequestWorkBenchForRpc(registry);
-
-        // Creates augment code object.
-
-        // Creates the list of value in, case value in.
-        ValueIn valuein1 = new org.onosproject.yang.gen.v1.yms.test.ytb.augment
-                .yangautoprefixfor.rpc.input.rev20160826.ytbaugmentforrpcinput
-                .activatesoftwareimage.output.augmentedrpcoutput.selection
-                .valuein.DefaultValueIn.ValueInBuilder().kinetic(KIN1)
-                .build();
-        ValueIn valuein2 = new org.onosproject.yang.gen.v1.yms.test.ytb.augment
-                .yangautoprefixfor.rpc.input.rev20160826.ytbaugmentforrpcinput
-                .activatesoftwareimage.output.augmentedrpcoutput.selection
-                .valuein.DefaultValueIn.ValueInBuilder().kinetic(KIN2)
-                .build();
-
-        List<ValueIn> valueInList = new ArrayList<>();
-        valueInList.add(valuein1);
-        valueInList.add(valuein2);
-
-        // Adds the case value into the choice interface.
-        Selection selection = new DefaultValueIn.ValueInBuilder()
-                .valueIn(valueInList).build();
-
-        // Augment is created for the object.
-        AugmentedRpcOutput augmentRpcOutput = new DefaultAugmentedRpcOutput
-                .AugmentedRpcOutputBuilder().selection(selection).build();
-
-        // Create two list object of friction.
-        Friction friction1 = new DefaultFriction.FrictionBuilder()
-                .speed(BigInteger.valueOf(500)).build();
-        Friction friction2 = new DefaultFriction.FrictionBuilder()
-                .speed(BigInteger.valueOf(1000)).build();
-
-        List<Friction> fricList = new ArrayList<>();
-        fricList.add(friction1);
-        fricList.add(friction2);
-
-        // Create augment with the friction object created.
-        AugmentedInputOutput augmentedIO = new DefaultAugmentedInputOutput
-                .AugmentedInputOutputBuilder().friction(fricList).build();
-
-        // Creates RPC object.
-        List<OutputList> outputLists = createApplicationBuiltObjectForRpc();
-
-        // Adds the augment and the rps output values into the output.
-        DefaultActivateSoftwareImageOutput
-                .ActivateSoftwareImageOutputBuilder output =
-                new DefaultActivateSoftwareImageOutput
-                        .ActivateSoftwareImageOutputBuilder();
-        output.addYangAugmentedInfo(augmentRpcOutput, AugmentedRpcOutput.class);
-        output.addYangAugmentedInfo(augmentedIO, AugmentedInputOutput.class);
-        output.outputList(outputLists);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtExtendedBuilder ydtBuilder = treeBuilder.getYdtForRpcResponse(
-                output, workBench);
-
-        // Receives YDT context and check the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-        assertThat(getInCrtName(ROOT, RPC_ADV_NAME), context.getName(),
-                   is(RPC_ADV_NAME));
-        assertThat(getInCrtName(ROOT, RPC_ADV_NAMESPACE),
-                   context.getNamespace(), is(RPC_ADV_NAMESPACE));
-
-        // Checks the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        assertThat(getInCrtName(MODULE, RPC_ADV_IO), module.getName(),
-                   is(RPC_ADV_IO));
-
-        // Gets the rpc under module.
-        YdtContext rpc = module.getFirstChild();
-        assertThat(getInCrtName(RPC, ACT_IMG), rpc.getName(), is(ACT_IMG));
-
-        // Gets the output value under rpc.
-        // TODO: Change assert after YANG utils is merged.
-        YdtContext rpcOutputNode = rpc.getFirstChild();
-        //assertThat(rpcOutputNode.getName(), is("output"));
-
-        YdtContext firstNode = rpcOutputNode.getFirstChild();
-        assertThat(firstNode, notNullValue());
-
-        YdtContext secondNode = firstNode.getNextSibling();
-        assertThat(secondNode, notNullValue());
-
-        YdtContext thirdNode = secondNode.getNextSibling();
-        assertThat(thirdNode, notNullValue());
-
-        YdtContext fourthNode = thirdNode.getNextSibling();
-        assertThat(fourthNode, notNullValue());
-
-        // Gets the list content 1 as the node from output.
-        YdtContext outputList1 = fourthNode.getNextSibling();
-        assertThat(getInCrtName(LIST, OUTPUT_LIST), outputList1.getName(),
-                   is(OUTPUT_LIST));
-
-        // Gets the leaf key-list from list content1.
-        YdtContext keyList1 = outputList1.getFirstChild();
-        assertThat(getInCrtName(LEAF, LIST_KEY), keyList1.getName(),
-                   is(LIST_KEY));
-        assertThat(getInCrtLeafValue(LIST_KEY, BIN_VAL_1), keyList1.getValue(),
-                   is(BIN_VAL_1));
-
-        // Gets the content inside container from list content 1.
-        YdtContext cont1 = keyList1.getNextSibling();
-        assertThat(getInCrtName(CONTAINER, CONT_INSIDE), cont1.getName(),
-                   is(CONT_INSIDE));
-
-        // Gets the list content 2 as the node from output.
-        YdtContext outputList2 = outputList1.getNextSibling();
-        assertThat(getInCrtName(LIST, OUTPUT_LIST), outputList2.getName(),
-                   is(OUTPUT_LIST));
-
-        // Gets the leaf-list key-list from list content2.
-        YdtContext keyList2 = outputList2.getFirstChild();
-        assertThat(getInCrtName(LEAF, LIST_KEY), keyList2.getName(),
-                   is(LIST_KEY));
-        assertThat(getInCrtLeafValue(LIST_KEY, BIN_VAL_2), keyList2.getValue(),
-                   is(BIN_VAL_2));
-
-        // Gets the content inside container from list content 2.
-        YdtContext cont2 = keyList2.getNextSibling();
-        assertThat(getInCrtName(CONTAINER, CONT_INSIDE), cont2.getName(),
-                   is(CONT_INSIDE));
-
-        // Gets the leaf-list available inside container.
-        YdtContext availLeafList = cont2.getFirstChild();
-        assertThat(getInCrtName(LEAF_LIST, AVAILABLE), availLeafList.getName(),
-                   is(AVAILABLE));
-        Set value1 = availLeafList.getValueSet();
-        assertThat(getInCrtLeafListValue(AVAILABLE, EIGHTY_NINE),
-                   value1.contains(EIGHTY_NINE), is(true));
-        assertThat(getInCrtLeafListValue(AVAILABLE, NINETY_EIGHT),
-                   value1.contains(NINETY_EIGHT), is(true));
-
-        // Gets the list content 3.
-        YdtContext outputList3 = outputList2.getNextSibling();
-        assertThat(getInCrtName(LIST, OUTPUT_LIST), outputList3.getName(),
-                   is(OUTPUT_LIST));
-
-        // Gets the leaf list-key in content 3 of list.
-        YdtContext keyList3 = outputList3.getFirstChild();
-        assertThat(getInCrtName(LEAF, LIST_KEY), keyList3.getName(),
-                   is(LIST_KEY));
-        assertThat(getInCrtLeafValue(LIST_KEY, BIN_VAL_3), keyList3.getValue(),
-                   is(BIN_VAL_3));
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ytb/YtbErrMsgAndConstants.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/ytb/YtbErrMsgAndConstants.java
deleted file mode 100644
index 572a4be..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/ytb/YtbErrMsgAndConstants.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * 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.ytb;
-
-import org.onosproject.yms.app.ysr.TestYangSchemaNodeProvider;
-
-/**
- * Represents the abstract class for ytb test classes having common methods
- * and the constants.
- */
-public abstract class YtbErrMsgAndConstants {
-
-    /**
-     * Static attribute of root name.
-     */
-    public static final String ROOT_NAME = "rootName";
-
-    /**
-     * Static attribute of root name space.
-     */
-    public static final String ROOT_NAME_SPACE = "rootNameSpace";
-
-    /**
-     * Static attribute of module which is YANG name.
-     */
-    public static final String MODULE = "module";
-
-    /**
-     * Static attribute of list which is YANG name.
-     */
-    public static final String LIST = "list";
-
-    /**
-     * Static attribute of leaf which is YANG name.
-     */
-    public static final String LEAF = "leaf";
-
-    /**
-     * Static attribute of leaf-list which is YANG name.
-     */
-    public static final String LEAF_LIST = "leaf-list";
-
-    /**
-     * Static attribute of container which is YANG name.
-     */
-    public static final String CONTAINER = "container";
-
-    /**
-     * Static attribute of name predict.
-     */
-    public static final String PREDICT = "predict";
-
-    /**
-     * Static attribute of name catch.
-     */
-    public static final String CATCH = "catch";
-
-    /**
-     * Static attribute of YANG file name.
-     */
-    public static final String RPC_NAME = "YtbSimpleRpcResponse";
-
-    /**
-     * Static attribute of name rpc.
-     */
-    public static final String RPC = "rpc";
-
-    /**
-     * Created a schema node provider, which will register the app.
-     */
-    public TestYangSchemaNodeProvider schemaProvider =
-            new TestYangSchemaNodeProvider();
-
-    /**
-     * Returns the error message for when leaf value doesn't match with the
-     * expected value. It takes name of leaf and expected value as its
-     * parameter, to throw the message.
-     *
-     * @param name  leaf name
-     * @param value expected value of leaf
-     * @return error message of leaf value as incorrect
-     */
-    public static String getInCrtLeafValue(String name, String value) {
-        return "The value of leaf " + name + " is not " + value;
-    }
-
-    /**
-     * Returns the error message, when node name doesn't match with the
-     * expected value. It takes YANG name of the node and the node name as
-     * parameter, to throw the message.
-     *
-     * @param node     YANG node name
-     * @param nodeName node name
-     * @return error message as the node name is incorrect
-     */
-    public static String getInCrtName(String node, String nodeName) {
-        return getCapitalCase(node) + "'s name " + nodeName + " is incorrect.";
-    }
-
-    /**
-     * Returns the error message, when operation type doesn't match with the
-     * expected value. It takes YANG name of the node and the node name as
-     * parameter, to throw the message.
-     *
-     * @param node     YANG node name
-     * @param nodeName node name
-     * @return error message as the operation type is incorrect
-     */
-    public static String getInCrtOpType(String node, String nodeName) {
-        return "The operation type of " + node + " " + nodeName + " is " +
-                "incorrect";
-    }
-
-    /**
-     * Returns the error message for when leaf-list value doesn't match with the
-     * expected value. It takes name of leaf-list and expected value as its
-     * parameter, to throw the message.
-     *
-     * @param name  leaf-list name
-     * @param value value in leaf-list
-     * @return error message as the value in the leaf-list is incorrect
-     */
-    public static String getInCrtLeafListValue(String name, String value) {
-        return "The leaf-list " + name + " does not have " + value + " in it.";
-    }
-
-    /**
-     * Returns the capital cased first letter of the given string.
-     *
-     * @param name string to be capital cased
-     * @return capital cased string
-     */
-    private static String getCapitalCase(String name) {
-        return name.substring(0, 1).toUpperCase() + name.substring(1);
-    }
-}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ytb/YtbInvalidNodeSkipTest.java b/apps/yms/app/src/test/java/org/onosproject/yms/app/ytb/YtbInvalidNodeSkipTest.java
deleted file mode 100644
index 019d958..0000000
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/ytb/YtbInvalidNodeSkipTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * 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.ytb;
-
-import org.junit.Test;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.rpc.response.rev20160826.YtbSimpleRpcResponse;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.rpc.response.rev20160826.YtbSimpleRpcResponseOpParam;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.rpc.response.rev20160826.ytbsimplerpcresponse.Cumulative;
-import org.onosproject.yang.gen.v1.yms.test.ytb.simple.rpc.response.rev20160826.ytbsimplerpcresponse.DefaultCumulative;
-import org.onosproject.yms.app.ydt.YdtExtendedBuilder;
-import org.onosproject.yms.app.ysr.DefaultYangSchemaRegistry;
-import org.onosproject.yms.ydt.YdtContext;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yms.ydt.YmsOperationType.EDIT_CONFIG_REQUEST;
-
-/**
- * Unit test cases for invalid node skip in YANG tree builder.
- */
-public class YtbInvalidNodeSkipTest extends YtbErrMsgAndConstants {
-
-    private static final String CUMULATIVE = "cumulative";
-    private static final String SUM = "sum";
-    private static final String FIVE = "5";
-    private static final String TEN = "10";
-
-    /**
-     * Processes RPC node which is the sibling to the empty current node.
-     */
-    @Test
-    public void processRpcSiblingWhenNodeIsEmpty() {
-
-        schemaProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry registry = schemaProvider
-                .getDefaultYangSchemaRegistry();
-
-        // As an application, creates the object.
-        Cumulative cumulative1 = new DefaultCumulative.CumulativeBuilder()
-                .sum((byte) 5).build();
-        Cumulative cumulative2 = new DefaultCumulative.CumulativeBuilder()
-                .sum((byte) 10).build();
-        List<Cumulative> list = new ArrayList<>();
-        list.add(cumulative1);
-        list.add(cumulative2);
-        YtbSimpleRpcResponse rpc = new YtbSimpleRpcResponseOpParam
-                .YtbSimpleRpcResponseBuilder().cumulative(list).build();
-
-        // As YSB or YAB protocol sets the value for YTB.
-        List<Object> objectList = new ArrayList<>();
-        objectList.add(rpc);
-
-        // Builds YANG tree in YTB.
-        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
-        YdtExtendedBuilder ydtBuilder = treeBuilder.getYdtBuilderForYo(
-                objectList, ROOT_NAME, ROOT_NAME_SPACE,
-                EDIT_CONFIG_REQUEST, registry);
-
-        // Receives YDT context and checks the tree that is built.
-        YdtContext context = ydtBuilder.getRootNode();
-
-        // Gets the first module from logical root node.
-        YdtContext module = context.getFirstChild();
-        assertThat(getInCrtName(MODULE, RPC_NAME), module.getName(),
-                   is(RPC_NAME));
-
-        // Gets the first list content of cumulative.
-        YdtContext list1 = module.getFirstChild();
-        assertThat(getInCrtName(LIST, CUMULATIVE), list1.getName(),
-                   is(CUMULATIVE));
-
-        YdtContext sum1 = list1.getFirstChild();
-        assertThat(getInCrtName(LEAF, SUM), sum1.getName(), is(SUM));
-        assertThat(getInCrtLeafValue(SUM, FIVE), sum1.getValue(), is(FIVE));
-
-        // Gets the second list content of cumulative.
-        YdtContext list2 = list1.getNextSibling();
-        assertThat(getInCrtName(LIST, CUMULATIVE), list2.getName(),
-                   is(CUMULATIVE));
-
-        YdtContext sum2 = list2.getFirstChild();
-        assertThat(getInCrtName(LEAF, SUM), sum2.getName(), is(SUM));
-        assertThat(getInCrtLeafValue(SUM, TEN), sum2.getValue(), is(TEN));
-    }
-
-
-}
diff --git a/apps/yms/app/src/test/resources/ydtTestYangFiles/binarytest.yang b/apps/yms/app/src/test/resources/ydtTestYangFiles/binarytest.yang
deleted file mode 100644
index f6db459d..0000000
--- a/apps/yms/app/src/test/resources/ydtTestYangFiles/binarytest.yang
+++ /dev/null
@@ -1,74 +0,0 @@
-module binarytest {
-
-    yang-version 1;
-
-    namespace "ydt.binarytest";
-
-    prefix "binarytest";
-
-    organization "ON-LAB";
-
-    description "This module defines for binarytest classifier.";
-
-    revision "2016-05-24" {
-        description "Initial revision.";
-    }
-
-    list binaryList {
-        config false;
-        leaf binary {
-              type binary;
-        }
-        leaf binaryWithRange {
-              type binary {
-                   length "2 .. 10";
-              }
-        }
-        leaf binaryWithMultiRange {
-              type binary {
-                   length "min..10 | 20 | 30..max";
-              }
-        }
-    }
-
-    typedef percent {
-        type binary;
-    }
-
-    leaf name {
-        type percent;
-    }
-
-    grouping greeting {
-        leaf surname {
-            type binary;
-        }
-    }
-
-    container cont1 {
-        uses greeting;
-    }
-
-    augment "/cont1" {
-        leaf lastname {
-            type binary;
-        }
-    }
-
-    container food {
-        choice snack {
-            case sportsarena {
-                leaf pretzel {
-                    type binary;
-                }
-            }
-        }
-    }
-
-    leaf middlename {
-        type union {
-            type int8;
-            type binary;
-        }
-    }
-}
\ No newline at end of file
diff --git a/apps/yms/pom.xml b/apps/yms/pom.xml
index 56e4e28..d56447f 100644
--- a/apps/yms/pom.xml
+++ b/apps/yms/pom.xml
@@ -33,6 +33,14 @@
     <modules>
         <module>api</module>
         <module>app</module>
+        <module>ut</module>
     </modules>
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-yang-datamodel</artifactId>
+            <version>1.10</version>
+        </dependency>
+    </dependencies>
 
 </project>
diff --git a/apps/yms/ut/pom.xml b/apps/yms/ut/pom.xml
new file mode 100644
index 0000000..decd8d2
--- /dev/null
+++ b/apps/yms/ut/pom.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>onos-yms</artifactId>
+        <groupId>org.onosproject</groupId>
+        <version>1.8.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>onos-app-yms-ut</artifactId>
+    <packaging>bundle</packaging>
+
+    <url>http://onosproject.org</url>
+
+    <description>YANG management system unit test cases</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-app-yms-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-app-yms</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.easymock</groupId>
+            <artifactId>easymock</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-osgi</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.springframework.osgi/spring-osgi-mock -->
+        <dependency>
+            <groupId>org.springframework.osgi</groupId>
+            <artifactId>spring-osgi-mock</artifactId>
+            <version>1.2.1</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <version>3.2.0</version>
+                <extensions>true</extensions>
+            </plugin>
+            <plugin>
+                <groupId>org.onosproject</groupId>
+                <artifactId>onos-yang-maven-plugin</artifactId>
+                <version>1.10</version>
+                <configuration>
+                    <yangFilesDir>src/test/resources/</yangFilesDir>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>yang2java</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java
similarity index 81%
rename from apps/yms/app/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java
rename to apps/yms/ut/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java
index dcce22a..7a1c8ea 100644
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java
+++ b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ych/DefaultYangCodecHandlerTest.java
@@ -45,19 +45,13 @@
 import org.onosproject.yang.gen.v1.ych.combined.rev20160524.combined.attributes.bgpparameters.optionalcapabilities.cparameters.DefaultAs4BytesCapability;
 import org.onosproject.yang.gen.v1.ych.empty.container.rev20160524.EmptyContainerOpParam;
 import org.onosproject.yang.gen.v1.ych.empty.container.rev20160524.emptycontainer.EmptyContainer;
-import org.onosproject.yang.gen.v1.ych.purchasing.supervisor.rev20160524.YchPurchasingsupervisorOpParam;
-import org.onosproject.yang.gen.v1.ych.purchasing.supervisor.rev20160524.ychpurchasingsupervisor.DefaultYchPurchasingSupervisor;
-import org.onosproject.yang.gen.v1.ych.purchasing.supervisor.rev20160524.ychpurchasingsupervisor.YchPurchasingSupervisor;
 import org.onosproject.yang.gen.v1.ydt.customs.supervisor.rev20160524.CustomssupervisorOpParam;
-import org.onosproject.yang.gen.v1.ydt.employee.id.rev20160524.EmployeeidOpParam;
 import org.onosproject.yang.gen.v1.ydt.material.supervisor.rev20160524.MaterialsupervisorOpParam;
 import org.onosproject.yang.gen.v1.ydt.material.supervisor.rev20160524.materialsupervisor.DefaultSupervisor;
 import org.onosproject.yang.gen.v1.ydt.material.supervisor.rev20160524.materialsupervisor.Supervisor;
 import org.onosproject.yang.gen.v1.ydt.merchandiser.supervisor.rev20160524.MerchandisersupervisorOpParam;
 import org.onosproject.yang.gen.v1.ydt.root.rev20160524.LogisticsManagerOpParam;
-import org.onosproject.yang.gen.v1.ydt.root.rev20160524.logisticsmanager.DefaultPurchasingSupervisor;
 import org.onosproject.yang.gen.v1.ydt.trading.supervisor.rev20160524.TradingsupervisorOpParam;
-import org.onosproject.yang.gen.v1.ydt.warehouse.supervisor.rev20160524.WarehousesupervisorOpParam;
 import org.onosproject.yms.app.ych.defaultcodecs.YangCodecRegistry;
 import org.onosproject.yms.app.ysr.DefaultYangSchemaRegistry;
 import org.onosproject.yms.app.ysr.TestYangSchemaNodeProvider;
@@ -74,9 +68,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
-import static org.onosproject.yang.gen.v1.ydt.root.rev20160524.logisticsmanager.DefaultPurchasingSupervisor.OnosYangNodeOperationType.DELETE;
 import static org.onosproject.yms.ych.YangProtocolEncodingFormat.XML;
-import static org.onosproject.yms.ydt.YmsOperationType.EDIT_CONFIG_REQUEST;
 import static org.onosproject.yms.ydt.YmsOperationType.QUERY_CONFIG_REQUEST;
 import static org.onosproject.yms.ydt.YmsOperationType.QUERY_REQUEST;
 
@@ -262,10 +254,10 @@
         return "<config xmlns=\"ydt.root\">" +
                 "<employeeid xmlns=\"ydt.employee-id\">" +
                 "<employeeid>Employ1</employeeid>" +
-                "<employeeid>Employ5</employeeid>" +
-                "<employeeid>Employ4</employeeid>" +
-                "<employeeid>Employ3</employeeid>" +
                 "<employeeid>Employ2</employeeid>" +
+                "<employeeid>Employ3</employeeid>" +
+                "<employeeid>Employ4</employeeid>" +
+                "<employeeid>Employ5</employeeid>" +
                 "</employeeid>" +
                 "</config>";
     }
@@ -278,11 +270,11 @@
     private static String wareHseXml() {
         return "<config xmlns=\"ydt.root\">" +
                 "<warehousesupervisor xmlns=\"ydt.warehouse-supervisor\">" +
-                "<supervisor>supervisor4</supervisor>" +
-                "<supervisor>supervisor5</supervisor>" +
                 "<supervisor>supervisor1</supervisor>" +
                 "<supervisor>supervisor2</supervisor>" +
                 "<supervisor>supervisor3</supervisor>" +
+                "<supervisor>supervisor4</supervisor>" +
+                "<supervisor>supervisor5</supervisor>" +
                 "</warehousesupervisor>" +
                 "</config>";
     }
@@ -330,21 +322,21 @@
                 "</ych-purchasing-supervisor>" +
                 "</ych-purchasingsupervisor>" +
                 "<warehousesupervisor xmlns=\"ydt.warehouse-supervisor\">" +
-                "<supervisor>supervisor4</supervisor>" +
-                "<supervisor>supervisor5</supervisor>" +
                 "<supervisor>supervisor1</supervisor>" +
                 "<supervisor>supervisor2</supervisor>" +
                 "<supervisor>supervisor3</supervisor>" +
+                "<supervisor>supervisor4</supervisor>" +
+                "<supervisor>supervisor5</supervisor>" +
                 "</warehousesupervisor>" +
                 "<tradingsupervisor xmlns=\"ydt.trading-supervisor\">" +
                 "<supervisor>Tradingsupervisor</supervisor>" +
                 "</tradingsupervisor>" +
                 "<employeeid xmlns=\"ydt.employee-id\">" +
                 "<employeeid>Employ1</employeeid>" +
-                "<employeeid>Employ5</employeeid>" +
-                "<employeeid>Employ4</employeeid>" +
-                "<employeeid>Employ3</employeeid>" +
                 "<employeeid>Employ2</employeeid>" +
+                "<employeeid>Employ3</employeeid>" +
+                "<employeeid>Employ4</employeeid>" +
+                "<employeeid>Employ5</employeeid>" +
                 "</employeeid>" +
                 "</config>";
     }
@@ -732,188 +724,185 @@
         assertEquals(AM_XML + "combined: list info", listTestXml(), xml);
     }
 
-    /**
-     * Unit test case in which verifying xml string for module object with
-     * container.
-     */
-    @Test
-    public void proceessCodecHandlerForContainer() {
-        testYangSchemaNodeProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry schemaRegistry =
-                testYangSchemaNodeProvider.getDefaultYangSchemaRegistry();
-        List<Object> yangModuleList = new ArrayList<>();
+    //TODO negative scenario will be handled later
+//    /**
+//     * Unit test case in which verifying xml string for module object with
+//     * container.
+//     */
+//    @Test
+//    public void proceessCodecHandlerForContainer() {
+//        testYangSchemaNodeProvider.processSchemaRegistry(null);
+//        DefaultYangSchemaRegistry schemaRegistry =
+//                testYangSchemaNodeProvider.getDefaultYangSchemaRegistry();
+//        List<Object> yangModuleList = new ArrayList<>();
+//
+//        // Creating the object
+//        YchPurchasingSupervisor supervisor =
+//                new DefaultYchPurchasingSupervisor
+//                        .YchPurchasingSupervisorBuilder()
+//                        .ychPurchasingSpecialist("purchasingSpecialist")
+//                        .ychPurchasingSupport("support")
+//                        .yangYchPurchasingSupervisorOpType(CREATE).build();
+//        Object object = YchPurchasingsupervisorOpParam.builder()
+//                .ychPurchasingSupervisor(supervisor).build();
+//        yangModuleList.add(object);
+//
+//        // Get the xml string and compare
+//        Map<String, String> tagAttr = new HashMap<String, String>();
+//        tagAttr.put("type", "subtree");
+//
+//        YangCodecRegistry.initializeDefaultCodec();
+//        DefaultYangCodecHandler codecHandler =
+//                new DefaultYangCodecHandler(schemaRegistry);
+//        String xml = codecHandler.encodeOperation("filter", "ydt.filter-type",
+//                                                  tagAttr, yangModuleList,
+//                                                  XML, null);
+//        assertEquals(AM_XML + "puchas-super: container info", purchaseXml(),
+//                     xml);
+//    }
 
-        // Creating the object
-        YchPurchasingSupervisor supervisor =
-                new DefaultYchPurchasingSupervisor
-                        .YchPurchasingSupervisorBuilder()
-                        .ychPurchasingSpecialist("purchasingSpecialist")
-                        .ychPurchasingSupport("support")
-                        .onosYangNodeOperationType(
-                                DefaultYchPurchasingSupervisor
-                                        .OnosYangNodeOperationType
-                                        .CREATE).build();
-        Object object = YchPurchasingsupervisorOpParam.builder()
-                .ychPurchasingSupervisor(supervisor).build();
-        yangModuleList.add(object);
+//    /**
+//     * Unit test case in which verifying xml string for module object with
+//     * leaf list.
+//     */
+//    @Test
+//    public void proceessCodecHandlerForLeafList() {
+//        testYangSchemaNodeProvider.processSchemaRegistry(null);
+//        DefaultYangSchemaRegistry schemaRegistry =
+//                testYangSchemaNodeProvider.getDefaultYangSchemaRegistry();
+//        List<Object> yangModuleList = new ArrayList<>();
+//
+//        // Creating the object
+//        EmployeeidOpParam.EmployeeidBuilder employeeidBuilder =
+//                EmployeeidOpParam.builder();
+//        employeeidBuilder.addToEmployeeid("Employ1");
+//        employeeidBuilder.addToEmployeeid("Employ2");
+//        employeeidBuilder.addToEmployeeid("Employ3");
+//        employeeidBuilder.addToEmployeeid("Employ4");
+//        employeeidBuilder.addToEmployeeid("Employ5");
+//
+//        Object object = employeeidBuilder.build();
+//        yangModuleList.add(object);
+//
+//        // Get the xml string and compare
+//        YangCodecRegistry.initializeDefaultCodec();
+//        DefaultYangCodecHandler codecHandler =
+//                new DefaultYangCodecHandler(schemaRegistry);
+//        String xml = codecHandler.encodeOperation("config", "ydt.root", null,
+//                                                  yangModuleList, XML, null);
+//        assertEquals(AM_XML + "employ-id: leaf-list info", emplyIdXml(), xml);
+//        WarehousesupervisorOpParam.WarehousesupervisorBuilder warehsebldr =
+//                WarehousesupervisorOpParam.builder();
+//        warehsebldr.addToSupervisor("supervisor1");
+//        warehsebldr.addToSupervisor("supervisor2");
+//        warehsebldr.addToSupervisor("supervisor3");
+//        warehsebldr.addToSupervisor("supervisor4");
+//        warehsebldr.addToSupervisor("supervisor5");
+//
+//        object = warehsebldr.build();
+//        yangModuleList.clear();
+//        yangModuleList.add(object);
+//
+//
+//        // Get the xml string and compare
+//        xml = codecHandler.encodeOperation("config", "ydt.root", null,
+//                                           yangModuleList, XML, null);
+//
+//        assertEquals(AM_XML + "warehouse-super: leaf-list info", wareHseXml(),
+//                     xml);
+//    }
 
-        // Get the xml string and compare
-        Map<String, String> tagAttr = new HashMap<String, String>();
-        tagAttr.put("type", "subtree");
-
-        YangCodecRegistry.initializeDefaultCodec();
-        DefaultYangCodecHandler codecHandler =
-                new DefaultYangCodecHandler(schemaRegistry);
-        String xml = codecHandler.encodeOperation("filter", "ydt.filter-type",
-                                                  tagAttr, yangModuleList,
-                                                  XML, null);
-        assertEquals(AM_XML + "puchas-super: container info", purchaseXml(),
-                     xml);
-    }
-
-
-    /**
-     * Unit test case in which verifying xml string for module object with
-     * leaf list.
-     */
-    @Test
-    public void proceessCodecHandlerForLeafList() {
-        testYangSchemaNodeProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry schemaRegistry =
-                testYangSchemaNodeProvider.getDefaultYangSchemaRegistry();
-        List<Object> yangModuleList = new ArrayList<>();
-
-        // Creating the object
-        EmployeeidOpParam.EmployeeidBuilder employeeidBuilder =
-                EmployeeidOpParam.builder();
-        employeeidBuilder.addToEmployeeid("Employ1");
-        employeeidBuilder.addToEmployeeid("Employ2");
-        employeeidBuilder.addToEmployeeid("Employ3");
-        employeeidBuilder.addToEmployeeid("Employ4");
-        employeeidBuilder.addToEmployeeid("Employ5");
-
-        Object object = employeeidBuilder.build();
-        yangModuleList.add(object);
-
-        // Get the xml string and compare
-        YangCodecRegistry.initializeDefaultCodec();
-        DefaultYangCodecHandler codecHandler =
-                new DefaultYangCodecHandler(schemaRegistry);
-        String xml = codecHandler.encodeOperation("config", "ydt.root", null,
-                                                  yangModuleList, XML, null);
-        assertEquals(AM_XML + "employ-id: leaf-list info", emplyIdXml(), xml);
-        WarehousesupervisorOpParam.WarehousesupervisorBuilder warehsebldr =
-                WarehousesupervisorOpParam.builder();
-        warehsebldr.addToSupervisor("supervisor1");
-        warehsebldr.addToSupervisor("supervisor2");
-        warehsebldr.addToSupervisor("supervisor3");
-        warehsebldr.addToSupervisor("supervisor4");
-        warehsebldr.addToSupervisor("supervisor5");
-
-        object = warehsebldr.build();
-        yangModuleList.clear();
-        yangModuleList.add(object);
-
-
-        // Get the xml string and compare
-        xml = codecHandler.encodeOperation("config", "ydt.root", null,
-                                           yangModuleList, XML, null);
-
-        assertEquals(AM_XML + "warehouse-super: leaf-list info", wareHseXml(),
-                     xml);
-    }
-
-    /**
-     * Unit test case in which verifying xml string for multiple module object.
-     */
-    @Test
-    public void proceessCodecHandlerForMultipleModule() {
-        testYangSchemaNodeProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry schemaRegistry =
-                testYangSchemaNodeProvider.getDefaultYangSchemaRegistry();
-
-        List<Object> yangModuleList = new ArrayList<>();
-        YangCodecRegistry.initializeDefaultCodec();
-        DefaultYangCodecHandler codecHandler =
-                new DefaultYangCodecHandler(schemaRegistry);
-
-        // Creating the object for customssupervisor module
-        Object object = CustomssupervisorOpParam.builder()
-                .supervisor("Customssupervisor").build();
-        yangModuleList.add(object);
-
-        // Creating the object for merchandisersupervisor module
-        object = MerchandisersupervisorOpParam.builder()
-                .supervisor("Merchandisersupervisor").build();
-        yangModuleList.add(object);
-
-        // Creating the object for materialsupervisor module
-        Supervisor supervisor1 = new DefaultSupervisor.SupervisorBuilder()
-                .name("abc1").departmentId("xyz1").build();
-        Supervisor supervisor2 = new DefaultSupervisor.SupervisorBuilder()
-                .name("abc2").departmentId("xyz2").build();
-        Supervisor supervisor3 = new DefaultSupervisor.SupervisorBuilder()
-                .name("abc3").departmentId("xyz3").build();
-        Supervisor supervisor4 = new DefaultSupervisor.SupervisorBuilder()
-                .name("abc4").departmentId("xyz4").build();
-        Supervisor supervisor5 = new DefaultSupervisor.SupervisorBuilder()
-                .name("abc5").departmentId("xyz5").build();
-
-        object = MaterialsupervisorOpParam.builder()
-                .addToSupervisor(supervisor1)
-                .addToSupervisor(supervisor2)
-                .addToSupervisor(supervisor3)
-                .addToSupervisor(supervisor4)
-                .addToSupervisor(supervisor5).build();
-
-        yangModuleList.add(object);
-
-        // Creating the object for YchPurchasingsupervisor module
-        YchPurchasingSupervisor purSupervisor =
-                new DefaultYchPurchasingSupervisor
-                        .YchPurchasingSupervisorBuilder()
-                        .ychPurchasingSpecialist("purchasingSpecialist")
-                        .ychPurchasingSupport("support").build();
-        object = YchPurchasingsupervisorOpParam.builder()
-                .ychPurchasingSupervisor(purSupervisor).build();
-        yangModuleList.add(object);
-
-        // Creating the object for warehousesupervisor module
-        WarehousesupervisorOpParam.WarehousesupervisorBuilder warehsebldr =
-                WarehousesupervisorOpParam.builder();
-        warehsebldr.addToSupervisor("supervisor1");
-        warehsebldr.addToSupervisor("supervisor2");
-        warehsebldr.addToSupervisor("supervisor3");
-        warehsebldr.addToSupervisor("supervisor4");
-        warehsebldr.addToSupervisor("supervisor5");
-
-        object = warehsebldr.build();
-        yangModuleList.add(object);
-
-        // Creating the object for tradingsupervisor module
-        object = TradingsupervisorOpParam.builder()
-                .supervisor("Tradingsupervisor").build();
-        yangModuleList.add(object);
-
-        List<String> employeeid = EmployeeidOpParam.builder().employeeid();
-        if (employeeid == null) {
-            employeeid = new ArrayList<>();
-        }
-        employeeid.add("Employ1");
-        employeeid.add("Employ2");
-        employeeid.add("Employ3");
-        employeeid.add("Employ4");
-        employeeid.add("Employ5");
-
-        // Creating the object for employeeid module
-        object = EmployeeidOpParam.builder().employeeid(employeeid).build();
-        yangModuleList.add(object);
-
-        // Get the xml string and compare
-        String xml = codecHandler.encodeOperation("config", "ydt.root", null,
-                                                  yangModuleList, XML, null);
-        assertEquals(AM_XML + "multiple: module info", multiModuleXml(), xml);
-    }
+//    /**
+//     * Unit test case in which verifying xml string for multiple module object.
+//     */
+//    @Test
+//    public void proceessCodecHandlerForMultipleModule() {
+//        testYangSchemaNodeProvider.processSchemaRegistry(null);
+//        DefaultYangSchemaRegistry schemaRegistry =
+//                testYangSchemaNodeProvider.getDefaultYangSchemaRegistry();
+//
+//        List<Object> yangModuleList = new ArrayList<>();
+//        YangCodecRegistry.initializeDefaultCodec();
+//        DefaultYangCodecHandler codecHandler =
+//                new DefaultYangCodecHandler(schemaRegistry);
+//
+//        // Creating the object for customssupervisor module
+//        Object object = CustomssupervisorOpParam.builder()
+//                .supervisor("Customssupervisor").build();
+//        yangModuleList.add(object);
+//
+//        // Creating the object for merchandisersupervisor module
+//        object = MerchandisersupervisorOpParam.builder()
+//                .supervisor("Merchandisersupervisor").build();
+//        yangModuleList.add(object);
+//
+//        // Creating the object for materialsupervisor module
+//        Supervisor supervisor1 = new DefaultSupervisor.SupervisorBuilder()
+//                .name("abc1").departmentId("xyz1").build();
+//        Supervisor supervisor2 = new DefaultSupervisor.SupervisorBuilder()
+//                .name("abc2").departmentId("xyz2").build();
+//        Supervisor supervisor3 = new DefaultSupervisor.SupervisorBuilder()
+//                .name("abc3").departmentId("xyz3").build();
+//        Supervisor supervisor4 = new DefaultSupervisor.SupervisorBuilder()
+//                .name("abc4").departmentId("xyz4").build();
+//        Supervisor supervisor5 = new DefaultSupervisor.SupervisorBuilder()
+//                .name("abc5").departmentId("xyz5").build();
+//
+//        object = MaterialsupervisorOpParam.builder()
+//                .addToSupervisor(supervisor1)
+//                .addToSupervisor(supervisor2)
+//                .addToSupervisor(supervisor3)
+//                .addToSupervisor(supervisor4)
+//                .addToSupervisor(supervisor5).build();
+//
+//        yangModuleList.add(object);
+//
+//        // Creating the object for YchPurchasingsupervisor module
+//        YchPurchasingSupervisor purSupervisor =
+//                new DefaultYchPurchasingSupervisor
+//                        .YchPurchasingSupervisorBuilder()
+//                        .ychPurchasingSpecialist("purchasingSpecialist")
+//                        .ychPurchasingSupport("support").build();
+//        object = YchPurchasingsupervisorOpParam.builder()
+//                .ychPurchasingSupervisor(purSupervisor).build();
+//        yangModuleList.add(object);
+//
+//        // Creating the object for warehousesupervisor module
+//        WarehousesupervisorOpParam.WarehousesupervisorBuilder warehsebldr =
+//                WarehousesupervisorOpParam.builder();
+//        warehsebldr.addToSupervisor("supervisor1");
+//        warehsebldr.addToSupervisor("supervisor2");
+//        warehsebldr.addToSupervisor("supervisor3");
+//        warehsebldr.addToSupervisor("supervisor4");
+//        warehsebldr.addToSupervisor("supervisor5");
+//
+//        object = warehsebldr.build();
+//        yangModuleList.add(object);
+//
+//        // Creating the object for tradingsupervisor module
+//        object = TradingsupervisorOpParam.builder()
+//                .supervisor("Tradingsupervisor").build();
+//        yangModuleList.add(object);
+//
+//        List<String> employeeid = EmployeeidOpParam.builder().employeeid();
+//        if (employeeid == null) {
+//            employeeid = new ArrayList<>();
+//        }
+//        employeeid.add("Employ1");
+//        employeeid.add("Employ2");
+//        employeeid.add("Employ3");
+//        employeeid.add("Employ4");
+//        employeeid.add("Employ5");
+//
+//        // Creating the object for employeeid module
+//        object = EmployeeidOpParam.builder().employeeid(employeeid).build();
+//        yangModuleList.add(object);
+//
+//        // Get the xml string and compare
+//        String xml = codecHandler.encodeOperation("config", "ydt.root", null,
+//                                                  yangModuleList, XML, null);
+//        assertEquals(AM_XML + "multiple: module info", multiModuleXml(), xml);
+//    }
 
     /**
      * Unit test case in which verifying object for xml string with config as
@@ -937,7 +926,6 @@
             while ((sCurrentLine = br.readLine()) != null) {
                 sb.append(sCurrentLine);
             }
-
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -954,8 +942,8 @@
                 EmptyContainerOpParam emptyContainerOpParam =
                         (EmptyContainerOpParam) object;
                 assertNull(AM_OBJ + "empty-container: container value is not" +
-                                      "null",
-                              emptyContainerOpParam.emptyContainer());
+                                   "null",
+                           emptyContainerOpParam.emptyContainer());
             } else {
                 assertEquals(AM_OBJ, EMPTY_CONTAINER, object
                         .getClass().getSimpleName());
@@ -986,7 +974,6 @@
             while ((sCurrentLine = br.readLine()) != null) {
                 sb.append(sCurrentLine);
             }
-
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -1165,74 +1152,74 @@
         }*/
     }
 
-    /**
-     * Unit test case in which verifying object for xml string with config as root name and
-     * operation type.
-     */
-    @Test
-    public void proceessCodecDecodeFunctionForOperTypeTest() {
-        String path = "src/test/resources/ychTestResourceFiles/configrootnameOperationType.xml";
-        testYangSchemaNodeProvider.processSchemaRegistry(null);
-        DefaultYangSchemaRegistry schemaRegistry =
-                testYangSchemaNodeProvider.getDefaultYangSchemaRegistry();
-
-        YangCodecRegistry.initializeDefaultCodec();
-        DefaultYangCodecHandler defaultYangCodecHandler =
-                new DefaultYangCodecHandler(schemaRegistry);
-
-        StringBuilder sb = new StringBuilder();
-        String sCurrentLine;
-
-        try (BufferedReader br = new BufferedReader(new FileReader(path))) {
-
-            while ((sCurrentLine = br.readLine()) != null) {
-                sb.append(sCurrentLine);
-            }
-
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-
-        // Verify the received object list
-        List<Object> objectList =
-                defaultYangCodecHandler.decode(sb.toString(),
-                                               XML, EDIT_CONFIG_REQUEST);
-        Iterator<Object> iterator = objectList.iterator();
-        while (iterator.hasNext()) {
-            Object object = iterator.next();
-            if (object.getClass().getSimpleName()
-                    .equals(LOGISTIC_MOD)) {
-                LogisticsManagerOpParam logistics =
-                        (LogisticsManagerOpParam) object;
-                DefaultPurchasingSupervisor purchasingSupervisor =
-                        (DefaultPurchasingSupervisor) logistics
-                                .purchasingSupervisor();
-
-                assertEquals(AM_OBJ + "purchase-super: operation type", DELETE,
-                             purchasingSupervisor.onosYangNodeOperationType());
-                assertEquals(AM_OBJ + "customs-super: leaf value", "abc",
-                             logistics.customsSupervisor());
-                assertEquals(AM_OBJ + "purchase-spec: leaf value", "bcd",
-                             logistics.purchasingSupervisor()
-                                     .purchasingSpecialist());
-                assertEquals(AM_OBJ + "purchase-support: leaf value",
-                             "cde", logistics.purchasingSupervisor()
-                                     .support());
-
-            } else if (object.getClass().getSimpleName()
-                    .equals(MERCHA_MOD)) {
-                MerchandisersupervisorOpParam merchandisersupervisorOpParam =
-                        (MerchandisersupervisorOpParam) object;
-                assertEquals(AM_OBJ + "merchandiser-super: leaf value",
-                             "abc", merchandisersupervisorOpParam.supervisor());
-            } else {
-                assertEquals(AM_OBJ, LOGISTIC_MOD, object
-                        .getClass().getSimpleName());
-                assertEquals(AM_OBJ, MERCHA_MOD, object
-                        .getClass().getSimpleName());
-            }
-        }
-    }
+//    /**
+//     * Unit test case in which verifying object for xml string with config as root name and
+//     * operation type.
+//     */
+//    @Test
+//    public void proceessCodecDecodeFunctionForOperTypeTest() {
+//        String path = "src/test/resources/ychTestResourceFiles/configrootnameOperationType.xml";
+//        testYangSchemaNodeProvider.processSchemaRegistry(null);
+//        DefaultYangSchemaRegistry schemaRegistry =
+//                testYangSchemaNodeProvider.getDefaultYangSchemaRegistry();
+//
+//        YangCodecRegistry.initializeDefaultCodec();
+//        DefaultYangCodecHandler defaultYangCodecHandler =
+//                new DefaultYangCodecHandler(schemaRegistry);
+//
+//        StringBuilder sb = new StringBuilder();
+//        String sCurrentLine;
+//
+//        try (BufferedReader br = new BufferedReader(new FileReader(path))) {
+//
+//            while ((sCurrentLine = br.readLine()) != null) {
+//                sb.append(sCurrentLine);
+//            }
+//
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//
+//        // Verify the received object list
+//        List<Object> objectList =
+//                defaultYangCodecHandler.decode(sb.toString(),
+//                                               XML, EDIT_CONFIG_REQUEST);
+//        Iterator<Object> iterator = objectList.iterator();
+//        while (iterator.hasNext()) {
+//            Object object = iterator.next();
+//            if (object.getClass().getSimpleName()
+//                    .equals(LOGISTIC_MOD)) {
+//                LogisticsManagerOpParam logistics =
+//                        (LogisticsManagerOpParam) object;
+//                DefaultPurchasingSupervisor purchasingSupervisor =
+//                        (DefaultPurchasingSupervisor) logistics
+//                                .purchasingSupervisor();
+//
+//                assertEquals(AM_OBJ + "purchase-super: operation type", DELETE,
+//                             purchasingSupervisor.yangPurchasingSupervisorOpType());
+//                assertEquals(AM_OBJ + "customs-super: leaf value", "abc",
+//                             logistics.customsSupervisor());
+//                assertEquals(AM_OBJ + "purchase-spec: leaf value", "bcd",
+//                             logistics.purchasingSupervisor()
+//                                     .purchasingSpecialist());
+//                assertEquals(AM_OBJ + "purchase-support: leaf value",
+//                             "cde", logistics.purchasingSupervisor()
+//                                     .support());
+//
+//            } else if (object.getClass().getSimpleName()
+//                    .equals(MERCHA_MOD)) {
+//                MerchandisersupervisorOpParam merchandisersupervisorOpParam =
+//                        (MerchandisersupervisorOpParam) object;
+//                assertEquals(AM_OBJ + "merchandiser-super: leaf value",
+//                             "abc", merchandisersupervisorOpParam.supervisor());
+//            } else {
+//                assertEquals(AM_OBJ, LOGISTIC_MOD, object
+//                        .getClass().getSimpleName());
+//                assertEquals(AM_OBJ, MERCHA_MOD, object
+//                        .getClass().getSimpleName());
+//            }
+//        }
+//    }
 
     /**
      * Validate the leaf value for purchasing specialist.
@@ -1255,7 +1242,6 @@
                         .getClass().getSimpleName());
             }
         }
-
     }
 
     /**
@@ -1273,7 +1259,6 @@
                         (MerchandisersupervisorOpParam) object;
                 assertEquals(AM_OBJ + "merchandiser-super: leaf value", "abc",
                              merchandisersupervisorOpParam.supervisor());
-
             } else {
                 assertEquals(AM_OBJ, MERCHA_MOD, object
                         .getClass().getSimpleName());
@@ -1304,7 +1289,6 @@
             while ((sCurrentLine = br.readLine()) != null) {
                 sb.append(sCurrentLine);
             }
-
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -1339,7 +1323,6 @@
             while ((sCurrentLine = br.readLine()) != null) {
                 sb.append(sCurrentLine);
             }
-
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -1374,7 +1357,6 @@
             while ((sCurrentLine = br.readLine()) != null) {
                 sb.append(sCurrentLine);
             }
-
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -1409,7 +1391,6 @@
             while ((sCurrentLine = br.readLine()) != null) {
                 sb.append(sCurrentLine);
             }
-
         } catch (IOException e) {
             e.printStackTrace();
         }
diff --git a/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/AugmentSequenceTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/AugmentSequenceTest.java
new file mode 100644
index 0000000..72d68c1
--- /dev/null
+++ b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/AugmentSequenceTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2016. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
+ * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
+ * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
+ * Vestibulum commodo. Ut rhoncus gravida arcu.
+ */
+
+package org.onosproject.yms.app.ydt;
+
+import org.junit.Test;
+
+import static org.onosproject.yms.app.ydt.YdtAppNodeOperationType.OTHER_EDIT;
+import static org.onosproject.yms.app.ydt.YdtTestConstants.AUGNS;
+import static org.onosproject.yms.app.ydt.YdtTestConstants.AUGSE;
+import static org.onosproject.yms.app.ydt.YdtTestUtils.augmentSequenceYdt;
+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.validateNodeContents;
+import static org.onosproject.yms.app.ydt.YdtTestUtils.walkINTree;
+import static org.onosproject.yms.ydt.YdtContextOperationType.MERGE;
+
+public class AugmentSequenceTest {
+
+    private static final String[] EXPECTED = {
+            "Entry Node is augment.",
+            "Entry Node is augmentSequence.",
+            "Entry Node is l1.",
+            "Entry Node is leaf1.",
+            "Exit Node is leaf1.",
+
+            "Entry Node is c1.",
+            "Entry Node is leaf2.",
+            "Exit Node is leaf2.",
+            "Exit Node is c1.",
+
+            "Entry Node is c2.",
+            "Entry Node is leaf2.",
+            "Exit Node is leaf2.",
+            "Exit Node is c2.",
+
+            "Exit Node is l1.",
+            "Exit Node is augmentSequence.",
+            "Exit Node is augment.",
+    };
+
+    /**
+     * Creates and validates sequence of augment in ydt.
+     */
+    @Test
+    public void augmentTest() {
+        YangRequestWorkBench ydtBuilder = augmentSequenceYdt();
+        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, "augment", null);
+        ydtNode = ydtNode.getFirstChild();
+        validateNodeContents(ydtNode, "augmentSequence", MERGE);
+        ydtNode = ydtNode.getFirstChild();
+        validateNodeContents(ydtNode, "l1", MERGE);
+        ydtNode = ydtNode.getFirstChild();
+
+        validateLeafContents(ydtNode, "leaf1", "1");
+        ydtNode = ydtNode.getNextSibling();
+
+        //Augmenting leaf2
+        validateNodeContents(ydtNode, "c1", MERGE);
+        ydtNode = ydtNode.getFirstChild();
+        validateLeafContents(ydtNode, "leaf2", "2");
+        ydtNode = ydtNode.getParent();
+        ydtNode = ydtNode.getNextSibling();
+
+        //Augmenting leaf3
+        validateNodeContents(ydtNode, "c2", MERGE);
+        ydtNode = ydtNode.getFirstChild();
+        validateLeafContents(ydtNode, "leaf2", "3");
+    }
+
+    /**
+     * 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, "augmentSequence",
+                                      OTHER_EDIT);
+        ydtAppContext = ydtAppContext.getFirstChild();
+
+        //Inside list checking the first augmented leaf
+        validateAppNodeContents(ydtAppContext, AUGSE, AUGNS, OTHER_EDIT);
+    }
+}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/AugmentTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/AugmentTest.java
similarity index 80%
rename from apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/AugmentTest.java
rename to apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/AugmentTest.java
index 8fd5580..dee5648 100644
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/AugmentTest.java
+++ b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/AugmentTest.java
@@ -1,17 +1,9 @@
 /*
- * 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.
+ * Copyright (c) 2016. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
+ * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
+ * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
+ * Vestibulum commodo. Ut rhoncus gravida arcu.
  */
 
 package org.onosproject.yms.app.ydt;
@@ -21,29 +13,13 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import static org.junit.Assert.assertNull;
 import static org.onosproject.yms.app.ydt.YdtAppNodeOperationType.BOTH;
-import static org.onosproject.yms.app.ydt.YdtAppNodeOperationType.DELETE_ONLY;
-import static org.onosproject.yms.app.ydt.YdtAppNodeOperationType.OTHER_EDIT;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.A1;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.A2;
 import static org.onosproject.yms.app.ydt.YdtTestConstants.A2L;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.A3;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.A4;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.A5;
 import static org.onosproject.yms.app.ydt.YdtTestConstants.A5L;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.A6;
 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.AUG2;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.AUG3;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.AUG4;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.AUG5;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.AUG6;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.AUG7;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.AUG8;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.AUG9;
 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;
@@ -228,6 +204,27 @@
             "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."
     };
 
@@ -456,6 +453,35 @@
         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");
     }
 
     /**
@@ -473,56 +499,21 @@
 
         //Inside link node
         validateAppNodeContents(ydtAppContext, AUG1, TOPONS, BOTH);
-        ydtAppContext = ydtAppContext.getFirstChild();
-        validateAppNodeContents(ydtAppContext, AUG3, A1, OTHER_EDIT);
-        assertNull(ydtAppContext.getFirstChild());
-        assertNull(ydtAppContext.getPreviousSibling());
-        ydtAppContext = ydtAppContext.getNextSibling();
-        validateAppNodeContents(ydtAppContext, AUG3, A2, BOTH);
-
-        ydtAppContext = ydtAppContext.getFirstChild();
-        validateAppNodeContents(ydtAppContext, AUG5, A5, DELETE_ONLY);
-
-        ydtAppContext = ydtAppContext.getFirstChild();
-        validateAppNodeContents(ydtAppContext, AUG9, A6, DELETE_ONLY);
-        ydtAppContext = ydtAppContext.getParent();
-
-        ydtAppContext = ydtAppContext.getNextSibling();
-        validateAppNodeContents(ydtAppContext, AUG5, A3, BOTH);
-
-        ydtAppContext = ydtAppContext.getFirstChild();
-        validateAppNodeContents(ydtAppContext, AUG7, A4, DELETE_ONLY);
-
-        ydtAppContext = ydtAppContext.getNextSibling();
-        validateAppNodeContents(ydtAppContext, AUG7, A5, OTHER_EDIT);
-
-        ydtAppContext = ydtAppContext.getFirstChild();
-        validateAppNodeContents(ydtAppContext, AUG8, A6, OTHER_EDIT);
-        ydtAppContext = ydtAppContext.getParent();
-
-        ydtAppContext = ydtAppContext.getNextSibling();
-        validateAppNodeContents(ydtAppContext, AUG7, A6, DELETE_ONLY);
 
         ydtAppContext = ydtAppContext.getParent();
-        ydtAppContext = ydtAppContext.getParent();
-        ydtAppContext = ydtAppContext.getParent();
+        validateAugmentNetworkAppTree(ydtAppContext);
+    }
+
+    /**
+     * Validates the given built ydt application tree for augmenting network
+     * module.
+     */
+    private void validateAugmentNetworkAppTree(YdtAppContext ydtAppContext) {
 
         ydtAppContext = ydtAppContext.getNextSibling();
-
-        validateAppNodeContents(ydtAppContext, AUG2, TOPONS, OTHER_EDIT);
+        //augmenting network module node
+        validateAppModuleNodeContents(ydtAppContext, "augmentNetwork", BOTH);
         ydtAppContext = ydtAppContext.getFirstChild();
-        validateAppNodeContents(ydtAppContext, AUG4, A1, OTHER_EDIT);
-        assertNull(ydtAppContext.getFirstChild());
-        assertNull(ydtAppContext.getPreviousSibling());
-        ydtAppContext = ydtAppContext.getNextSibling();
-        validateAppNodeContents(ydtAppContext, AUG4, A2, OTHER_EDIT);
-        assertNull(ydtAppContext.getNextSibling());
-        ydtAppContext = ydtAppContext.getFirstChild();
-        validateAppNodeContents(ydtAppContext, AUG6, A3, OTHER_EDIT);
-
-        ydtAppContext = ydtAppContext.getNextSibling();
-        validateAppNodeContents(ydtAppContext, AUG6, A4, OTHER_EDIT);
-        assertNull(ydtAppContext.getFirstChild());
-        assertNull(ydtAppContext.getNextSibling());
+        validateAppNodeContents(ydtAppContext, "/node", NETNS, BOTH);
     }
 }
diff --git a/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/EmptyLeafListTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/EmptyLeafListTest.java
new file mode 100644
index 0000000..c1fd7e3
--- /dev/null
+++ b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/EmptyLeafListTest.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2016. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
+ * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
+ * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
+ * Vestibulum commodo. Ut rhoncus gravida arcu.
+ */
+
+package org.onosproject.yms.app.ydt;
+
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+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.ydt.YdtContextOperationType.MERGE;
+
+public class EmptyLeafListTest {
+
+    // Logger list is used for walker testing.
+    private final List<String> logger = new ArrayList<>();
+
+    private static final String[] EXPECTED = {
+            "Entry Node is empty.",
+            "Entry Node is EmptyLeafList.",
+            "Entry Node is l1.",
+            "Exit Node is l1.",
+            "Entry Node is l2.",
+            "Exit Node is l2.",
+            "Entry Node is l3.",
+            "Exit Node is l3.",
+            "Entry Node is list1.",
+            "Exit Node is list1.",
+            "Entry Node is list2.",
+            "Exit Node is list2.",
+            "Entry Node is list3.",
+            "Exit Node is list3.",
+            "Exit Node is EmptyLeafList.",
+            "Exit Node is empty."
+    };
+
+    /**
+     * Creates and validates empty leaf list ydt.
+     */
+    @Test
+    public void emptyListTest() throws IOException {
+
+        //TODO need to be handled later
+//        YangRequestWorkBench ydtBuilder = emptyLeafListYdt();
+//        validateTree(ydtBuilder);
+//        walkINTree(ydtBuilder, EXPECTED);
+    }
+
+    /**
+     * Validates the given built ydt.
+     */
+    private void validateTree(YangRequestWorkBench ydtBuilder) {
+
+        Set<String> valueSet = new HashSet();
+
+        // Assign root node to ydtNode for validating purpose.
+        YdtNode ydtNode = (YdtNode) ydtBuilder.getRootNode();
+        // Logical root node does not have operation type
+        validateNodeContents(ydtNode, "empty", null);
+        ydtNode = ydtNode.getFirstChild();
+        validateNodeContents(ydtNode, "EmptyLeafList", MERGE);
+        ydtNode = ydtNode.getFirstChild();
+        validateLeafContents(ydtNode, "l1", null);
+        ydtNode = ydtNode.getNextSibling();
+        validateLeafContents(ydtNode, "l2", null);
+        ydtNode = ydtNode.getNextSibling();
+        validateLeafContents(ydtNode, "l3", null);
+        ydtNode = ydtNode.getNextSibling();
+
+        validateLeafListContents(ydtNode, "list1", valueSet);
+        ydtNode = ydtNode.getNextSibling();
+        validateLeafListContents(ydtNode, "list2", valueSet);
+        ydtNode = ydtNode.getNextSibling();
+        validateLeafListContents(ydtNode, "list3", valueSet);
+    }
+}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/FoodArenaTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/FoodArenaTest.java
similarity index 100%
rename from apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/FoodArenaTest.java
rename to apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/FoodArenaTest.java
diff --git a/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/IdentityTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/IdentityTest.java
new file mode 100644
index 0000000..4c825a0
--- /dev/null
+++ b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/IdentityTest.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2016. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
+ * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
+ * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
+ * Vestibulum commodo. Ut rhoncus gravida arcu.
+ */
+
+package org.onosproject.yms.app.ydt;
+
+import org.junit.Test;
+import org.onosproject.yms.app.yob.DefaultYobBuilder;
+import org.onosproject.yms.app.ytb.DefaultYangTreeBuilder;
+import org.onosproject.yms.ydt.YdtContext;
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import static org.onosproject.yms.app.ydt.YdtAppNodeOperationType.OTHER_EDIT;
+import static org.onosproject.yms.app.ydt.YdtTestUtils.identityRefYdt;
+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.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.MERGE;
+import static org.onosproject.yms.ydt.YmsOperationType.EDIT_CONFIG_REPLY;
+
+public class IdentityTest {
+
+    Set<String> valueSet = new HashSet();
+
+    private static final String[] EXPECTED = {
+            "Entry Node is identityref.",
+            "Entry Node is crypto-base.",
+            "Entry Node is crypto.",
+            "Exit Node is crypto.",
+            "Entry Node is abc-zeunion.",
+            "Exit Node is abc-zeunion.",
+            "Entry Node is level2.",
+            "Exit Node is level2.",
+            "Entry Node is level3.",
+            "Exit Node is level3.",
+            "Entry Node is level4.",
+            "Exit Node is level4.",
+            "Entry Node is abc-type.",
+            "Exit Node is abc-type.",
+            "Exit Node is crypto-base.",
+            "Exit Node is identityref.",
+    };
+
+    /**
+     * Creates and validates identity ref in ydt.
+     */
+    @Test
+    public void identityRefTest() {
+        YangRequestWorkBench ydtBuilder = identityRefYdt();
+        validateTree(ydtBuilder);
+        validateAppTree(ydtBuilder);
+        walkINTree(ydtBuilder, EXPECTED);
+
+        //TODO need to be handled later
+//        validateYangObject(ydtBuilder);
+    }
+
+    /**
+     * Validates the given built ydt.
+     */
+    private void validateTree(YangRequestWorkBench ydtBuilder) {
+
+        valueSet.add("crypto-alg");
+        // Assign root node to ydtNode for validating purpose.
+        YdtNode ydtNode = (YdtNode) ydtBuilder.getRootNode();
+        // Logical root node does not have operation type
+        validateNodeContents(ydtNode, "identityref", null);
+        ydtNode = ydtNode.getFirstChild();
+        validateNodeContents(ydtNode, "crypto-base", MERGE);
+        ydtNode = ydtNode.getFirstChild();
+
+        validateLeafContents(ydtNode, "crypto", "crypto-alg");
+        ydtNode = ydtNode.getNextSibling();
+        validateLeafContents(ydtNode, "abc-zeunion", "crypto-alg");
+        ydtNode = ydtNode.getNextSibling();
+        validateLeafContents(ydtNode, "level2", "crypto-alg2");
+        ydtNode = ydtNode.getNextSibling();
+        validateLeafContents(ydtNode, "level3", "crypto-alg3");
+        ydtNode = ydtNode.getNextSibling();
+        validateLeafContents(ydtNode, "level4", "crypto-alg3");
+        ydtNode = ydtNode.getNextSibling();
+        validateLeafListContents(ydtNode, "abc-type", valueSet);
+
+    }
+
+    /**
+     * 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, "crypto-base",
+                                      OTHER_EDIT);
+    }
+
+    /**
+     * Creates Ydt from YO using YTB.
+     */
+    private void validateYangObject(YangRequestWorkBench ydtBuilder) {
+
+        YdtContext rootCtx = ydtBuilder.getRootNode();
+
+        YdtContext childCtx = rootCtx.getFirstChild();
+
+        DefaultYobBuilder builder = new DefaultYobBuilder();
+
+        Object yangObject = builder.getYangObject(
+                (YdtExtendedContext) childCtx, YdtTestUtils
+                        .getSchemaRegistry());
+
+        List<Object> list = new LinkedList<>();
+        list.add(yangObject);
+        // Builds YANG tree in YTB.
+        DefaultYangTreeBuilder treeBuilder = new DefaultYangTreeBuilder();
+        YangRequestWorkBench defaultYdtBuilder =
+                (YangRequestWorkBench) treeBuilder.getYdtBuilderForYo(
+                        list, "identityref", "ydt.crypto-base",
+                        EDIT_CONFIG_REPLY, YdtTestUtils
+                                .getSchemaRegistry());
+
+        // Validate the created YDT
+        walkINTree(defaultYdtBuilder, EXPECTED);
+        validateTree(defaultYdtBuilder);
+    }
+}
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/IetfNetworkTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/IetfNetworkTest.java
similarity index 100%
rename from apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/IetfNetworkTest.java
rename to apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/IetfNetworkTest.java
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/IetfTopologyTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/IetfTopologyTest.java
similarity index 97%
rename from apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/IetfTopologyTest.java
rename to apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/IetfTopologyTest.java
index c757b0c..0469a35 100644
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/IetfTopologyTest.java
+++ b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/IetfTopologyTest.java
@@ -20,7 +20,6 @@
 
 import static org.onosproject.yms.app.ydt.YdtAppNodeOperationType.OTHER_EDIT;
 import static org.onosproject.yms.app.ydt.YdtTestConstants.AUG1;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.AUG2;
 import static org.onosproject.yms.app.ydt.YdtTestConstants.IETF;
 import static org.onosproject.yms.app.ydt.YdtTestConstants.SLINK;
 import static org.onosproject.yms.app.ydt.YdtTestConstants.STP;
@@ -261,8 +260,5 @@
 
         //Inside link node
         validateAppNodeContents(ydtAppContext, AUG1, TOPONS, OTHER_EDIT);
-        ydtAppContext = ydtAppContext.getNextSibling();
-
-        validateAppNodeContents(ydtAppContext, AUG2, TOPONS, OTHER_EDIT);
     }
 }
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/ListTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/ListTest.java
similarity index 81%
rename from apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/ListTest.java
rename to apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/ListTest.java
index 711f882..4cee8b2 100644
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/ListTest.java
+++ b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/ListTest.java
@@ -19,7 +19,6 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.DataTypeException;
 import org.onosproject.yms.app.ydt.exceptions.YdtException;
 
 import java.util.ArrayList;
@@ -45,6 +44,7 @@
 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.MERGE;
+import static org.onosproject.yms.ydt.YdtType.SINGLE_INSTANCE_NODE;
 
 public class ListTest {
 
@@ -65,7 +65,9 @@
             "Too many instances of listwithcontainer. Expected maximum " +
                     "instances 3.",
             "Duplicate entry found under invalidinterval leaf-list node.",
-            "YANG file error : Input value \"string\" is not a valid uint16."
+            "YANG file error : Input value \"string\" is not a valid uint16.",
+            "Schema node with name listwithcontainer doesn't exist.",
+            "Duplicate entry with name rootlist."
     };
 
     private static final String[] EXPECTED = {
@@ -177,7 +179,7 @@
      */
     @Test
     public void negative1Test() {
-        thrown.expect(YdtException.class);
+        thrown.expect(IllegalArgumentException.class);
         thrown.expectMessage(ERROR[5]);
         getYdtBuilder("list", "invalid", "ydt.invalid", MERGE);
     }
@@ -317,63 +319,89 @@
         leafErrorMsgValidator(ydtBuilder, INV, "12", ERROR[7]);
     }
 
+    //TODO negative scenario will be handled later
+//    /**
+//     * Tests the negative error scenario when string is passed for uint16 type
+//     * leaf node.
+//     */
+//    @Test
+//    public void negative9Test() throws YdtException {
+//        YangRequestWorkBench ydtBuilder = getTestYdtBuilder(LISTNS);
+//        ydtBuilder.addChild(LWC, LISTNS);
+//        ydtBuilder.addLeaf("invalid", LISTNS, "12");
+//        ydtBuilder.traverseToParent();
+//        ydtBuilder.addLeaf("invalid1", LISTNS, "12");
+//        ydtBuilder.traverseToParent();
+//        leafErrorMsgValidator(ydtBuilder, INV, "string", ERROR[8]);
+//    }
+//
+//    /**
+//     * Tests the negative error scenario when duplicate key entry created
+//     * inside a leaf-list node.
+//     */
+//    @Test
+//    public void negative10Test() throws YdtException {
+//        valueSet.clear();
+//        valueSet.add("1");
+//        valueSet.add("2");
+//        valueSet.add("12");
+//        YangRequestWorkBench ydtBuilder = getTestYdtBuilder(LISTNS);
+//        ydtBuilder.addChild(LWC, LISTNS);
+//        ydtBuilder.addLeaf("invalid", LISTNS, "12");
+//        ydtBuilder.traverseToParent();
+//        ydtBuilder.addLeaf("invalid1", LISTNS, "12");
+//        ydtBuilder.traverseToParent();
+//        ydtBuilder.addLeaf(INV, LISTNS, "12");
+//        ydtBuilder.traverseToParent();
+//        thrown.expect(IllegalArgumentException.class);
+//        thrown.expectMessage(ERROR[7]);
+//        ydtBuilder.addLeaf(INV, LISTNS, valueSet);
+//    }
+
+//    /**
+//     * Tests the negative error scenario when string is passed for uint16 type
+//     * key entry inside a leaf-list node.
+//     */
+//    @Test
+//    public void negative11Test() throws YdtException {
+//        valueSet.clear();
+//        valueSet.add("string");
+//        YangRequestWorkBench ydtBuilder = getTestYdtBuilder(LISTNS);
+//        ydtBuilder.addChild(LWC, LISTNS);
+//        ydtBuilder.addLeaf("invalid", LISTNS, "12");
+//        ydtBuilder.traverseToParent();
+//        ydtBuilder.addLeaf("invalid1", LISTNS, "12");
+//        ydtBuilder.traverseToParent();
+//        ydtBuilder.addLeaf(INV, LISTNS, "12");
+//        ydtBuilder.traverseToParent();
+//        thrown.expect(DataTypeException.class);
+//        thrown.expectMessage(ERROR[8]);
+//        ydtBuilder.addLeaf(INV, LISTNS, valueSet);
+//    }
+
     /**
-     * Tests the negative error scenario when string is passed for uint16 type
-     * leaf node.
+     * Tests the negative error scenario when list node addition requested
+     * with single instance request type.
      */
     @Test
-    public void negative9Test() throws YdtException {
+    public void negative12Test() {
         YangRequestWorkBench ydtBuilder = getTestYdtBuilder(LISTNS);
-        ydtBuilder.addChild(LWC, LISTNS);
-        ydtBuilder.addLeaf("invalid", LISTNS, "12");
-        ydtBuilder.traverseToParent();
-        ydtBuilder.addLeaf("invalid1", LISTNS, "12");
-        ydtBuilder.traverseToParent();
-        leafErrorMsgValidator(ydtBuilder, INV, "string", ERROR[8]);
+        thrown.expect(IllegalArgumentException.class);
+        thrown.expectMessage(ERROR[9]);
+        ydtBuilder.addChild(LWC, LISTNS, SINGLE_INSTANCE_NODE, MERGE);
     }
 
     /**
-     * Tests the negative error scenario when duplicate key entry created
-     * inside a leaf-list node.
+     * Tests the negative error scenario when application with requested
+     * name is already part of tree.
      */
     @Test
-    public void negative10Test() throws YdtException {
-        valueSet.clear();
-        valueSet.add("1");
-        valueSet.add("2");
-        valueSet.add("12");
+    public void negative13Test() {
         YangRequestWorkBench ydtBuilder = getTestYdtBuilder(LISTNS);
-        ydtBuilder.addChild(LWC, LISTNS);
-        ydtBuilder.addLeaf("invalid", LISTNS, "12");
         ydtBuilder.traverseToParent();
-        ydtBuilder.addLeaf("invalid1", LISTNS, "12");
-        ydtBuilder.traverseToParent();
-        ydtBuilder.addLeaf(INV, LISTNS, "12");
-        ydtBuilder.traverseToParent();
-        thrown.expect(YdtException.class);
-        thrown.expectMessage(ERROR[7]);
-        ydtBuilder.addLeaf(INV, LISTNS, valueSet);
-    }
-
-    /**
-     * Tests the negative error scenario when string is passed for uint16 type
-     * key entry inside a leaf-list node.
-     */
-    @Test
-    public void negative11Test() throws YdtException {
-        valueSet.clear();
-        valueSet.add("string");
-        YangRequestWorkBench ydtBuilder = getTestYdtBuilder(LISTNS);
-        ydtBuilder.addChild(LWC, LISTNS);
-        ydtBuilder.addLeaf("invalid", LISTNS, "12");
-        ydtBuilder.traverseToParent();
-        ydtBuilder.addLeaf("invalid1", LISTNS, "12");
-        ydtBuilder.traverseToParent();
-        ydtBuilder.addLeaf(INV, LISTNS, "12");
-        ydtBuilder.traverseToParent();
-        thrown.expect(DataTypeException.class);
-        thrown.expectMessage(ERROR[8]);
-        ydtBuilder.addLeaf(INV, LISTNS, valueSet);
+        thrown.expect(IllegalArgumentException.class);
+        thrown.expectMessage(ERROR[10]);
+        ydtBuilder.addChild("rootlist", LISTNS, MERGE);
     }
 
     /**
@@ -393,7 +421,7 @@
         boolean isExpOccurred = false;
         try {
             bldr.addMultiInstanceChild(LWC, LISTNS, list, null);
-        } catch (YdtException e) {
+        } catch (IllegalArgumentException e) {
             isExpOccurred = true;
             assertEquals(e.getMessage(), error);
         }
@@ -416,7 +444,7 @@
         boolean isExpOccurred = false;
         try {
             ydtBuilder.traverseToParent();
-        } catch (YdtException e) {
+        } catch (IllegalStateException e) {
             isExpOccurred = true;
             assertEquals(e.getMessage(), error);
         }
@@ -441,7 +469,7 @@
         boolean isExpOccurred = false;
         try {
             bldr.addLeaf(name, LISTNS, val);
-        } catch (YdtException e) {
+        } catch (IllegalArgumentException e) {
             isExpOccurred = true;
             assertEquals(e.getMessage(), error);
         }
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/LogisticsManagerTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/LogisticsManagerTest.java
similarity index 100%
rename from apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/LogisticsManagerTest.java
rename to apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/LogisticsManagerTest.java
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/MockYangSchemaRegistry.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/MockYangSchemaRegistry.java
similarity index 83%
rename from apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/MockYangSchemaRegistry.java
rename to apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/MockYangSchemaRegistry.java
index 84c99fd..253332e 100644
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/MockYangSchemaRegistry.java
+++ b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/MockYangSchemaRegistry.java
@@ -20,6 +20,8 @@
 import org.onosproject.yms.app.ysr.DefaultYangSchemaRegistry;
 import org.onosproject.yms.app.ysr.TestYangSchemaNodeProvider;
 import org.onosproject.yms.app.ysr.YangSchemaRegistry;
+import org.onosproject.yms.ysr.YangModuleIdentifier;
+import org.onosproject.yms.ysr.YangModuleLibrary;
 
 import static org.junit.Assert.assertEquals;
 
@@ -31,11 +33,9 @@
  */
 public class MockYangSchemaRegistry implements YangSchemaRegistry {
 
-
     @Override
-    public void registerApplication(
-            Object managerObject,
-            Class<?> serviceClass) {
+    public void registerApplication(Object managerObject, Class<?> serviceClass) {
+
     }
 
     @Override
@@ -92,8 +92,28 @@
     }
 
     @Override
-    public Class<?> getRegisteredClass(YangSchemaNode schemaNode,
-                                       String appName) {
+    public Class<?> getRegisteredClass(YangSchemaNode schemaNode) {
         return null;
     }
+
+    @Override
+    public boolean verifyNotificationObject(Object appObj, Class<?> service) {
+        return false;
+    }
+
+    @Override
+    public void flushYsrData() {
+
+    }
+
+    @Override
+    public String getYangFile(YangModuleIdentifier moduleIdentifier) {
+        return null;
+    }
+
+    @Override
+    public void processModuleLibrary(String serviceName, YangModuleLibrary library) {
+
+    }
+
 }
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/RpcTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/RpcTest.java
similarity index 100%
rename from apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/RpcTest.java
rename to apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/RpcTest.java
diff --git a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/YdtBitTest.java b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/YdtBitTest.java
similarity index 78%
rename from apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/YdtBitTest.java
rename to apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/YdtBitTest.java
index 5446b51..babd005 100644
--- a/apps/yms/app/src/test/java/org/onosproject/yms/app/ydt/YdtBitTest.java
+++ b/apps/yms/ut/src/test/java/org/onosproject/yms/app/ydt/YdtBitTest.java
@@ -18,10 +18,7 @@
 
 import org.junit.Test;
 
-import static org.onosproject.yms.app.ydt.YdtTestConstants.BIT;
-import static org.onosproject.yms.app.ydt.YdtTestConstants.BITNS;
 import static org.onosproject.yms.app.ydt.YdtTestUtils.bitYdt;
-import static org.onosproject.yms.app.ydt.YdtTestUtils.validateErrMsg;
 import static org.onosproject.yms.app.ydt.YdtTestUtils.validateLeafContents;
 import static org.onosproject.yms.app.ydt.YdtTestUtils.validateNodeContents;
 import static org.onosproject.yms.ydt.YdtContextOperationType.MERGE;
@@ -73,22 +70,23 @@
         validateLeafContents(ydtNode, "bit", "ten-Mb-only");
     }
 
-    /*
-