[ONOS-6783] Data type handling in Data Node

Change-Id: I5d27e169f95e2a5af89a866c1d34281201c73c56
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/DataTreeContextSwitchTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/DataTreeContextSwitchTest.java
index a6a05ec..171ca85 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/DataTreeContextSwitchTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/DataTreeContextSwitchTest.java
@@ -18,24 +18,6 @@
 
 
 import org.junit.Test;
-import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.ChoiceContainer;
-import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.DefaultChoiceContainer;
-import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.choicecontainer.DefaultPredict;
-import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.choicecontainer.Predict;
-import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.choicecontainer.predict.DefaultReproduce;
-import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.choicecontainer.predict.Reproduce;
-import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.currentvalue.DefaultYtbAbsent;
-import org.onosproject.yang.gen.v1.ytbsimpleaugment.rev20160826.ytbsimpleaugment.DefaultCont1;
-import org.onosproject.yang.gen.v1.ytbsimpleaugment.rev20160826.ytbsimpleaugment.cont1.DefaultCont2;
-import org.onosproject.yang.gen.v1.ytbsimpleaugment.rev20160826.ytbsimpleaugment.cont1.cont2.DefaultAugmentedCont2;
-import org.onosproject.yang.gen.v1.ytbsimpleaugment.rev20160826.ytbsimpleaugment.cont1.cont2.augmentedcont2.Cont1s;
-import org.onosproject.yang.gen.v1.ytbsimpleaugment.rev20160826.ytbsimpleaugment.cont1.cont2.augmentedcont2.DefaultCont1s;
-import org.onosproject.yang.gen.v1.ytbsimplechoicecase.rev20160826.ytbsimplechoicecase.DefaultYtbFood;
-import org.onosproject.yang.gen.v1.ytbsimplechoicecase.rev20160826.ytbsimplechoicecase.ytbfood.ytbsnack.DefaultYtbLateNight;
-import org.onosproject.yang.gen.v1.modulelistandkey.rev20160826.modulelistandkey.DefaultModKey;
-import org.onosproject.yang.gen.v1.modulelistandkeyaugment.rev20160826.modulelistandkeyaugment.modkey.DefaultAugmentedSchModKey;
-import org.onosproject.yang.gen.v1.modulelistandkeyaugment.rev20160826.modulelistandkeyaugment.modkey.augmentedschmodkey.AugListModKey;
-import org.onosproject.yang.gen.v1.modulelistandkeyaugment.rev20160826.modulelistandkeyaugment.modkey.augmentedschmodkey.DefaultAugListModKey;
 import org.onosproject.yang.gen.v1.modeldatatoresourcedata.rev20160826.modeldatatoresourcedata.BinaryTypedef;
 import org.onosproject.yang.gen.v1.modeldatatoresourcedata.rev20160826.modeldatatoresourcedata.DefaultFirstLevel;
 import org.onosproject.yang.gen.v1.modeldatatoresourcedata.rev20160826.modeldatatoresourcedata.UnionTypedef;
@@ -57,6 +39,24 @@
 import org.onosproject.yang.gen.v1.modeldatatoresourcedata.rev20160826.modeldatatoresourcedata.group1.DefaultGroupContainer;
 import org.onosproject.yang.gen.v1.modeldatatoresourcedatainterfile.rev20160826.modeldatatoresourcedatainterfile.firstlevel.containerchoice.choicecase.augmentedschchoicecase.DefaultLeafInterAug;
 import org.onosproject.yang.gen.v1.modeldatatoresourcedatainterfile.rev20160826.modeldatatoresourcedatainterfile.firstlevel.containerchoice.choicecase.leafcase.DefaultAugmentedSchLeafCase;
+import org.onosproject.yang.gen.v1.modulelistandkey.rev20160826.modulelistandkey.DefaultModKey;
+import org.onosproject.yang.gen.v1.modulelistandkeyaugment.rev20160826.modulelistandkeyaugment.modkey.DefaultAugmentedSchModKey;
+import org.onosproject.yang.gen.v1.modulelistandkeyaugment.rev20160826.modulelistandkeyaugment.modkey.augmentedschmodkey.AugListModKey;
+import org.onosproject.yang.gen.v1.modulelistandkeyaugment.rev20160826.modulelistandkeyaugment.modkey.augmentedschmodkey.DefaultAugListModKey;
+import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.ChoiceContainer;
+import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.DefaultChoiceContainer;
+import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.choicecontainer.DefaultPredict;
+import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.choicecontainer.Predict;
+import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.choicecontainer.predict.DefaultReproduce;
+import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.contenttest.choicecontainer.choicecontainer.predict.Reproduce;
+import org.onosproject.yang.gen.v1.ytbchoicewithcontainerandleaflist.rev20160826.ytbchoicewithcontainerandleaflist.currentvalue.DefaultYtbAbsent;
+import org.onosproject.yang.gen.v1.ytbsimpleaugment.rev20160826.ytbsimpleaugment.DefaultCont1;
+import org.onosproject.yang.gen.v1.ytbsimpleaugment.rev20160826.ytbsimpleaugment.cont1.DefaultCont2;
+import org.onosproject.yang.gen.v1.ytbsimpleaugment.rev20160826.ytbsimpleaugment.cont1.cont2.DefaultAugmentedCont2;
+import org.onosproject.yang.gen.v1.ytbsimpleaugment.rev20160826.ytbsimpleaugment.cont1.cont2.augmentedcont2.Cont1s;
+import org.onosproject.yang.gen.v1.ytbsimpleaugment.rev20160826.ytbsimpleaugment.cont1.cont2.augmentedcont2.DefaultCont1s;
+import org.onosproject.yang.gen.v1.ytbsimplechoicecase.rev20160826.ytbsimplechoicecase.DefaultYtbFood;
+import org.onosproject.yang.gen.v1.ytbsimplechoicecase.rev20160826.ytbsimplechoicecase.ytbfood.ytbsnack.DefaultYtbLateNight;
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.DefaultModelObjectData;
 import org.onosproject.yang.model.InnerNode;
