package com.thinkbiganalytics.spark.validation; /*- * #%L * thinkbig-spark-validate-cleanse-api * %% * Copyright (C) 2017 ThinkBig Analytics * %% * 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. * #L% */ import org.apache.commons.lang3.StringUtils; import org.junit.Test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class HCatDataTypeTest { @Test public void testIsValueConvertibleToIntType() throws Exception { HCatDataType intType = HCatDataType.getDataTypes().get("int"); assertTrue(intType.isValueConvertibleToType("0")); assertTrue(intType.isValueConvertibleToType(Integer.MAX_VALUE + "")); assertTrue(intType.isValueConvertibleToType(Integer.MIN_VALUE + "")); assertTrue(intType.isValueConvertibleToType(null)); assertTrue(intType.isValueConvertibleToType("")); assertFalse(intType.isValueConvertibleToType("21.1")); assertFalse(intType.isValueConvertibleToType("-20.001")); assertFalse(intType.isValueConvertibleToType(Long.MAX_VALUE + "")); } @Test public void testIsValueConvertibleToSmallIntType() throws Exception { HCatDataType smallintType = HCatDataType.getDataTypes().get("smallint"); assertTrue(smallintType.isValueConvertibleToType("0")); assertTrue(smallintType.isValueConvertibleToType(Short.MAX_VALUE + "")); assertTrue(smallintType.isValueConvertibleToType(Short.MIN_VALUE + "")); assertTrue(smallintType.isValueConvertibleToType(null)); assertTrue(smallintType.isValueConvertibleToType("")); assertFalse(smallintType.isValueConvertibleToType("21.1")); assertFalse(smallintType.isValueConvertibleToType("-20.001")); assertFalse(smallintType.isValueConvertibleToType(Integer.MAX_VALUE + "")); } @Test public void testIsValueConvertibleToTinyIntType() throws Exception { HCatDataType type = HCatDataType.getDataTypes().get("tinyint"); assertTrue(type.isValueConvertibleToType("0")); assertTrue(type.isValueConvertibleToType("127")); assertTrue(type.isValueConvertibleToType("-128")); assertTrue(type.isValueConvertibleToType(null)); assertTrue(type.isValueConvertibleToType("")); assertFalse(type.isValueConvertibleToType("21.1")); assertFalse(type.isValueConvertibleToType("-20.001")); assertFalse(type.isValueConvertibleToType(Integer.MAX_VALUE + "")); } @Test public void testIsValueConvertibleToDecimalType() throws Exception { HCatDataType type = HCatDataType.getDataTypes().get("decimal"); assertTrue(type.isValueConvertibleToType("0")); assertTrue(type.isValueConvertibleToType("12712")); assertTrue(type.isValueConvertibleToType("-12812")); assertTrue(type.isValueConvertibleToType("-12812.204154")); assertTrue(type.isValueConvertibleToType("-12812.1234")); assertTrue(type.isValueConvertibleToType("-128.12E8")); assertTrue(type.isValueConvertibleToType(null)); assertTrue(type.isValueConvertibleToType("")); assertFalse(type.isValueConvertibleToType("No number")); } @Test public void testIsValueConvertibleToDecimalPrecisionType() throws Exception { HCatDataType type = HCatDataType.createFromDataType("mydecimal", "decimal(3,2)"); assertTrue(type.isValueConvertibleToType("0")); assertTrue(type.isValueConvertibleToType("999")); assertTrue(type.isValueConvertibleToType("-999")); assertTrue(type.isValueConvertibleToType("999.99")); assertTrue(type.isValueConvertibleToType("-128.20")); assertTrue(type.isValueConvertibleToType(null)); assertTrue(type.isValueConvertibleToType("")); assertFalse(type.isValueConvertibleToType("-1000")); assertFalse(type.isValueConvertibleToType("5.123", true)); assertTrue(type.isValueConvertibleToType("5.123", false)); assertFalse(type.isValueConvertibleToType("No number")); } @Test public void testIsValueConvertibleToDecimalPrecisionType2() throws Exception { HCatDataType type = HCatDataType.createFromDataType("mydecimal", "decimal(3,0)"); assertTrue(type.isValueConvertibleToType("0")); assertTrue(type.isValueConvertibleToType("999")); assertTrue(type.isValueConvertibleToType("-999")); assertTrue(type.isValueConvertibleToType("-128.0")); assertFalse(type.isValueConvertibleToType("999.9")); assertTrue(type.isValueConvertibleToType(null)); assertTrue(type.isValueConvertibleToType("")); assertFalse(type.isValueConvertibleToType("No number")); } @Test public void testIsValueConvertibleToChar() throws Exception { HCatDataType type = HCatDataType.getDataTypes().get("char"); assertTrue(type.isValueConvertibleToType("mystring")); assertTrue(type.isValueConvertibleToType("99999")); assertTrue(type.isValueConvertibleToType("-999")); assertTrue(type.isValueConvertibleToType(null)); assertTrue(type.isValueConvertibleToType("")); assertTrue(type.isValueConvertibleToType(StringUtils.leftPad("X", 255))); assertFalse(type.isValueConvertibleToType(StringUtils.leftPad("X", 256))); } @Test public void testIsValueConvertibleToBigDecimal() throws Exception { HCatDataType type = HCatDataType.getDataTypes().get("decimal"); assertTrue(type.isValueConvertibleToType("0")); assertTrue(type.isValueConvertibleToType(Double.MAX_VALUE + "")); assertTrue(type.isValueConvertibleToType("12712")); assertTrue(type.isValueConvertibleToType("-12812")); assertTrue(type.isValueConvertibleToType("-12812.204154")); assertTrue(type.isValueConvertibleToType("-12812.1234")); assertTrue(type.isValueConvertibleToType("-128.12E8")); assertTrue(type.isValueConvertibleToType(null)); assertTrue(type.isValueConvertibleToType("")); assertFalse(type.isValueConvertibleToType("No number")); } @Test public void testIsValueConvertibleToBigInteger() throws Exception { HCatDataType type = HCatDataType.getDataTypes().get("bigint"); assertTrue(type.isValueConvertibleToType("0")); assertTrue(type.isValueConvertibleToType(Long.MAX_VALUE + "")); assertTrue(type.isValueConvertibleToType(Long.MIN_VALUE + "")); assertTrue(type.isValueConvertibleToType(null)); assertTrue(type.isValueConvertibleToType("")); assertFalse(type.isValueConvertibleToType("21.1")); assertFalse(type.isValueConvertibleToType("-20.001")); } @Test public void testIsValueConvertibletoDate() throws Exception { HCatDataType type = HCatDataType.createFromDataType("mydate", "date"); assertTrue(type.isValueConvertibleToType("2016-05-10")); assertFalse(type.isValueConvertibleToType("05-10-2015")); } @Test public void testIsValueConvertibletoTS() throws Exception { HCatDataType type = HCatDataType.createFromDataType("myts", "timestamp"); assertTrue(type.isValueConvertibleToType("2015-01-15 11:10:20.333")); assertTrue(type.isValueConvertibleToType("2015-01-15 11:10:20")); assertTrue(type.isValueConvertibleToType("2015-01-15 11:10:20.333444555")); assertFalse(type.isValueConvertibleToType("2015/01/15 11:10:20")); assertFalse(type.isValueConvertibleToType("2016-05-10")); assertFalse(type.isValueConvertibleToType("05-10-2015")); } @Test public void testDecimalType() throws Exception { HCatDataType decimalType = HCatDataType.createFromDataType("decimal_type", "decimal(10,3)"); boolean valid = decimalType.isValueConvertibleToType("29.3456"); assertTrue(valid); } }