/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.atlas.type; import java.util.*; import org.apache.atlas.exception.AtlasBaseException; import org.apache.atlas.model.ModelTestUtil; import org.apache.atlas.model.instance.AtlasClassification; import org.apache.atlas.model.typedef.AtlasBaseTypeDef; import org.apache.atlas.model.typedef.AtlasClassificationDef; import org.testng.annotations.Test; import static org.testng.Assert.*; public class TestAtlasClassificationType { private final AtlasClassificationType classificationType; private final List<Object> validValues = new ArrayList<>(); private final List<Object> invalidValues = new ArrayList<>(); { classificationType = getClassificationType(ModelTestUtil.getClassificationDefWithSuperTypes()); AtlasClassification invalidValue1 = classificationType.createDefaultValue(); AtlasClassification invalidValue2 = classificationType.createDefaultValue(); Map<String, Object> invalidValue3 = classificationType.createDefaultValue().getAttributes(); // invalid value for int invalidValue1.setAttribute(ModelTestUtil.getDefaultAttributeName(AtlasBaseTypeDef.ATLAS_TYPE_INT), "xyz"); // invalid value for date invalidValue2.setAttribute(ModelTestUtil.getDefaultAttributeName(AtlasBaseTypeDef.ATLAS_TYPE_DATE), "xyz"); // invalid value for bigint invalidValue3.put(ModelTestUtil.getDefaultAttributeName(AtlasBaseTypeDef.ATLAS_TYPE_BIGINTEGER), "xyz"); validValues.add(null); validValues.add(classificationType.createDefaultValue()); validValues.add(classificationType.createDefaultValue().getAttributes()); // Map<String, Object> invalidValues.add(invalidValue1); invalidValues.add(invalidValue2); invalidValues.add(invalidValue3); invalidValues.add(new AtlasClassification()); // no values for mandatory attributes invalidValues.add(new HashMap<>()); // no values for mandatory attributes invalidValues.add(1); // incorrect datatype invalidValues.add(new HashSet()); // incorrect datatype invalidValues.add(new ArrayList()); // incorrect datatype invalidValues.add(new String[] {}); // incorrect datatype } @Test public void testClassificationTypeDefaultValue() { AtlasClassification defValue = classificationType.createDefaultValue(); assertNotNull(defValue); assertEquals(defValue.getTypeName(), classificationType.getTypeName()); } @Test public void testClassificationTypeIsValidValue() { for (Object value : validValues) { assertTrue(classificationType.isValidValue(value), "value=" + value); } for (Object value : invalidValues) { assertFalse(classificationType.isValidValue(value), "value=" + value); } } @Test public void testClassificationTypeGetNormalizedValue() { assertNull(classificationType.getNormalizedValue(null), "value=" + null); for (Object value : validValues) { if (value == null) { continue; } Object normalizedValue = classificationType.getNormalizedValue(value); assertNotNull(normalizedValue, "value=" + value); } for (Object value : invalidValues) { assertNull(classificationType.getNormalizedValue(value), "value=" + value); } } @Test public void testClassificationTypeValidateValue() { List<String> messages = new ArrayList<>(); for (Object value : validValues) { assertTrue(classificationType.validateValue(value, "testObj", messages)); assertEquals(messages.size(), 0, "value=" + value); } for (Object value : invalidValues) { assertFalse(classificationType.validateValue(value, "testObj", messages)); assertTrue(messages.size() > 0, "value=" + value); messages.clear(); } } private static AtlasClassificationType getClassificationType(AtlasClassificationDef classificationDef) { try { return new AtlasClassificationType(classificationDef, ModelTestUtil.getTypesRegistry()); } catch (AtlasBaseException excp) { return null; } } }