@@ -91,6 +91,8 @@
     private static final String CHOC = "choc";
     private static final String VAL = "val";
     private static final String IND = "ind";
+    private final TestYangSchemaNodeProvider schemaProvider = new
+            TestYangSchemaNodeProvider();
     private ResourceData rscData;
     private DefaultDataTreeBuilder treeBuilder;
     private ResourceId id;
@@ -101,8 +103,6 @@
     private DataNode node;
     private ModelObjectId mid;
     private DefaultModelObjectData.Builder data;
-    private final TestYangSchemaNodeProvider schemaProvider = new
-            TestYangSchemaNodeProvider();
 
     /**
      * Do the prior setup for each UT.
@@ -1191,7 +1191,7 @@
         c1.leaf3(120);
 
         DefaultAugmentedLeafCase aug1 = new DefaultAugmentedLeafCase();
-        aug1.leafAug(BinaryTypedef.fromString("1011"));
+        aug1.leafAug(BinaryTypedef.fromString("MTAxMQ=="));
 
         c1.addAugmentation(aug1);
 
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilderTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilderTest.java
index a016fda..3951a26 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilderTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilderTest.java
@@ -29,6 +29,18 @@
 import org.onosproject.yang.gen.v1.yrtietfte.rev20170310.yrtietfte.tunnelsgrouping.DefaultTunnels;
 import org.onosproject.yang.gen.v1.yrtietfte.rev20170310.yrtietfte.tunnelsgrouping.tunnels.DefaultTunnel;
 import org.onosproject.yang.gen.v1.yrtietftetypes.rev20160320.yrtietftetypes.TunnelP2p;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.Cont1;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.Def1;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.Def2;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.Def3;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.DefaultCont1;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.Physical;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.Virtual;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.cont1.Cont2;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.cont1.DefaultCont2;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.cont1.cont2.AugmentedCont2;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.cont1.cont2.DefaultAugmentedCont2;
+import org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.def1.Def1Union;
 import org.onosproject.yang.gen.v1.ytbietfschedule.rev20160826.YtbIetfSchedule;
 import org.onosproject.yang.gen.v1.ytbietfschedule.rev20160826.ytbietfschedule.Enum1Enum;
 import org.onosproject.yang.gen.v1.ytbietfschedule.rev20160826.ytbietfschedule.Enum2Enum;
@@ -46,12 +58,15 @@
 import org.onosproject.yang.gen.v1.ytbtreebuilderforlisthavinglist.rev20160826.ytbtreebuilderforlisthavinglist.carrier.multiplexes.DefaultApplicationAreas;
 import org.onosproject.yang.gen.v1.ytbtreebuilderforlisthavinglist.rev20160826.ytbtreebuilderforlisthavinglist.carrier.multiplexes.TypesEnum;
 import org.onosproject.yang.model.DataNode;
-import org.onosproject.yang.model.DefaultModelObjectData;
+import org.onosproject.yang.model.DefaultModelObjectData.Builder;
+import org.onosproject.yang.model.InnerModelObject;
 import org.onosproject.yang.model.InnerNode;
 import org.onosproject.yang.model.KeyLeaf;
+import org.onosproject.yang.model.LeafIdentifier;
 import org.onosproject.yang.model.LeafListKey;
 import org.onosproject.yang.model.LeafModelObject;
 import org.onosproject.yang.model.ListKey;
+import org.onosproject.yang.model.ModelObject;
 import org.onosproject.yang.model.ModelObjectId;
 import org.onosproject.yang.model.NodeKey;
 import org.onosproject.yang.model.ResourceData;
@@ -64,6 +79,8 @@
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Base64;
+import java.util.BitSet;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
@@ -73,6 +90,31 @@
 import static org.hamcrest.core.Is.is;
 import static org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.Cont.LeafIdentifier.LFENUM1;
 import static org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.tpdfun0.Tpdfun0Enum.SUCCESSFUL_EXIT;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LEAF1;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LEAF10;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LEAF11;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LEAF12;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LEAF2;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LEAF3;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LEAF4;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LEAF5;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LEAF6;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LEAF7;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LEAF8;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LEAF9;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LL1;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LL10;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LL11;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LL12;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LL2;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LL3;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LL4;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LL5;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LL6;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LL7;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LL8;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.YtbDataTypes.LeafIdentifier.LL9;
+import static org.onosproject.yang.gen.v1.ytbdatatypes.rev20160826.ytbdatatypes.def1.def1union.Def1UnionEnum1.of;
 import static org.onosproject.yang.model.DataNode.Type.MULTI_INSTANCE_LEAF_VALUE_NODE;
 import static org.onosproject.yang.model.DataNode.Type.MULTI_INSTANCE_NODE;
 import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_LEAF_VALUE_NODE;
@@ -111,7 +153,7 @@
     private List<DataNode> dataNodes;
     private DataNode node;
     private ModelObjectId mid;
-    private DefaultModelObjectData.Builder data;
+    private Builder data;
 
     /**
      * Do the prior setup for each UT.
@@ -140,7 +182,7 @@
         objects.add(9);
         modelObject.values(objects);
         // Builds YANG tree in YTB.
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         data.addModelObject(modelObject);
         rscData = treeBuilder.getResourceData(data.build());
 
@@ -183,7 +225,7 @@
         modelObject.values(objects);
 
         //Builds YANG tree in YTB.
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         data.addModelObject(modelObject);
         rscData = treeBuilder.getResourceData(data.build());
 
@@ -226,7 +268,7 @@
         DefaultModKey m1 = new DefaultModKey();
         m1.types(1);
 
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
 
         data.addModelObject(m1);
         rscData = treeBuilder.getResourceData(data.build());
@@ -280,7 +322,7 @@
         DefaultModKey m3 = new DefaultModKey();
         m3.types(3);
 
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
 
         data.addModelObject(m1).addModelObject(m2).addModelObject(m3);
         rscData = treeBuilder.getResourceData(data.build());
@@ -358,7 +400,7 @@
 
         setUp();
 
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
 
         LeafModelObject object = new LeafModelObject();
         object.leafIdentifier(ModKey.LeafIdentifier.TYPES);
@@ -447,8 +489,7 @@
 
         setUp();
 
-        data = new DefaultModelObjectData
-                .Builder();
+        data = new Builder();
         ModKeyKeys keyKeys = new ModKeyKeys();
         keyKeys.types(10);
         mid = ModelObjectId.builder()
@@ -502,7 +543,7 @@
     public void processWithTypeEnum() {
         setUp();
 
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         //As an application, creates the object.
         LeafModelObject object = new LeafModelObject();
         object.leafIdentifier(YtbIetfSchedule.LeafIdentifier.TIME);
@@ -582,7 +623,7 @@
         sched.predict(dec);
 
         // Builds YANG tree in YTB.
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         data.addModelObject(sched);
         rscData = treeBuilder.getResourceData(data.build());
 
@@ -625,7 +666,7 @@
     public void processModuleWithContainerModId() {
 
         setUp();
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         //As an application, creates the object.
         LeafModelObject object = new LeafModelObject();
         object.leafIdentifier(DefaultSched.LeafIdentifier.PREDICT);
@@ -671,14 +712,14 @@
         setUp();
         // 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};
+        byte[] arr = Base64.getDecoder().decode("QXdnRQ==");
+        byte[] arr1 = Base64.getDecoder().decode("QlFZQg==");
         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};
+        byte[] arr2 = Base64.getDecoder().decode("QndjSA==");
+        byte[] arr3 = Base64.getDecoder().decode("QUFFPQ==");
         destArea2.add(arr2);
         destArea2.add(arr3);
 
@@ -699,14 +740,14 @@
 
         //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};
+        byte[] arrB = Base64.getDecoder().decode("QUtqaA==");
+        byte[] arr1B = Base64.getDecoder().decode("TkJGag==");
         destArea3.add(arrB);
         destArea3.add(arr1B);
 
         List<byte[]> destArea4 = new ArrayList<>();
-        byte[] arr2B = new byte[]{7, 7, 7};
-        byte[] arr3B = new byte[]{0, 1};
+        byte[] arr2B = Base64.getDecoder().decode("SkhJOA==");
+        byte[] arr3B = Base64.getDecoder().decode("MTExMQ==");
         destArea4.add(arr2B);
         destArea4.add(arr3B);
 
@@ -733,7 +774,7 @@
         DefaultCarrier carrier = new DefaultCarrier();
         carrier.multiplexes(multiplexList);
 
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         data.addModelObject(carrier);
         rscData = treeBuilder.getResourceData(data.build());
         nameSpace = "yms:test:ytb:tree:builder:for:list:having:list";
@@ -793,7 +834,7 @@
         assertThat(true, is(key instanceof LeafListKey));
 
         LeafListKey leafListKey = (LeafListKey) key;
-        assertThat("AwgE", is(leafListKey.value()));
+        assertThat("BwcH", is(leafListKey.value()));
 
         sid = key.schemaId();
         assertThat("destination-areas", is(sid.name()));
@@ -804,7 +845,7 @@
         assertThat(true, is(key instanceof LeafListKey));
 
         leafListKey = (LeafListKey) key;
-        assertThat("BQYB", is(leafListKey.value()));
+        assertThat("AAE=", is(leafListKey.value()));
 
         sid = key.schemaId();
         assertThat("destination-areas", is(sid.name()));
@@ -846,7 +887,7 @@
         assertThat(true, is(key instanceof LeafListKey));
 
         leafListKey = (LeafListKey) key;
-        assertThat("BwcH", is(leafListKey.value()));
+        assertThat("JHI8", is(leafListKey.value()));
 
         sid = key.schemaId();
         assertThat("destination-areas", is(sid.name()));
@@ -857,7 +898,7 @@
         assertThat(true, is(key instanceof LeafListKey));
 
         leafListKey = (LeafListKey) key;
-        assertThat("AAE=", is(leafListKey.value()));
+        assertThat("1111", is(leafListKey.value()));
 
         sid = key.schemaId();
         assertThat("destination-areas", is(sid.name()));
@@ -876,7 +917,7 @@
         MoIdToRscIdTest ut = new MoIdToRscIdTest();
         ut.addMockModWithNotification();
 
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         mid = ModelObjectId.builder()
                 .addChild(DefaultTestNotification.class).build();
         data.identifier(mid);
@@ -913,7 +954,7 @@
         MoIdToRscIdTest ut = new MoIdToRscIdTest();
         ut.addMockModWithNotification();
 
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         mid = ModelObjectId.builder()
                 .addChild(DefaultTestNotification.class).build();
         data.identifier(mid);
@@ -957,7 +998,7 @@
         MoIdToRscIdTest ut = new MoIdToRscIdTest();
         ut.addMockModWithRpc();
 
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         mid = ModelObjectId.builder()
                 .addChild(DefaultTestInput.class).build();
         data.identifier(mid);
@@ -1000,7 +1041,7 @@
 
         DefaultTestInput input = new DefaultTestInput();
         input.testContainer(new DefaultTestContainer());
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         data.addModelObject(input);
 
         registry = ut.reg;
@@ -1040,7 +1081,7 @@
         MoIdToRscIdTest ut = new MoIdToRscIdTest();
         ut.addMockModWithRpc();
 
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         data.addModelObject(new DefaultTestOutput());
 
         registry = ut.reg;
@@ -1080,7 +1121,7 @@
         MoIdToRscIdTest ut = new MoIdToRscIdTest();
         ut.addMockModWithRpc();
 
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         mid = ModelObjectId.builder()
                 .addChild(DefaultTestInput.class).build();
         data.identifier(mid);
@@ -1124,7 +1165,7 @@
     @Test
     public void processEnumeration() {
         setUp();
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         ModelObjectId.Builder moIdBdlr = ModelObjectId.builder()
                 .addChild(DefaultCont.class);
         LeafModelObject mo = new LeafModelObject();
@@ -1171,7 +1212,7 @@
         DefaultTe te = new DefaultTe();
         te.tunnels(tunnels);
 
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         data.addModelObject(te);
         DefaultDataTreeBuilder builder = new DefaultDataTreeBuilder(registry);
         rscData = builder.getResourceData(data.build());
@@ -1203,7 +1244,7 @@
         con.conIn(typedef);
         input.in(con);
 
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         data.addModelObject(input);
         rscData = treeBuilder.getResourceData(data.build());
 
@@ -1232,7 +1273,7 @@
         first.call(ll);
         output.outCh(first);
 
-        data = new DefaultModelObjectData.Builder();
+        data = new Builder();
         data.addModelObject(output);
         rscData = treeBuilder.getResourceData(data.build());
 
@@ -1252,4 +1293,394 @@
         node = inDn.get(0);
         validateDataNode(node, "output", ns, SINGLE_INSTANCE_NODE, true, null);
     }
+
+    /**
+     * Unit test for proper conversion of data types to data node.
+     */
+    @Test
+    public void processDataTypesToDataNode() {
+        setUp();
+        data = new Builder();
+        data = buildRootLeafAndLeafList(data);
+        data = buildContainer(data);
+        rscData = treeBuilder.getResourceData(data.build());
+
+        List<DataNode> inDn = rscData.dataNodes();
+        String ns = "yms:test:ytb:data:types";
+        Iterator<DataNode> it = inDn.iterator();
+
+        it = validate(it, ns);
+
+        DataNode cont1 = it.next();
+        validateDataNode(cont1, "cont1", ns, SINGLE_INSTANCE_NODE, true, null);
+
+        Map<NodeKey, DataNode> c1 = ((InnerNode) cont1).childNodes();
+        List<DataNode> cont1DN = new LinkedList<>();
+        for (Map.Entry<NodeKey, DataNode> c : c1.entrySet()) {
+            cont1DN.add(c.getValue());
+        }
+        Iterator<DataNode> it1 = cont1DN.iterator();
+        it1 = validate(it1, ns);
+
+        DataNode cont2 = it1.next();
+        validateDataNode(cont2, "cont2", ns, SINGLE_INSTANCE_NODE, true, null);
+
+        Map<NodeKey, DataNode> c2 = ((InnerNode) cont2).childNodes();
+        List<DataNode> cont2DN = new LinkedList<>();
+        for (Map.Entry<NodeKey, DataNode> c : c2.entrySet()) {
+            cont2DN.add(c.getValue());
+        }
+        Iterator<DataNode> it2 = cont2DN.iterator();
+        validate(it2, ns);
+    }
+
+    /**
+     * Validates the leaf and leaf-list value under the specified node.
+     *
+     * @param it data node iterator
+     * @param ns name space
+     * @return data node iterator
+     */
+    private Iterator<DataNode> validate(Iterator<DataNode> it, String ns) {
+
+        validateDataNode(it.next(), "leaf1", ns,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, true, "leaf1");
+        validateDataNode(it.next(), "leaf2", ns,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, true, "thousand");
+        validateDataNode(it.next(), "leaf3", ns,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, true, "11011");
+        validateDataNode(it.next(), "leaf4", ns,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, true, "thousand");
+        validateDataNode(it.next(), "leaf5", ns,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, true, "physical");
+        validateDataNode(it.next(), "leaf6", ns,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, true, "/cont1");
+        validateDataNode(it.next(), "leaf7", ns,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, true, "b1 b2");
+        validateDataNode(it.next(), "leaf8", ns,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, true, null);
+        validateDataNode(it.next(), "leaf9", ns,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, true, "b1 b2");
+        validateDataNode(it.next(), "leaf11", ns,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, true, null);
+        validateDataNode(it.next(), "leaf12", ns,
+                         SINGLE_INSTANCE_LEAF_VALUE_NODE, true, "11011");
+        validateDataNode(it.next(), "ll1", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "leaf-list1");
+        validateDataNode(it.next(), "ll1", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "leaf-list1-2");
+        validateDataNode(it.next(), "ll2", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "thousand");
+        validateDataNode(it.next(), "ll2", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "ten");
+        validateDataNode(it.next(), "ll3", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "11011");
+        validateDataNode(it.next(), "ll3", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "110111");
+        validateDataNode(it.next(), "ll4", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "thousand");
+        validateDataNode(it.next(), "ll4", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "ten");
+        validateDataNode(it.next(), "ll5", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "physical");
+        validateDataNode(it.next(), "ll5", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "virtual");
+        validateDataNode(it.next(), "ll6", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "/cont1");
+        validateDataNode(it.next(), "ll6", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "/cont1/cont2");
+        validateDataNode(it.next(), "ll7", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "b1 b2");
+        validateDataNode(it.next(), "ll7", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "b1 b2 b3");
+        validateDataNode(it.next(), "ll8", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, null);
+        validateDataNode(it.next(), "ll9", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "b1 b2");
+        validateDataNode(it.next(), "ll9", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "b1 b2 b3");
+        validateDataNode(it.next(), "ll11", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, null);
+        validateDataNode(it.next(), "ll12", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "11011");
+        validateDataNode(it.next(), "ll12", ns,
+                         MULTI_INSTANCE_LEAF_VALUE_NODE, true, "110111");
+        return it;
+    }
+
+    /**
+     * Builds the container node with required value and returns the model
+     * object data.
+     *
+     * @param data model object data
+     * @return model object data builder
+     */
+    private Builder buildContainer(Builder data) {
+        Cont2 cont2 = buildAugmentForCont2();
+        Def1Union union = new Def1Union(of(1000));
+        Def1 def1 = new Def1(union);
+        Def1Union union2 = new Def1Union(of(10));
+        Def1 def12 = new Def1(union2);
+        byte[] arr = Base64.getDecoder().decode("MTEwMTE=");
+        byte[] arr1 = Base64.getDecoder().decode("MTEwMTEx");
+        BitSet bits = new BitSet();
+        bits.set(0, 2, true);
+        BitSet bits1 = new BitSet();
+        bits1.set(0, 3, true);
+        Def2 def2 = new Def2(bits);
+        Def2 def21 = new Def2(bits1);
+        Def3 def3 = new Def3(false);
+        Def3 def31 = new Def3(true);
+        Cont1 cont1 = new DefaultCont1();
+        cont1.leaf1("leaf1");
+        cont1.leaf2(def1);
+        cont1.leaf3(arr);
+        cont1.leaf4(def1);
+        cont1.leaf5(Physical.class);
+        cont1.leaf6("/cont1");
+        cont1.leaf7(bits);
+        cont1.leaf8(true);
+        cont1.leaf9(def2);
+        cont1.leaf10(def3);
+        cont1.leaf11(true);
+        cont1.leaf12(arr);
+        cont1.addToLl1("leaf-list1");
+        cont1.addToLl1("leaf-list1-2");
+        cont1.addToLl2(def1);
+        cont1.addToLl2(def12);
+        cont1.addToLl3(arr);
+        cont1.addToLl3(arr1);
+        cont1.addToLl4(def1);
+        cont1.addToLl4(def12);
+        cont1.addToLl5(Physical.class);
+        cont1.addToLl5(Virtual.class);
+        cont1.addToLl6("/cont1");
+        cont1.addToLl6("/cont1/cont2");
+        cont1.addToLl7(bits);
+        cont1.addToLl7(bits1);
+        cont1.addToLl8(true);
+        cont1.addToLl8(false);
+        cont1.addToLl9(def2);
+        cont1.addToLl9(def21);
+        cont1.addToLl10(def3);
+        cont1.addToLl10(def31);
+        cont1.addToLl11(true);
+        cont1.addToLl11(true);
+        cont1.addToLl12(arr);
+        cont1.addToLl12(arr1);
+        cont1.cont2(cont2);
+        data.addModelObject((ModelObject) cont1);
+        return data;
+    }
+
+    /**
+     * Builds the augment node with required value and updates it in the
+     * container cont2.
+     *
+     * @return cont2
+     */
+    private Cont2 buildAugmentForCont2() {
+        Cont2 cont2 = new DefaultCont2();
+        AugmentedCont2 augC = new DefaultAugmentedCont2();
+        Def1Union union = new Def1Union(of(1000));
+        Def1 def1 = new Def1(union);
+        Def1Union union2 = new Def1Union(of(10));
+        Def1 def12 = new Def1(union2);
+        byte[] arr = Base64.getDecoder().decode("MTEwMTE=");
+        byte[] arr1 = Base64.getDecoder().decode("MTEwMTEx");
+        BitSet bits = new BitSet();
+        bits.set(0, 2, true);
+        BitSet bits1 = new BitSet();
+        bits1.set(0, 3, true);
+        Def2 def2 = new Def2(bits);
+        Def2 def21 = new Def2(bits1);
+        Def3 def3 = new Def3(false);
+        Def3 def31 = new Def3(true);
+        augC.leaf1("leaf1");
+        augC.leaf2(def1);
+        augC.leaf3(arr);
+        augC.leaf4(def1);
+        augC.leaf5(Physical.class);
+        augC.leaf6("/cont1");
+        augC.leaf7(bits);
+        augC.leaf8(true);
+        augC.leaf9(def2);
+        augC.leaf10(def3);
+        augC.leaf11(true);
+        augC.leaf12(arr);
+        augC.addToLl1("leaf-list1");
+        augC.addToLl1("leaf-list1-2");
+        augC.addToLl2(def1);
+        augC.addToLl2(def12);
+        augC.addToLl3(arr);
+        augC.addToLl3(arr1);
+        augC.addToLl4(def1);
+        augC.addToLl4(def12);
+        augC.addToLl5(Physical.class);
+        augC.addToLl5(Virtual.class);
+        augC.addToLl6("/cont1");
+        augC.addToLl6("/cont1/cont2");
+        augC.addToLl7(bits);
+        augC.addToLl7(bits1);
+        augC.addToLl8(true);
+        augC.addToLl8(false);
+        augC.addToLl9(def2);
+        augC.addToLl9(def21);
+        augC.addToLl10(def3);
+        augC.addToLl10(def31);
+        augC.addToLl11(true);
+        augC.addToLl11(true);
+        augC.addToLl12(arr);
+        augC.addToLl12(arr1);
+        cont2.addAugmentation((InnerModelObject) augC);
+        return cont2;
+    }
+
+    /**
+     * Builds the root leaf and leaf-list and adds it in the model object
+     * data builder.
+     *
+     * @param data model object data
+     * @return model object data builder
+     */
+    private Builder buildRootLeafAndLeafList(Builder data) {
+
+        data = addLeafModelObject(LEAF1, "leaf1", data);
+
+        Def1Union union = new Def1Union(of("thousand"));
+        Def1 def1 = new Def1(union);
+        data = addLeafModelObject(LEAF2, def1, data);
+
+        byte[] arr = Base64.getDecoder().decode("MTEwMTE=");
+        data = addLeafModelObject(LEAF3, arr, data);
+
+        data = addLeafModelObject(LEAF4, def1, data);
+
+        data = addLeafModelObject(LEAF5, Physical.class, data);
+
+        data = addLeafModelObject(LEAF6, "/cont1", data);
+
+        BitSet bits = new BitSet();
+        bits.set(0, 2, true);
+        data = addLeafModelObject(LEAF7, bits, data);
+
+        data = addLeafModelObject(LEAF8, true, data);
+
+        Def2 def2 = new Def2(bits);
+        data = addLeafModelObject(LEAF9, def2, data);
+
+        Def3 def3 = new Def3(false);
+        data = addLeafModelObject(LEAF10, def3, data);
+
+        data = addLeafModelObject(LEAF11, true, data);
+
+        data = addLeafModelObject(LEAF12, arr, data);
+
+        List<Object> objs = new LinkedList<>();
+        objs.add("leaf-list1");
+        objs.add("leaf-list1-2");
+        data = addLeafListModelObject(LL1, objs, data);
+
+        Def1Union union2 = new Def1Union(of("ten"));
+        Def1 def12 = new Def1(union2);
+        objs = new LinkedList<>();
+        objs.add(def1);
+        objs.add(def12);
+        data = addLeafListModelObject(LL2, objs, data);
+
+        byte[] arr1 = Base64.getDecoder().decode("MTEwMTEx");
+        objs = new LinkedList<>();
+        objs.add(arr);
+        objs.add(arr1);
+        data = addLeafListModelObject(LL3, objs, data);
+
+        objs = new LinkedList<>();
+        objs.add(def1);
+        objs.add(def12);
+        data = addLeafListModelObject(LL4, objs, data);
+
+        objs = new LinkedList<>();
+        objs.add(Physical.class);
+        objs.add(Virtual.class);
+        data = addLeafListModelObject(LL5, objs, data);
+
+        objs = new LinkedList<>();
+        objs.add("/cont1");
+        objs.add("/cont1/cont2");
+        data = addLeafListModelObject(LL6, objs, data);
+
+        BitSet bits2 = new BitSet();
+        bits2.set(0, 3, true);
+        objs = new LinkedList<>();
+        objs.add(bits);
+        objs.add(bits2);
+        data = addLeafListModelObject(LL7, objs, data);
+
+        objs = new LinkedList<>();
+        objs.add(true);
+        objs.add(false);
+        data = addLeafListModelObject(LL8, objs, data);
+
+        Def2 def21 = new Def2(bits2);
+        objs = new LinkedList<>();
+        objs.add(def2);
+        objs.add(def21);
+        data = addLeafListModelObject(LL9, objs, data);
+
+        Def3 def31 = new Def3(true);
+        objs = new LinkedList<>();
+        objs.add(def3);
+        objs.add(def31);
+        data = addLeafListModelObject(LL10, objs, data);
+
+        objs = new LinkedList<>();
+        objs.add(true);
+        objs.add(true);
+        data = addLeafListModelObject(LL11, objs, data);
+
+        objs = new LinkedList<>();
+        objs.add(arr);
+        objs.add(arr1);
+        data = addLeafListModelObject(LL12, objs, data);
+
+        return data;
+    }
+
+    /**
+     * Adds the leaf model object to the model object data builder with leaf
+     * value.
+     *
+     * @param lId    leaf identifier
+     * @param object leaf object
+     * @param data   model object data
+     * @return model object data builder
+     */
+    private Builder addLeafModelObject(LeafIdentifier lId, Object object,
+                                       Builder data) {
+        LeafModelObject obj = new LeafModelObject();
+        obj.leafIdentifier(lId);
+        obj.addValue(object);
+        data.addModelObject(obj);
+        return data;
+    }
+
+    /**
+     * Adds the leaf-list model objects to the model object data builder with
+     * leaf-list values.
+     *
+     * @param lId    leaf-list identifier
+     * @param object leaf-list object
+     * @param data   model object data
+     * @return model object data builder
+     */
+    private Builder addLeafListModelObject(LeafIdentifier lId,
+                                           List<Object> object, Builder data) {
+        LeafModelObject obj = new LeafModelObject();
+        obj.leafIdentifier(lId);
+        for (Object o : object) {
+            obj.addValue(o);
+        }
+        data.addModelObject(obj);
+        return data;
+    }
 }
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java
index 2e8c1f5..ceffa46 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/YobSimpleDataTypeTest.java
@@ -17,8 +17,8 @@
 package org.onosproject.yang.runtime.impl;
 
 import org.junit.Test;
