Repository: atlas Updated Branches: refs/heads/master 4820a20b1 -> 15d67e52f
http://git-wip-us.apache.org/repos/asf/atlas/blob/15d67e52/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipDefStoreV1Test.java ---------------------------------------------------------------------- diff --git a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipDefStoreV1Test.java b/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipDefStoreV1Test.java new file mode 100644 index 0000000..59bedd1 --- /dev/null +++ b/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipDefStoreV1Test.java @@ -0,0 +1,330 @@ +/** + * 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.repository.store.graph.v1; + +import com.google.inject.Inject; +import org.apache.atlas.ApplicationProperties; +import org.apache.atlas.AtlasErrorCode; +import org.apache.atlas.AtlasException; +import org.apache.atlas.TestModules; +import org.apache.atlas.exception.AtlasBaseException; +import org.apache.atlas.model.typedef.AtlasRelationshipDef; +import org.apache.atlas.model.typedef.AtlasRelationshipEndDef; +import org.apache.atlas.model.typedef.AtlasStructDef; +import org.apache.atlas.repository.graph.AtlasGraphProvider; +import org.apache.atlas.type.AtlasTypeUtil; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; + +import static org.testng.AssertJUnit.fail; + +/** + * Tests for AtlasRelationshipStoreV1 + */ +@Guice(modules = TestModules.TestOnlyModule.class) +public class AtlasRelationshipDefStoreV1Test { + + @Inject + private + AtlasRelationshipDefStoreV1 relationshipDefStore; + + @DataProvider + public Object[][] invalidAttributeNameWithReservedKeywords(){ + AtlasRelationshipDef invalidAttrNameType = + AtlasTypeUtil.createRelationshipTypeDef("Invalid_Attribute_Type", "description","" , + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.BOTH, + new AtlasRelationshipEndDef("typeA", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeB", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("order", "string"), + AtlasTypeUtil.createRequiredAttrDef("limit", "string")); + + return new Object[][] {{ + invalidAttrNameType + }}; + } + @DataProvider + public Object[][] updateValidProperties(){ + AtlasRelationshipDef existingType = + AtlasTypeUtil.createRelationshipTypeDef("basicType", "description","0" , + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.ONE_TO_TWO, + new AtlasRelationshipEndDef("typeC", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeD", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + AtlasRelationshipDef newType = + AtlasTypeUtil.createRelationshipTypeDef("basicType", + "description1", // updated + "1" , // updated + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.BOTH, // updated + new AtlasRelationshipEndDef("typeC", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeD", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + + + return new Object[][] {{ + existingType, + newType + }}; + } + + + @DataProvider + public Object[][] updateRename(){ + AtlasRelationshipDef existingType = + AtlasTypeUtil.createRelationshipTypeDef("basicType", "description","" , + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.BOTH, + new AtlasRelationshipEndDef("typeC", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeD", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + AtlasRelationshipDef newType = + AtlasTypeUtil.createRelationshipTypeDef("basicType2", "description","" , + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.BOTH, + new AtlasRelationshipEndDef("typeC", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeD", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + + + return new Object[][] {{ + existingType, + newType + }}; + } + @DataProvider + public Object[][] updateRelCat(){ + AtlasRelationshipDef existingType = + AtlasTypeUtil.createRelationshipTypeDef("basicType", "description","" , + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.BOTH, + new AtlasRelationshipEndDef("typeC", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeD", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + AtlasRelationshipDef newType = + AtlasTypeUtil.createRelationshipTypeDef("basicType", "description","" , + AtlasRelationshipDef.RelationshipCategory.AGGREGATION, + AtlasRelationshipDef.PropagateTags.BOTH, + new AtlasRelationshipEndDef("typeC", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeD", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + + + return new Object[][] {{ + existingType, + newType + }}; + } + @DataProvider + public Object[][] updateEnd1(){ + AtlasRelationshipDef existingType = + AtlasTypeUtil.createRelationshipTypeDef("basicType", "description","" , + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.BOTH, + new AtlasRelationshipEndDef("typeC", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeD", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + AtlasRelationshipDef changeType = + AtlasTypeUtil.createRelationshipTypeDef("basicType", "description","" , + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.BOTH, + new AtlasRelationshipEndDef("typeE", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeD", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + AtlasRelationshipDef changeAttr = + AtlasTypeUtil.createRelationshipTypeDef("basicType", "description","" , + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.BOTH, + new AtlasRelationshipEndDef("typeC", "attr2", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeD", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + AtlasRelationshipDef changeCardinality = + AtlasTypeUtil.createRelationshipTypeDef("basicType", "description","" , + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.BOTH, + new AtlasRelationshipEndDef("typeC", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.LIST), + new AtlasRelationshipEndDef("typeD", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + + + return new Object[][]{ + { + existingType, + changeType + }, + { + existingType, + changeAttr + }, + { + existingType, + changeCardinality + } + }; + } + @DataProvider + public Object[][] updateEnd2(){ + AtlasRelationshipDef existingType = + AtlasTypeUtil.createRelationshipTypeDef("basicType", "description","" , + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.BOTH, + new AtlasRelationshipEndDef("typeC", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeD", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + + AtlasRelationshipDef changeType = + AtlasTypeUtil.createRelationshipTypeDef("basicType", "description","" , + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.BOTH, + new AtlasRelationshipEndDef("typeC", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeE", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + AtlasRelationshipDef changeAttr = + AtlasTypeUtil.createRelationshipTypeDef("basicType", "description","" , + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.BOTH, + new AtlasRelationshipEndDef("typeC", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeD", "attr2", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + AtlasRelationshipDef changeCardinality = + AtlasTypeUtil.createRelationshipTypeDef("basicType", "description","" , + AtlasRelationshipDef.RelationshipCategory.ASSOCIATION, + AtlasRelationshipDef.PropagateTags.BOTH, + new AtlasRelationshipEndDef("typeC", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE), + new AtlasRelationshipEndDef("typeD", "attr1", AtlasStructDef.AtlasAttributeDef.Cardinality.LIST), + + AtlasTypeUtil.createRequiredAttrDef("aaaa", "string"), + AtlasTypeUtil.createRequiredAttrDef("bbbb", "string")); + + + return new Object[][]{ + { + existingType, + changeType + }, + { + existingType, + changeAttr + }, + { + existingType, + changeCardinality + } + }; + } + + @Test(dataProvider = "invalidAttributeNameWithReservedKeywords") + public void testCreateTypeWithReservedKeywords(AtlasRelationshipDef atlasRelationshipDef) throws AtlasException { + try { + ApplicationProperties.get().setProperty(AtlasAbstractDefStoreV1.ALLOW_RESERVED_KEYWORDS, false); + relationshipDefStore.create(atlasRelationshipDef, null); + } catch (AtlasBaseException e) { + Assert.assertEquals(e.getAtlasErrorCode(), AtlasErrorCode.ATTRIBUTE_NAME_INVALID); + } + } + + @Test(dataProvider = "updateValidProperties") + public void testupdateVertexPreUpdatepropagateTags(AtlasRelationshipDef existingRelationshipDef,AtlasRelationshipDef newRelationshipDef) throws AtlasBaseException { + AtlasRelationshipDefStoreV1.preUpdateCheck(existingRelationshipDef,newRelationshipDef); + } + + @Test(dataProvider = "updateRename") + public void testupdateVertexPreUpdateRename(AtlasRelationshipDef existingRelationshipDef,AtlasRelationshipDef newRelationshipDef) { + + try { + AtlasRelationshipDefStoreV1.preUpdateCheck(existingRelationshipDef,newRelationshipDef); + fail("expected error"); + } catch (AtlasBaseException e) { + if (!e.getAtlasErrorCode().equals(AtlasErrorCode.RELATIONSHIPDEF_INVALID_NAME_UPDATE)){ + fail("unexpected AtlasErrorCode "+e.getAtlasErrorCode()); + } + } + } + @Test(dataProvider = "updateRelCat") + public void testupdateVertexPreUpdateRelcat(AtlasRelationshipDef existingRelationshipDef,AtlasRelationshipDef newRelationshipDef) { + + try { + AtlasRelationshipDefStoreV1.preUpdateCheck(existingRelationshipDef,newRelationshipDef); + fail("expected error"); + } catch (AtlasBaseException e) { + if (!e.getAtlasErrorCode().equals(AtlasErrorCode.RELATIONSHIPDEF_INVALID_CATEGORY_UPDATE)){ + fail("unexpected AtlasErrorCode "+e.getAtlasErrorCode()); + } + } + } + @Test(dataProvider = "updateEnd1") + public void testupdateVertexPreUpdateEnd1(AtlasRelationshipDef existingRelationshipDef,AtlasRelationshipDef newRelationshipDef) { + + try { + AtlasRelationshipDefStoreV1.preUpdateCheck(existingRelationshipDef,newRelationshipDef); + fail("expected error"); + } catch (AtlasBaseException e) { + if (!e.getAtlasErrorCode().equals(AtlasErrorCode.RELATIONSHIPDEF_INVALID_END1_UPDATE)){ + fail("unexpected AtlasErrorCode "+e.getAtlasErrorCode()); + } + } + } + + @Test(dataProvider = "updateEnd2") + public void testupdateVertexPreUpdateEnd2(AtlasRelationshipDef existingRelationshipDef,AtlasRelationshipDef newRelationshipDef) { + + try { + AtlasRelationshipDefStoreV1.preUpdateCheck(existingRelationshipDef,newRelationshipDef); + fail("expected error"); + } catch (AtlasBaseException e) { + if (!e.getAtlasErrorCode().equals(AtlasErrorCode.RELATIONSHIPDEF_INVALID_END2_UPDATE)){ + fail("unexpected AtlasErrorCode "+e.getAtlasErrorCode()); + } + } + } + @AfterClass + public void clear(){ + AtlasGraphProvider.cleanup(); + } +}
