diff --git a/compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/CheckValidationTest.java b/compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/CheckValidationTest.java
index 1827aba..a442189 100644
--- a/compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/CheckValidationTest.java
+++ b/compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/CheckValidationTest.java
@@ -21,13 +21,12 @@
 import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangUint16;
 import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangUint32;
 import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangUint64;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangUint8;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
 import static org.junit.Assert.assertEquals;
-import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangInt8.MAX_VALUE;
-import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangInt8.MIN_VALUE;
 
 /**
  * Utility class to check error messages.
@@ -35,8 +34,6 @@
 final class CheckValidationTest {
     private static final String E_MESS = "Exception has not occurred for " +
             "invalid value with type ";
-    private static boolean expOccurred;
-
     private CheckValidationTest() {
     }
 
@@ -48,6 +45,7 @@
      */
     static void dataValidation(YangType node, String value)
             throws DataModelException {
+        boolean expOccurred = false;
         YangDataTypes type = node.getDataType();
         try {
             node.isValidValue(value);
@@ -66,6 +64,7 @@
      */
     static void rangeCheck(YangType node, String value)
             throws DataModelException {
+        boolean expOccurred = false;
         YangDataTypes type = node.getDataType();
         try {
             node.isValidValue(value);
@@ -88,16 +87,16 @@
         StringBuilder msg = new StringBuilder();
         switch (type) {
             case UINT8:
-                if (Integer.valueOf(value) < MIN_VALUE) {
+                if (Integer.valueOf(value) < YangUint8.MIN_VALUE) {
                     msg.append("YANG file error : ")
                             .append(value)
                             .append(" is lesser than minimum value ")
-                            .append(MIN_VALUE).append(".");
-                } else if (Integer.valueOf(value) > MAX_VALUE) {
+                            .append(YangUint8.MIN_VALUE).append(".");
+                } else if (Integer.valueOf(value) > YangUint8.MAX_VALUE) {
                     msg.append("YANG file error : ")
                             .append(value)
                             .append(" is greater than maximum value ")
-                            .append(MAX_VALUE).append(".");
+                            .append(YangUint8.MAX_VALUE).append(".");
                 }
                 break;
             case UINT16:
@@ -194,6 +193,7 @@
             case BINARY:
             case STRING:
             case BOOLEAN:
+            case UNION:
                 msg.append("YANG file error : Input value ").append("\"")
                         .append(value).append("\"")
                         .append(" is not a valid ").append(dataType);
diff --git a/compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/DataValidator.java b/compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/DataValidator.java
index 5d6ac49..2fe012b 100644
--- a/compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/DataValidator.java
+++ b/compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/DataValidator.java
@@ -17,6 +17,8 @@
 
 import org.junit.Test;
 import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangInt8;
 
 import static org.onosproject.yang.compiler.datamodel.CheckValidationTest.dataValidation;
 import static org.onosproject.yang.compiler.datamodel.CheckValidationTest.rangeCheck;
@@ -207,10 +209,12 @@
 
         YangType<?> newNode = new YangType<>();
         newNode.setDataType(BINARY);
-        dataValidation(newNode, "  ");
+        dataValidation(newNode, "");
     }
 
-   /* TODO: need to verify .
+    /**
+     * Creating nodes of type ENUMERATION and testing the data validation.
+     */
     @Test
     public void negativeEnum() throws DataModelException {
 
@@ -218,12 +222,11 @@
         newNode.setDataType(YangDataTypes.ENUMERATION);
         YangEnum enum1 = new YangEnum();
         enum1.setNamedValue("sample1");
-
+        enum1.setValue(10);
         YangEnum enum2 = new YangEnum();
         enum2.setNamedValue("sample2");
         enum2.setValue(20);
-
-        YangEnumeration YEnumeration = new YangEnumeration() {
+        YangEnumeration yEnumeration = new YangEnumeration() {
             @Override
             public String getJavaPackage() {
                 return null;
@@ -239,19 +242,21 @@
                 return null;
             }
         };
-        YEnumeration.addEnumInfo(enum1);
-        YEnumeration.addEnumInfo(enum2);
-        newNode.setDataTypeExtendedInfo(YEnumeration);
-        dataValidation(newNode," ");
-        dataValidation(newNode,"123");
-        dataValidation(newNode,"sample1");
+        yEnumeration.addEnumInfo(enum1);
+        yEnumeration.addEnumInfo(enum2);
+        newNode.setDataTypeExtendedInfo(yEnumeration);
+        dataValidation(newNode, " ");
+        dataValidation(newNode, "123");
     }
 
+    /**
+     * Creating nodes of type UNION and testing the data validation.
+     */
     @Test
     public void negativeUnion() throws DataModelException {
-        YangType<?> newNode = new YangType<>();
+
+        YangType<YangUnion> newNode = new YangType<>();
         newNode.setDataType(YangDataTypes.UNION);
-        List<YangType<?>> list = new LinkedList<>();
         YangUnion union = new YangUnion() {
             @Override
             public String getJavaPackage() {
@@ -268,13 +273,14 @@
                 return null;
             }
         };
-        YangUnion YUnion = union;
         YangType<YangInt8> typeInt1 = new YangType<>();
+        typeInt1.setDataType(INT8);
         YangType<YangDecimal64> typeInt2 = new YangType<>();
-        YUnion.addType(typeInt1);
-        YUnion.addType(typeInt2);
-        //  newNode.setDataTypeExtendedInfo(YUnion);
-        dataValidation(newNode,"INT8");
+        typeInt2.setDataType(BOOLEAN);
+        union.addType(typeInt1);
+        union.addType(typeInt2);
+        newNode.setDataTypeExtendedInfo(union);
+        dataValidation(newNode, "abcd");
+        dataValidation(newNode, "-129");
     }
-    */
 }