-import org.onosproject.yang.gen.v1.simpledatatypesll.rev20131112.simpledatatypesll.DefaultCont1;
 import org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.DefaultCont;
+import org.onosproject.yang.gen.v1.simpledatatypesll.rev20131112.simpledatatypesll.DefaultCont1;
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.DefaultResourceData;
 import org.onosproject.yang.model.ModelObject;
@@ -29,8 +29,8 @@
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
-import static org.onosproject.yang.gen.v1.simpledatatypesll.rev20131112.simpledatatypesll.cont1.Lfenum1Enum.GRACE_PERIOD_EXPIRED;
 import static org.onosproject.yang.gen.v1.simpledatatypes.rev20131112.simpledatatypes.tpdfun0.Tpdfun0Enum.SUCCESSFUL_EXIT;
+import static org.onosproject.yang.gen.v1.simpledatatypesll.rev20131112.simpledatatypesll.cont1.Lfenum1Enum.GRACE_PERIOD_EXPIRED;
 import static org.onosproject.yang.runtime.SerializerHelper.addDataNode;
 import static org.onosproject.yang.runtime.SerializerHelper.exitDataNode;
 import static org.onosproject.yang.runtime.SerializerHelper.initializeDataNode;
@@ -40,10 +40,10 @@
  */
 public class YobSimpleDataTypeTest {
 
-    TestYangSerializerContext context = new TestYangSerializerContext();
     private static final String DATA_TYPE_NAME_SPACE = "simple:data:types";
     private static final String DATA_TYPE_NAME_SPACE_LL =
             "simple:data:types:ll";
+    TestYangSerializerContext context = new TestYangSerializerContext();
     private DataNode.Builder dBlr;
     private String value;
 
@@ -219,6 +219,11 @@
         value = "successful exit";
         dBlr = addDataNode(dBlr, "lfenum1", DATA_TYPE_NAME_SPACE, value, null);
         dBlr = exitDataNode(dBlr);
+
+        value = "/cont";
+        dBlr = addDataNode(dBlr, "inst-iden", null, value, null);
+        dBlr = exitDataNode(dBlr);
+
         dBlr = exitDataNode(dBlr);
         return dBlr.build();
     }
@@ -469,6 +474,7 @@
         assertThat(cont.lfunion14().toString(), is("one"));
         assertThat(cont.identityref1().getSimpleName(), is("Iden"));
         assertThat(cont.lfenum1().enumeration(), is(SUCCESSFUL_EXIT));
+        assertThat(cont.instIden(), is("/cont"));
     }
 
 
diff --git a/runtime/src/test/resources/yobTestYangFiles/simple-data-types.yang b/runtime/src/test/resources/yobTestYangFiles/simple-data-types.yang
index f6b64d2..599649f 100644
--- a/runtime/src/test/resources/yobTestYangFiles/simple-data-types.yang
+++ b/runtime/src/test/resources/yobTestYangFiles/simple-data-types.yang
@@ -267,5 +267,9 @@
     leaf lfenum1 {
         type tpdfun0;
     }
+
+    leaf inst-iden {
+        type instance-identifier;
+    }
   }
 }
diff --git a/runtime/src/test/resources/ytbTestYangFiles/YtbDataTypes.yang b/runtime/src/test/resources/ytbTestYangFiles/YtbDataTypes.yang
new file mode 100644
index 0000000..b966b8f
--- /dev/null
+++ b/runtime/src/test/resources/ytbTestYangFiles/YtbDataTypes.yang
@@ -0,0 +1,413 @@
+module YtbDataTypes {
+    yang-version 1;
+    namespace "yms:test:ytb:data:types";
+    prefix "data-types";
+    revision "2016-08-26";
+    // Enum with all combinations.
+
+    typedef def1 {
+        type union {
+            type uint64;
+            type enumeration {
+                enum ten {
+                    value "10";
+                }
+                enum hundred {
+                    value "100";
+                }
+                enum thousand {
+                    value "1000";
+                }
+            }
+        }
+    }
+
+    typedef def2 {
+        type bits {
+            bit b1;
+            bit b2;
+            bit b3;
+        }
+    }
+
+    typedef def3 {
+        type empty;
+    }
+
+    typedef def4 {
+        type empty;
+    }
+
+    typedef def5 {
+        type leafref {
+            path "/leaf3";
+        }
+    }
+
+    identity type {
+        description "type value";
+    }
+
+    identity physical {
+        base type;
+    }
+
+    identity virtual {
+        base type;
+    }
+
+    leaf leaf1 {
+        type string;
+    }
+
+    leaf leaf2 {
+        type def1;
+    }
+
+    leaf leaf3 {
+        type binary;
+    }
+
+    leaf leaf4 {
+        type leafref {
+            path "/leaf2";
+        }
+    }
+
+    leaf leaf5 {
+        type identityref {
+            base type;
+        }
+    }
+
+    leaf leaf6 {
+        type instance-identifier;
+    }
+
+    leaf leaf7 {
+        type bits {
+            bit b1;
+            bit b2;
+            bit b3;
+        }
+    }
+
+    leaf leaf8 {
+        type empty;
+    }
+
+    leaf leaf9 {
+        type def2;
+    }
+
+    leaf leaf10 {
+        type def3;
+    }
+
+    leaf leaf11 {
+        type leafref {
+            path "/leaf8";
+        }
+    }
+
+    leaf leaf12 {
+        type def5;
+    }
+
+    container cont1 {
+        leaf leaf1 {
+            type string;
+        }
+
+        leaf leaf2 {
+            type def1;
+        }
+
+        leaf leaf3 {
+            type binary;
+        }
+
+        leaf leaf4 {
+            type leafref {
+                path "/leaf2";
+            }
+        }
+
+        leaf leaf5 {
+            type identityref {
+                base type;
+            }
+        }
+
+        leaf leaf6 {
+            type instance-identifier;
+        }
+
+        leaf leaf7 {
+            type bits {
+                bit b1;
+                bit b2;
+                bit b3;
+            }
+        }
+
+        leaf leaf8 {
+            type empty;
+        }
+
+        leaf leaf9 {
+            type def2;
+        }
+
+        leaf leaf10 {
+            type def3;
+        }
+
+        leaf leaf11 {
+            type leafref {
+                path "/leaf8";
+            }
+        }
+
+        leaf leaf12 {
+            type def5;
+        }
+
+        leaf-list ll1 {
+            type string;
+        }
+
+        leaf-list ll2 {
+            type def1;
+        }
+
+        leaf-list ll3 {
+            type binary;
+        }
+
+        leaf-list ll4 {
+            type leafref {
+                path "/ll2";
+            }
+        }
+
+        leaf-list ll5 {
+            type identityref {
+                base type;
+            }
+        }
+
+        leaf-list ll6 {
+            type instance-identifier;
+        }
+
+        leaf-list ll7 {
+            type bits {
+                bit b1;
+                bit b2;
+                bit b3;
+            }
+        }
+
+        leaf-list ll8 {
+            type empty;
+        }
+
+        leaf-list ll9 {
+            type def2;
+        }
+
+        leaf-list ll10 {
+            type def3;
+        }
+
+        leaf-list ll11 {
+            type leafref {
+                path "/ll8";
+            }
+        }
+
+        leaf-list ll12 {
+            type def5;
+        }
+
+        container cont2 {
+        }
+    }
+
+    leaf-list ll1 {
+        type string;
+    }
+
+    leaf-list ll2 {
+        type def1;
+    }
+
+    leaf-list ll3 {
+        type binary;
+    }
+
+    leaf-list ll4 {
+        type leafref {
+            path "/ll2";
+        }
+    }
+
+    leaf-list ll5 {
+        type identityref {
+            base type;
+        }
+    }
+
+    leaf-list ll6 {
+        type instance-identifier;
+    }
+
+    leaf-list ll7 {
+        type bits {
+            bit b1;
+            bit b2;
+            bit b3;
+        }
+    }
+
+    leaf-list ll8 {
+        type empty;
+    }
+
+    leaf-list ll9 {
+        type def2;
+    }
+
+    leaf-list ll10 {
+        type def3;
+    }
+
+    leaf-list ll11 {
+        type leafref {
+            path "/ll8";
+        }
+    }
+
+    leaf-list ll12 {
+        type def5;
+    }
+
+    augment "/cont1/cont2" {
+        leaf leaf1 {
+            type string;
+        }
+
+        leaf leaf2 {
+            type def1;
+        }
+
+        leaf leaf3 {
+            type binary;
+        }
+
+        leaf leaf4 {
+            type leafref {
+                path "/leaf2";
+            }
+        }
+
+        leaf leaf5 {
+            type identityref {
+                base type;
+            }
+        }
+
+        leaf leaf6 {
+            type instance-identifier;
+        }
+
+        leaf leaf7 {
+            type bits {
+                bit b1;
+                bit b2;
+                bit b3;
+            }
+        }
+
+        leaf leaf8 {
+            type empty;
+        }
+
+        leaf leaf9 {
+            type def2;
+        }
+
+        leaf leaf10 {
+            type def3;
+        }
+
+        leaf leaf11 {
+            type leafref {
+                path "/leaf8";
+            }
+        }
+
+        leaf leaf12 {
+            type def5;
+        }
+
+        leaf-list ll1 {
+            type string;
+        }
+
+        leaf-list ll2 {
+            type def1;
+        }
+
+        leaf-list ll3 {
+            type binary;
+        }
+
+        leaf-list ll4 {
+            type leafref {
+                path "/ll2";
+            }
+        }
+
+        leaf-list ll5 {
+            type identityref {
+                base type;
+            }
+        }
+
+        leaf-list ll6 {
+            type instance-identifier;
+        }
+
+        leaf-list ll7 {
+            type bits {
+                bit b1;
+                bit b2;
+                bit b3;
+            }
+        }
+
+        leaf-list ll8 {
+            type empty;
+        }
+
+        leaf-list ll9 {
+            type def2;
+        }
+
+        leaf-list ll10 {
+            type def3;
+        }
+
+        leaf-list ll11 {
+            type leafref {
+                path "/ll8";
+            }
+        }
+
+        leaf-list ll12 {
+            type def5;
+        }
+    }
+}