You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ma...@apache.org on 2017/11/05 20:31:43 UTC
[21/40] atlas git commit: ATLAS-2251: Remove TypeSystem and related
implementation, to avoid unncessary duplicate of type details in cache
http://git-wip-us.apache.org/repos/asf/atlas/blob/0877e47c/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedMetadataRepositoryTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedMetadataRepositoryTest.java b/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedMetadataRepositoryTest.java
deleted file mode 100755
index da6fa75..0000000
--- a/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedMetadataRepositoryTest.java
+++ /dev/null
@@ -1,915 +0,0 @@
-/**
- * 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.graph;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.CreateUpdateEntitiesResult;
-import org.apache.atlas.RequestContext;
-import org.apache.atlas.TestModules;
-import org.apache.atlas.TestUtils;
-import org.apache.atlas.annotation.GraphTransaction;
-import org.apache.atlas.discovery.graph.GraphBackedDiscoveryService;
-import org.apache.atlas.query.QueryParams;
-import org.apache.atlas.repository.Constants;
-import org.apache.atlas.repository.MetadataRepository;
-import org.apache.atlas.repository.RepositoryException;
-import org.apache.atlas.repository.graphdb.AtlasEdge;
-import org.apache.atlas.repository.graphdb.AtlasEdgeDirection;
-import org.apache.atlas.repository.graphdb.AtlasGraph;
-import org.apache.atlas.repository.graphdb.AtlasGraphQuery;
-import org.apache.atlas.repository.graphdb.AtlasGraphQuery.ComparisionOperator;
-import org.apache.atlas.repository.graphdb.AtlasVertex;
-import org.apache.atlas.type.AtlasTypeRegistry;
-import org.apache.atlas.typesystem.IStruct;
-import org.apache.atlas.typesystem.ITypedReferenceableInstance;
-import org.apache.atlas.typesystem.ITypedStruct;
-import org.apache.atlas.typesystem.Referenceable;
-import org.apache.atlas.typesystem.Struct;
-import org.apache.atlas.typesystem.exception.EntityNotFoundException;
-import org.apache.atlas.typesystem.exception.TraitNotFoundException;
-import org.apache.atlas.typesystem.persistence.AtlasSystemAttributes;
-import org.apache.atlas.typesystem.persistence.Id;
-import org.apache.atlas.typesystem.types.AttributeDefinition;
-import org.apache.atlas.typesystem.types.ClassType;
-import org.apache.atlas.typesystem.types.DataTypes;
-import org.apache.atlas.typesystem.types.HierarchicalTypeDefinition;
-import org.apache.atlas.typesystem.types.Multiplicity;
-import org.apache.atlas.typesystem.types.TraitType;
-import org.apache.atlas.typesystem.types.TypeSystem;
-import org.apache.atlas.typesystem.types.utils.TypesUtil;
-import org.apache.commons.lang.RandomStringUtils;
-import org.codehaus.jettison.json.JSONArray;
-import org.codehaus.jettison.json.JSONObject;
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Guice;
-import org.testng.annotations.Test;
-
-import javax.inject.Inject;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-
-import static org.apache.atlas.typesystem.types.utils.TypesUtil.createClassTypeDef;
-import static org.apache.atlas.typesystem.types.utils.TypesUtil.createUniqueRequiredAttrDef;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-
-/**
- * GraphBackedMetadataRepository test
- *
- * Guice loads the dependencies and injects the necessary objects
- *
- */
-@Guice(modules = TestModules.TestOnlyModule.class)
-public class GraphBackedMetadataRepositoryTest {
-
- @Inject
- private MetadataRepository repositoryService;
-
- @Inject
- private GraphBackedDiscoveryService discoveryService;
-
- private TypeSystem typeSystem;
- private String guid;
- private QueryParams queryParams = new QueryParams(100, 0);
-
- @BeforeClass
- public void setUp() throws Exception {
- typeSystem = TypeSystem.getInstance();
- typeSystem.reset();
-
- assertTrue(repositoryService instanceof GraphBackedMetadataRepository);
- repositoryService = TestUtils.addTransactionWrapper(repositoryService);
- new GraphBackedSearchIndexer(new AtlasTypeRegistry());
-
- TestUtils.defineDeptEmployeeTypes(typeSystem);
- TestUtils.createHiveTypes(typeSystem);
- }
-
- @BeforeMethod
- public void setupContext() {
- TestUtils.resetRequestContext();
- }
-
- @AfterClass
- public void tearDown() {
- TypeSystem.getInstance().reset();
-// AtlasGraphProvider.cleanup();
- }
-
- @Test
- //In some cases of parallel APIs, the edge is added, but get edge by label doesn't return the edge. ATLAS-1104
- public void testConcurrentCalls() throws Exception {
- final HierarchicalTypeDefinition<ClassType> refType =
- createClassTypeDef(randomString(), ImmutableSet.<String>of());
- HierarchicalTypeDefinition<ClassType> type =
- createClassTypeDef(randomString(), ImmutableSet.<String>of(),
- new AttributeDefinition("ref", refType.typeName, Multiplicity.OPTIONAL, true, null));
- typeSystem.defineClassType(refType);
- typeSystem.defineClassType(type);
-
- String refId1 = createEntity(new Referenceable(refType.typeName)).get(0);
- String refId2 = createEntity(new Referenceable(refType.typeName)).get(0);
-
- final Referenceable instance1 = new Referenceable(type.typeName);
- instance1.set("ref", new Referenceable(refId1, refType.typeName, null));
-
- final Referenceable instance2 = new Referenceable(type.typeName);
- instance2.set("ref", new Referenceable(refId2, refType.typeName, null));
-
- ExecutorService executor = Executors.newFixedThreadPool(3);
- List<Future<Object>> futures = new ArrayList<>();
- futures.add(executor.submit(new Callable<Object>() {
- @Override
- public Object call() throws Exception {
- return createEntity(instance1).get(0);
- }
- }));
- futures.add(executor.submit(new Callable<Object>() {
- @Override
- public Object call() throws Exception {
- return createEntity(instance2).get(0);
- }
- }));
- futures.add(executor.submit(new Callable<Object>() {
- @Override
- public Object call() throws Exception {
- return discoveryService.searchByDSL(TestUtils.TABLE_TYPE, new QueryParams(10, 0));
- }
- }));
-
- String id1 = (String) futures.get(0).get();
- String id2 = (String) futures.get(1).get();
- futures.get(2).get();
- executor.shutdown();
-
- boolean validated1 = assertEdge(id1, type.typeName);
- boolean validated2 = assertEdge(id2, type.typeName);
- assertTrue(validated1 | validated2);
- }
-
- @Test
- public void testSubmitEntity() throws Exception {
- ITypedReferenceableInstance hrDept = TestUtils.createDeptEg1(typeSystem);
-
- List<String> guids = repositoryService.createEntities(hrDept).getCreatedEntities();
- Assert.assertNotNull(guids);
- Assert.assertEquals(guids.size(), 5);
- guid = guids.get(4);
- Assert.assertNotNull(guid);
- }
-
- @Test
- public void testCreateEntityWithOneNestingLevel() throws AtlasException {
-
- List<Referenceable> toValidate = new ArrayList<>();
- Referenceable dept = new Referenceable(TestUtils.DEPARTMENT_TYPE);
- toValidate.add(dept);
- dept.set(TestUtils.NAME, "test1");
-
- Referenceable mike = new Referenceable(TestUtils.PERSON_TYPE);
- toValidate.add(mike);
-
- mike.set(TestUtils.NAME, "Mike");
- mike.set(TestUtils.DEPARTMENT_ATTR, dept);
-
- Referenceable mark = new Referenceable(TestUtils.PERSON_TYPE);
- toValidate.add(mark);
- mark.set(TestUtils.NAME, "Mark");
- mark.set(TestUtils.DEPARTMENT_ATTR, dept);
-
- dept.set(TestUtils.EMPLOYEES_ATTR, ImmutableList.of(mike, mark));
- Map<String,Referenceable> positions = new HashMap<>();
- final String JANITOR = "janitor";
- final String RECEPTIONIST = "receptionist";
- positions.put(JANITOR, mike);
- positions.put(RECEPTIONIST, mark);
- dept.set(TestUtils.POSITIONS_ATTR, positions);
-
-
- ClassType deptType = TypeSystem.getInstance().getDataType(ClassType.class, TestUtils.DEPARTMENT_TYPE);
- ITypedReferenceableInstance deptInstance = deptType.convert(dept, Multiplicity.REQUIRED);
-
- CreateUpdateEntitiesResult result = repositoryService.createEntities(deptInstance);
-
- validateGuidMapping(toValidate, result);
- }
-
-
- @Test
- public void testCreateEntityWithTwoNestingLevels() throws AtlasException {
-
- List<Referenceable> toVerify = new ArrayList<>();
- Referenceable dept = new Referenceable(TestUtils.DEPARTMENT_TYPE);
- toVerify.add(dept);
- dept.set(TestUtils.NAME, "test2");
-
- Referenceable wallace = new Referenceable(TestUtils.PERSON_TYPE);
- toVerify.add(wallace);
- wallace.set(TestUtils.NAME, "Wallace");
- wallace.set(TestUtils.DEPARTMENT_ATTR, dept);
-
- Referenceable wallaceComputer = new Referenceable(TestUtils.ASSET_TYPE);
- toVerify.add(wallaceComputer);
- wallaceComputer.set("name", "wallaceComputer");
- wallace.set(TestUtils.ASSETS_ATTR, ImmutableList.of(wallaceComputer));
-
- Referenceable jordan = new Referenceable(TestUtils.PERSON_TYPE);
- toVerify.add(jordan);
- jordan.set(TestUtils.NAME, "Jordan");
- jordan.set(TestUtils.DEPARTMENT_ATTR, dept);
-
- Referenceable jordanComputer = new Referenceable(TestUtils.ASSET_TYPE);
- toVerify.add(jordanComputer);
- jordanComputer.set("name", "jordanComputer");
- jordan.set(TestUtils.ASSETS_ATTR, ImmutableList.of(jordanComputer));
-
- dept.set(TestUtils.EMPLOYEES_ATTR, ImmutableList.of(wallace, jordan));
- Map<String,Referenceable> positions = new HashMap<>();
- final String JANITOR = "janitor";
- final String RECEPTIONIST = "receptionist";
- positions.put(JANITOR, wallace);
- positions.put(RECEPTIONIST, jordan);
- dept.set(TestUtils.POSITIONS_ATTR, positions);
-
-
- ClassType deptType = TypeSystem.getInstance().getDataType(ClassType.class, TestUtils.DEPARTMENT_TYPE);
- ITypedReferenceableInstance deptInstance = deptType.convert(dept, Multiplicity.REQUIRED);
-
- CreateUpdateEntitiesResult result = repositoryService.createEntities(deptInstance);
- validateGuidMapping(toVerify, result);
- }
-
-
- @Test
- public void testCreateEntityWithThreeNestingLevels() throws AtlasException {
-
- List<Referenceable> toVerify = new ArrayList<>();
-
- Referenceable dept = new Referenceable(TestUtils.DEPARTMENT_TYPE);
- toVerify.add(dept);
- dept.set(TestUtils.NAME, "test3");
-
- Referenceable barry = new Referenceable(TestUtils.PERSON_TYPE);
- toVerify.add(barry);
- barry.set(TestUtils.NAME, "barry");
- barry.set(TestUtils.DEPARTMENT_ATTR, dept);
-
- Referenceable barryComputer = new Referenceable(TestUtils.ASSET_TYPE);
- toVerify.add(barryComputer);
- barryComputer.set("name", "barryComputer");
- barry.set(TestUtils.ASSETS_ATTR, ImmutableList.of(barryComputer));
-
- Referenceable barryHardDrive = new Referenceable(TestUtils.ASSET_TYPE);
- toVerify.add(barryHardDrive);
- barryHardDrive.set("name", "barryHardDrive");
-
- Referenceable barryCpuFan = new Referenceable(TestUtils.ASSET_TYPE);
- toVerify.add(barryCpuFan);
- barryCpuFan.set("name", "barryCpuFan");
-
- Referenceable barryVideoCard = new Referenceable(TestUtils.ASSET_TYPE);
- toVerify.add(barryVideoCard);
- barryVideoCard.set("name", "barryVideoCard");
-
- barryComputer.set("childAssets", ImmutableList.of(barryHardDrive, barryVideoCard, barryCpuFan));
-
-
- Referenceable jacob = new Referenceable(TestUtils.PERSON_TYPE);
- toVerify.add(jacob);
- jacob.set(TestUtils.NAME, "jacob");
- jacob.set(TestUtils.DEPARTMENT_ATTR, dept);
-
- Referenceable jacobComputer = new Referenceable(TestUtils.ASSET_TYPE);
- toVerify.add(jacobComputer);
- jacobComputer.set("name", "jacobComputer");
- jacob.set(TestUtils.ASSETS_ATTR, ImmutableList.of(jacobComputer));
-
- Referenceable jacobHardDrive = new Referenceable(TestUtils.ASSET_TYPE);
- toVerify.add(jacobHardDrive);
- jacobHardDrive.set("name", "jacobHardDrive");
-
- Referenceable jacobCpuFan = new Referenceable(TestUtils.ASSET_TYPE);
- toVerify.add(jacobCpuFan);
- jacobCpuFan.set("name", "jacobCpuFan");
-
- Referenceable jacobVideoCard = new Referenceable(TestUtils.ASSET_TYPE);
- toVerify.add(jacobVideoCard);
- jacobVideoCard.set("name", "jacobVideoCard");
-
- jacobComputer.set("childAssets", ImmutableList.of(jacobHardDrive, jacobVideoCard, jacobCpuFan));
-
- dept.set(TestUtils.EMPLOYEES_ATTR, ImmutableList.of(barry, jacob));
- Map<String,Referenceable> positions = new HashMap<>();
- final String JANITOR = "janitor";
- final String RECEPTIONIST = "receptionist";
- positions.put(JANITOR, barry);
- positions.put(RECEPTIONIST, jacob);
- dept.set(TestUtils.POSITIONS_ATTR, positions);
-
-
- ClassType deptType = TypeSystem.getInstance().getDataType(ClassType.class, TestUtils.DEPARTMENT_TYPE);
- ITypedReferenceableInstance deptInstance = deptType.convert(dept, Multiplicity.REQUIRED);
-
- CreateUpdateEntitiesResult result = repositoryService.createEntities(deptInstance);
-
- assertEquals(result.getCreatedEntities().size(), toVerify.size());
-
- validateGuidMapping(toVerify, result);
- }
-
- @Test(dependsOnMethods = "testSubmitEntity")
- public void testGetEntityDefinitionForDepartment() throws Exception {
- ITypedReferenceableInstance entity = repositoryService.getEntityDefinition(guid);
- Assert.assertNotNull(entity);
-
- //entity state should be active by default
- Assert.assertEquals(entity.getId().getState(), Id.EntityState.ACTIVE);
-
- //System attributes created time and modified time should not be null
- AtlasSystemAttributes systemAttributes = entity.getSystemAttributes();
- Assert.assertNotNull(systemAttributes.createdTime);
- Assert.assertNotNull(systemAttributes.modifiedTime);
- }
-
- @Test(expectedExceptions = EntityNotFoundException.class)
- public void testGetEntityDefinitionNonExistent() throws Exception {
- repositoryService.getEntityDefinition("blah");
- Assert.fail();
- }
-
- @Test(dependsOnMethods = "testSubmitEntity")
- public void testGetEntityList() throws Exception {
- List<String> entityList = repositoryService.getEntityList(TestUtils.DEPARTMENT_TYPE);
- System.out.println("entityList = " + entityList);
- Assert.assertNotNull(entityList);
- Assert.assertTrue(entityList.contains(guid));
- }
-
- @Test
- public void testGetTypeAttributeName() throws Exception {
- Assert.assertEquals(repositoryService.getTypeAttributeName(), Constants.ENTITY_TYPE_PROPERTY_KEY);
- }
-
- @Test(dependsOnMethods = "testSubmitEntity")
- public void testGetTraitLabel() throws Exception {
- Assert.assertEquals(
- repositoryService.getTraitLabel(typeSystem.getDataType(ClassType.class, TestUtils.TABLE_TYPE),
- TestUtils.CLASSIFICATION), TestUtils.CLASSIFICATION);
- }
-
- @Test
- public void testCreateEntity() throws Exception {
- Referenceable databaseInstance = new Referenceable(TestUtils.DATABASE_TYPE);
- databaseInstance.set("name", TestUtils.DATABASE_NAME);
- databaseInstance.set("description", "foo database");
- databaseInstance.set("created", new Date(TestUtils.TEST_DATE_IN_LONG));
-
- databaseInstance.set("namespace", "colo:cluster:hive:db");
- databaseInstance.set("cluster", "cluster-1");
- databaseInstance.set("colo", "colo-1");
- System.out.println("databaseInstance = " + databaseInstance);
-
- ClassType dbType = typeSystem.getDataType(ClassType.class, TestUtils.DATABASE_TYPE);
- ITypedReferenceableInstance db = dbType.convert(databaseInstance, Multiplicity.REQUIRED);
- System.out.println("db = " + db);
-
- //Reuse the same database instance without id, with the same unique attribute
- ITypedReferenceableInstance table = createHiveTableInstance(databaseInstance);
- List<String> guids = createEntities(db, table);
- Assert.assertEquals(guids.size(), 7); //1 db + 5 columns + 1 table. Shouldn't create db again
- System.out.println("added db = " + guids.get(0));
- System.out.println("added table = " + guids.get(6));
- }
-
- @Test(dependsOnMethods = "testCreateEntity")
- public void testGetEntityDefinition() throws Exception {
- String guid = getGUID();
-
- ITypedReferenceableInstance table = repositoryService.getEntityDefinition(guid);
- Assert.assertEquals(table.getDate("created"), new Date(TestUtils.TEST_DATE_IN_LONG));
- System.out.println("*** table = " + table);
- }
-
- @Test(dependsOnMethods = "testCreateEntity")
- public void testGetTraitNames() throws Exception {
- final List<String> traitNames = repositoryService.getTraitNames(getGUID());
- Assert.assertEquals(traitNames.size(), 1);
- Assert.assertEquals(traitNames, Arrays.asList(new String[]{TestUtils.CLASSIFICATION}));
- }
-
- @Test
- public void testGetTraitNamesForEmptyTraits() throws Exception {
- final List<String> traitNames = repositoryService.getTraitNames(guid);
- Assert.assertEquals(traitNames.size(), 0);
- }
-
- @Test(expectedExceptions = EntityNotFoundException.class)
- public void testGetTraitNamesForBadEntity() throws Exception {
- repositoryService.getTraitNames(UUID.randomUUID().toString());
- Assert.fail();
- }
-
- @Test
- public void testMultipleTypesWithSameUniqueAttribute() throws Exception {
- //Two entities of different types(with same supertype that has the unique attribute) with same qualified name should succeed
- HierarchicalTypeDefinition<ClassType> supertype =
- createClassTypeDef(randomString(), ImmutableSet.<String>of(),
- createUniqueRequiredAttrDef("name", DataTypes.STRING_TYPE));
- HierarchicalTypeDefinition<ClassType> t1 =
- createClassTypeDef(randomString(), ImmutableSet.of(supertype.typeName));
- HierarchicalTypeDefinition<ClassType> t2 =
- createClassTypeDef(randomString(), ImmutableSet.of(supertype.typeName));
- typeSystem.defineClassTypes(supertype, t1, t2);
-
- final String name = randomString();
- String id1 = createEntity(new Referenceable(t1.typeName) {{
- set("name", name);
- }}).get(0);
- String id2 = createEntity(new Referenceable(t2.typeName) {{
- set("name", name);
- }}).get(0);
- assertNotEquals(id1, id2);
-
- ITypedReferenceableInstance entity = repositoryService.getEntityDefinition(t1.typeName, "name", name);
- assertEquals(entity.getTypeName(), t1.typeName);
- assertEquals(entity.getId()._getId(), id1);
-
- entity = repositoryService.getEntityDefinition(t2.typeName, "name", name);
- assertEquals(entity.getTypeName(), t2.typeName);
- assertEquals(entity.getId()._getId(), id2);
- }
-
- @Test(dependsOnMethods = "testGetTraitNames")
- public void testAddTrait() throws Exception {
- final String aGUID = getGUID();
- AtlasVertex AtlasVertex = GraphHelper.getInstance().getVertexForGUID(aGUID);
- Long modificationTimestampPreUpdate = GraphHelper.getSingleValuedProperty(AtlasVertex, Constants.MODIFICATION_TIMESTAMP_PROPERTY_KEY, Long.class);
- Assert.assertNotNull(modificationTimestampPreUpdate);
-
- List<String> traitNames = repositoryService.getTraitNames(aGUID);
- System.out.println("traitNames = " + traitNames);
- Assert.assertEquals(traitNames.size(), 1);
- Assert.assertTrue(traitNames.contains(TestUtils.CLASSIFICATION));
- Assert.assertFalse(traitNames.contains(TestUtils.PII));
-
- TraitType traitType = typeSystem.getDataType(TraitType.class, TestUtils.PII);
- ITypedStruct traitInstance = traitType.createInstance();
-
- repositoryService.addTrait(aGUID, traitInstance);
-
- // refresh trait names
- traitNames = repositoryService.getTraitNames(aGUID);
- Assert.assertEquals(traitNames.size(), 2);
- Assert.assertTrue(traitNames.contains(TestUtils.PII));
- Assert.assertTrue(traitNames.contains(TestUtils.CLASSIFICATION));
-
- // Verify modification timestamp was updated.
- GraphHelper.getInstance().getVertexForGUID(aGUID);
- Long modificationTimestampPostUpdate = GraphHelper.getSingleValuedProperty(AtlasVertex, Constants.MODIFICATION_TIMESTAMP_PROPERTY_KEY, Long.class);
- Assert.assertNotNull(modificationTimestampPostUpdate);
- }
-
- @Test(dependsOnMethods = "testAddTrait")
- public void testAddTraitWithAttribute() throws Exception {
- final String aGUID = getGUID();
- final String traitName = "P_I_I";
-
- HierarchicalTypeDefinition<TraitType> piiTrait = TypesUtil
- .createTraitTypeDef(traitName, ImmutableSet.<String>of(),
- TypesUtil.createRequiredAttrDef("type", DataTypes.STRING_TYPE));
- TraitType traitType = typeSystem.defineTraitType(piiTrait);
- ITypedStruct traitInstance = traitType.createInstance();
- traitInstance.set("type", "SSN");
-
- repositoryService.addTrait(aGUID, traitInstance);
-
- TestUtils.dumpGraph(TestUtils.getGraph());
-
- // refresh trait names
- List<String> traitNames = repositoryService.getTraitNames(aGUID);
- Assert.assertEquals(traitNames.size(), 3);
- Assert.assertTrue(traitNames.contains(traitName));
-
- ITypedReferenceableInstance instance = repositoryService.getEntityDefinition(aGUID);
- IStruct traitInstanceRef = instance.getTrait(traitName);
- String type = (String) traitInstanceRef.get("type");
- Assert.assertEquals(type, "SSN");
- }
-
- @Test(dependsOnMethods = "testCreateEntity", expectedExceptions = NullPointerException.class)
- public void testAddTraitWithNullInstance() throws Exception {
- repositoryService.addTrait(getGUID(), null);
- Assert.fail();
- }
-
- @Test(dependsOnMethods = "testAddTrait", expectedExceptions = RepositoryException.class)
- public void testAddTraitForBadEntity() throws Exception {
- TraitType traitType = typeSystem.getDataType(TraitType.class, TestUtils.PII);
- ITypedStruct traitInstance = traitType.createInstance();
-
- repositoryService.addTrait(UUID.randomUUID().toString(), traitInstance);
- Assert.fail();
- }
-
- @Test(dependsOnMethods = "testAddTrait")
- public void testDeleteTrait() throws Exception {
- final String aGUID = getGUID();
- AtlasVertex AtlasVertex = GraphHelper.getInstance().getVertexForGUID(aGUID);
- Long modificationTimestampPreUpdate = GraphHelper.getSingleValuedProperty(AtlasVertex, Constants.MODIFICATION_TIMESTAMP_PROPERTY_KEY, Long.class);
- Assert.assertNotNull(modificationTimestampPreUpdate);
-
- List<String> traitNames = repositoryService.getTraitNames(aGUID);
- Assert.assertEquals(traitNames.size(), 3);
- Assert.assertTrue(traitNames.contains(TestUtils.PII));
- Assert.assertTrue(traitNames.contains(TestUtils.CLASSIFICATION));
- Assert.assertTrue(traitNames.contains("P_I_I"));
-
- repositoryService.deleteTrait(aGUID, TestUtils.PII);
-
- // refresh trait names
- traitNames = repositoryService.getTraitNames(aGUID);
- Assert.assertEquals(traitNames.size(), 2);
- Assert.assertTrue(traitNames.contains(TestUtils.CLASSIFICATION));
- Assert.assertFalse(traitNames.contains(TestUtils.PII));
-
- // Verify modification timestamp was updated.
- GraphHelper.getInstance().getVertexForGUID(aGUID);
- Long modificationTimestampPostUpdate = GraphHelper.getSingleValuedProperty(AtlasVertex, Constants.MODIFICATION_TIMESTAMP_PROPERTY_KEY, Long.class);
- Assert.assertNotNull(modificationTimestampPostUpdate);
- Assert.assertTrue(modificationTimestampPostUpdate > modificationTimestampPreUpdate);
- }
-
- @Test(expectedExceptions = EntityNotFoundException.class)
- public void testDeleteTraitForNonExistentEntity() throws Exception {
- repositoryService.deleteTrait(UUID.randomUUID().toString(), TestUtils.PII);
- Assert.fail();
- }
-
- @Test(expectedExceptions = TraitNotFoundException.class)
- public void testDeleteTraitForNonExistentTrait() throws Exception {
- final String aGUID = getGUID();
- repositoryService.deleteTrait(aGUID, "PCI");
- Assert.fail();
- }
-
- @Test(dependsOnMethods = "testCreateEntity")
- @GraphTransaction
- public void testGetIdFromVertex() throws Exception {
- AtlasVertex tableVertex = getTableEntityVertex();
-
- String guid = GraphHelper.getSingleValuedProperty(tableVertex, Constants.GUID_PROPERTY_KEY, String.class);
- if (guid == null) {
- Assert.fail();
- }
-
- Id expected = new Id(guid, GraphHelper.getSingleValuedProperty(tableVertex, Constants.VERSION_PROPERTY_KEY, Long.class).intValue(), TestUtils.TABLE_TYPE);
- Assert.assertEquals(GraphHelper.getIdFromVertex(TestUtils.TABLE_TYPE, tableVertex), expected);
- }
-
- @Test(dependsOnMethods = "testCreateEntity")
- @GraphTransaction
- public void testGetTypeName() throws Exception {
- AtlasVertex tableVertex = getTableEntityVertex();
- Assert.assertEquals(GraphHelper.getTypeName(tableVertex), TestUtils.TABLE_TYPE);
- }
-
- @Test(dependsOnMethods = "testCreateEntity")
- public void testSearchByDSLQuery() throws Exception {
- String dslQuery = "hive_database as PII";
- System.out.println("Executing dslQuery = " + dslQuery);
- String jsonResults = discoveryService.searchByDSL(dslQuery, queryParams);
- Assert.assertNotNull(jsonResults);
-
- JSONObject results = new JSONObject(jsonResults);
- Assert.assertEquals(results.length(), 3);
- System.out.println("results = " + results);
-
- Object query = results.get("query");
- Assert.assertNotNull(query);
-
- JSONObject dataType = results.getJSONObject("dataType");
- Assert.assertNotNull(dataType);
- String typeName = dataType.getString("typeName");
- Assert.assertNotNull(typeName);
-
- JSONArray rows = results.getJSONArray("rows");
- Assert.assertNotNull(rows);
- Assert.assertTrue(rows.length() > 0);
-
- for (int index = 0; index < rows.length(); index++) {
- JSONObject row = rows.getJSONObject(index);
- String type = row.getString("$typeName$");
- Assert.assertEquals(type, "hive_database");
-
- String name = row.getString("name");
- Assert.assertEquals(name, TestUtils.DATABASE_NAME);
- }
- }
-
- @Test(dependsOnMethods = "testSubmitEntity")
- public void testSearchByDSLWithInheritance() throws Exception {
- String dslQuery = "Person where name = 'Jane'";
- System.out.println("Executing dslQuery = " + dslQuery);
- String jsonResults = discoveryService.searchByDSL(dslQuery, queryParams);
- Assert.assertNotNull(jsonResults);
-
- JSONObject results = new JSONObject(jsonResults);
- Assert.assertEquals(results.length(), 3);
- System.out.println("results = " + results);
-
- Object query = results.get("query");
- Assert.assertNotNull(query);
-
- JSONObject dataType = results.getJSONObject("dataType");
- Assert.assertNotNull(dataType);
- String typeName = dataType.getString("typeName");
- Assert.assertEquals(typeName, "Person");
-
- JSONArray rows = results.getJSONArray("rows");
- Assert.assertEquals(rows.length(), 1);
-
- JSONObject row = rows.getJSONObject(0);
- Assert.assertEquals(row.getString("$typeName$"), "Manager");
- Assert.assertEquals(row.getString("name"), "Jane");
- }
-
- @Test(dependsOnMethods = "testCreateEntity")
- public void testBug37860() throws Exception {
- String dslQuery = "hive_table as t where name = 'bar' "
- + "database where name = 'foo' and description = 'foo database' select t";
-
- TestUtils.dumpGraph(TestUtils.getGraph());
-
- System.out.println("Executing dslQuery = " + dslQuery);
- String jsonResults = discoveryService.searchByDSL(dslQuery, queryParams);
- Assert.assertNotNull(jsonResults);
-
- JSONObject results = new JSONObject(jsonResults);
- Assert.assertEquals(results.length(), 3);
- System.out.println("results = " + results);
-
- Object query = results.get("query");
- Assert.assertNotNull(query);
-
- JSONObject dataType = results.getJSONObject("dataType");
- Assert.assertNotNull(dataType);
-
- JSONArray rows = results.getJSONArray("rows");
- Assert.assertEquals(rows.length(), 1);
-
- }
-
- /**
- * Full text search requires GraphBackedSearchIndexer, and GraphBackedSearchIndexer can't be enabled in
- * GraphBackedDiscoveryServiceTest because of its test data. So, test for full text search is in
- * GraphBackedMetadataRepositoryTest:(
- */
- @Test(dependsOnMethods = "testSubmitEntity")
- public void testFullTextSearch() throws Exception {
- //todo fix this
- //Weird: with lucene, the test passes without sleep
- //but with elasticsearch, doesn't work without sleep. why??
- long sleepInterval = 1000;
-
- TestUtils.dumpGraph(TestUtils.getGraph());
-
- //person in hr department whose name is john
- Thread.sleep(sleepInterval);
- String response = discoveryService.searchByFullText("john", queryParams);
- Assert.assertNotNull(response);
- JSONArray results = new JSONArray(response);
- Assert.assertEquals(results.length(), 1);
- JSONObject row = (JSONObject) results.get(0);
- Assert.assertEquals(row.get("typeName"), "Person");
-
- //person in hr department who lives in santa clara
- response = discoveryService.searchByFullText("Jane AND santa AND clara", queryParams);
- Assert.assertNotNull(response);
- results = new JSONArray(response);
- Assert.assertEquals(results.length(), 1);
- row = (JSONObject) results.get(0);
- Assert.assertEquals(row.get("typeName"), "Manager");
-
- //search for person in hr department whose name starts is john/jahn
- response = discoveryService.searchByFullText("hr AND (john OR jahn)", queryParams);
- Assert.assertNotNull(response);
- results = new JSONArray(response);
- Assert.assertEquals(results.length(), 1);
- row = (JSONObject) results.get(0);
- Assert.assertEquals(row.get("typeName"), "Person");
-
- //verify limit and offset
- //higher limit should return all results
- results = new JSONArray(discoveryService.searchByFullText("Department", queryParams));
- assertTrue(results.length() > 0);
- int maxResults = results.length();
-
- //smaller limit should return those many rows
- results = new JSONArray(discoveryService.searchByFullText("Department", new QueryParams(2, 0)));
- assertEquals(results.length(), 2);
-
- //offset should offset the results
- results = new JSONArray(discoveryService.searchByFullText("Department", new QueryParams(5, 2)));
- assertEquals(results.length(), maxResults > 5 ? 5 : Math.min((maxResults - 2) % 5, 5));
-
- //higher offset shouldn't return any rows
- results = new JSONArray(discoveryService.searchByFullText("Department", new QueryParams(2, 6)));
- assertEquals(results.length(), maxResults > 6 ? Math.min(maxResults - 6, 2) : 0);
- }
-
- @Test
- public void testUTFValues() throws Exception {
- Referenceable hrDept = new Referenceable("Department");
- Referenceable john = new Referenceable("Person");
- john.set("name", randomUTF());
- john.set("department", hrDept);
-
- hrDept.set("name", randomUTF());
- hrDept.set("employees", ImmutableList.of(john));
-
- ClassType deptType = typeSystem.getDataType(ClassType.class, "Department");
- ITypedReferenceableInstance hrDept2 = deptType.convert(hrDept, Multiplicity.REQUIRED);
-
- List<String> guids = repositoryService.createEntities(hrDept2).getCreatedEntities();
- Assert.assertNotNull(guids);
- Assert.assertEquals(guids.size(), 2);
- Assert.assertNotNull(guids.get(0));
- Assert.assertNotNull(guids.get(1));
- }
-
- @GraphTransaction
- String getGUID() {
- AtlasVertex tableVertex = getTableEntityVertex();
-
- String guid = GraphHelper.getSingleValuedProperty(tableVertex, Constants.GUID_PROPERTY_KEY, String.class);
- if (guid == null) {
- Assert.fail();
- }
- return guid;
- }
-
- AtlasVertex getTableEntityVertex() {
- AtlasGraph graph = TestUtils.getGraph();
- AtlasGraphQuery query = graph.query().has(Constants.ENTITY_TYPE_PROPERTY_KEY, ComparisionOperator.EQUAL, TestUtils.TABLE_TYPE);
- Iterator<AtlasVertex> results = query.vertices().iterator();
- // returning one since guid should be unique
- AtlasVertex tableVertex = results.hasNext() ? results.next() : null;
- if (tableVertex == null) {
- Assert.fail();
- }
-
- return tableVertex;
- }
-
- private boolean assertEdge(String id, String typeName) throws Exception {
- AtlasGraph graph = TestUtils.getGraph();
- Iterable<AtlasVertex> vertices = graph.query().has(Constants.GUID_PROPERTY_KEY, id).vertices();
- AtlasVertex vertex = vertices.iterator().next();
- Iterable<AtlasEdge> edges = vertex.getEdges(AtlasEdgeDirection.OUT, Constants.INTERNAL_PROPERTY_KEY_PREFIX + typeName + ".ref");
-
- if (edges.iterator().hasNext()) {
- ITypedReferenceableInstance entity = repositoryService.getEntityDefinition(id);
- assertNotNull(entity.get("ref"));
- return true;
- }
- return false;
- }
-
- private void validateGuidMapping(List<Referenceable> toVerify, CreateUpdateEntitiesResult result)
- throws AtlasException {
- Map<String,String> guids = result.getGuidMapping().getGuidAssignments();
-
- TestUtils.assertContentsSame(result.getCreatedEntities(), guids.values());
- assertEquals(guids.size(), toVerify.size());
- for(Referenceable r : toVerify) {
- loadAndDoSimpleValidation(guids.get(r.getId()._getId()), r);
- }
- }
-
- private ITypedReferenceableInstance loadAndDoSimpleValidation(String guid, Referenceable inst) throws AtlasException {
- return TestUtils.loadAndDoSimpleValidation(guid, inst, repositoryService);
- }
-
- private List<String> createEntities(ITypedReferenceableInstance... instances) throws Exception {
- RequestContext.createContext();
- return repositoryService.createEntities(instances).getCreatedEntities();
- }
-
- private List<String> createEntity(Referenceable entity) throws Exception {
- ClassType type = typeSystem.getDataType(ClassType.class, entity.getTypeName());
- ITypedReferenceableInstance instance = type.convert(entity, Multiplicity.REQUIRED);
- return createEntities(instance);
- }
-
- private ITypedReferenceableInstance createHiveTableInstance(Referenceable databaseInstance) throws Exception {
- Referenceable tableInstance = new Referenceable(TestUtils.TABLE_TYPE, TestUtils.CLASSIFICATION);
- tableInstance.set("name", TestUtils.TABLE_NAME);
- tableInstance.set("description", "bar table");
- tableInstance.set("type", "managed");
- tableInstance.set("created", new Date(TestUtils.TEST_DATE_IN_LONG));
- tableInstance.set("tableType", 1); // enum
-
- // super type
- tableInstance.set("namespace", "colo:cluster:hive:db:table");
- tableInstance.set("cluster", "cluster-1");
- tableInstance.set("colo", "colo-1");
-
- // refer to an existing class
- tableInstance.set("database", databaseInstance);
-
- ArrayList<String> columnNames = new ArrayList<>();
- columnNames.add("first_name");
- columnNames.add("last_name");
- tableInstance.set("columnNames", columnNames);
-
- Struct traitInstance = (Struct) tableInstance.getTrait(TestUtils.CLASSIFICATION);
- traitInstance.set("tag", "foundation_etl");
-
- Struct serde1Instance = new Struct("serdeType");
- serde1Instance.set("name", "serde1");
- serde1Instance.set("serde", "serde1");
- tableInstance.set("serde1", serde1Instance);
-
- Struct serde2Instance = new Struct("serdeType");
- serde2Instance.set("name", "serde2");
- serde2Instance.set("serde", "serde2");
- tableInstance.set("serde2", serde2Instance);
-
- // HashMap<String, Referenceable> columnsMap = new HashMap<>();
- ArrayList<Referenceable> columns = new ArrayList<>();
- for (int index = 0; index < 5; index++) {
- Referenceable columnInstance = new Referenceable("column_type");
- final String name = "column_" + index;
- columnInstance.set("name", name);
- columnInstance.set("type", "string");
-
- columns.add(columnInstance);
- // columnsMap.put(name, columnInstance);
- }
- tableInstance.set("columns", columns);
- // tableInstance.set("columnsMap", columnsMap);
-
- // HashMap<String, Struct> partitionsMap = new HashMap<>();
- ArrayList<Struct> partitions = new ArrayList<>();
- for (int index = 0; index < 5; index++) {
- Struct partitionInstance = new Struct(TestUtils.PARTITION_STRUCT_TYPE);
- final String name = "partition_" + index;
- partitionInstance.set("name", name);
-
- partitions.add(partitionInstance);
- // partitionsMap.put(name, partitionInstance);
- }
- tableInstance.set("partitions", partitions);
- // tableInstance.set("partitionsMap", partitionsMap);
-
- HashMap<String, String> parametersMap = new HashMap<>();
- parametersMap.put("foo", "bar");
- parametersMap.put("bar", "baz");
- parametersMap.put("some", "thing");
- tableInstance.set("parametersMap", parametersMap);
-
- ClassType tableType = typeSystem.getDataType(ClassType.class, TestUtils.TABLE_TYPE);
- return tableType.convert(tableInstance, Multiplicity.REQUIRED);
- }
-
- private String randomUTF() {
- return RandomStringUtils.random(10);
- }
-
- private String randomString() {
- return TestUtils.randomString(10);
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/0877e47c/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedRepositoryHardDeleteTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedRepositoryHardDeleteTest.java b/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedRepositoryHardDeleteTest.java
deleted file mode 100644
index 9c0ef43..0000000
--- a/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedRepositoryHardDeleteTest.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.graph;
-
-import org.apache.atlas.AtlasClient;
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.TestUtils;
-import org.apache.atlas.repository.Constants;
-import org.apache.atlas.repository.graphdb.AtlasVertex;
-import org.apache.atlas.typesystem.IReferenceableInstance;
-import org.apache.atlas.typesystem.IStruct;
-import org.apache.atlas.typesystem.ITypedReferenceableInstance;
-import org.apache.atlas.typesystem.ITypedStruct;
-import org.apache.atlas.typesystem.exception.EntityNotFoundException;
-import org.apache.atlas.typesystem.exception.NullRequiredAttributeException;
-import org.apache.atlas.typesystem.types.TypeSystem;
-import org.testng.Assert;
-
-import java.util.List;
-import java.util.Map;
-
-import static org.apache.atlas.TestUtils.COLUMNS_ATTR_NAME;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.fail;
-import static org.testng.AssertJUnit.assertNotNull;
-
-public class GraphBackedRepositoryHardDeleteTest extends GraphBackedMetadataRepositoryDeleteTestBase {
- @Override
- DeleteHandler getDeleteHandler(TypeSystem typeSystem) {
- return new HardDeleteHandler(typeSystem);
- }
-
- @Override
- protected void assertTestDeleteEntityWithTraits(String guid) {
- //entity is deleted. So, no assertions
- }
-
- @Override
- protected void assertTableForTestDeleteReference(String tableId) {
- //entity is deleted. So, no assertions
- }
-
- @Override
- protected void assertColumnForTestDeleteReference(ITypedReferenceableInstance tableInstance) throws AtlasException {
- List<ITypedReferenceableInstance> columns =
- (List<ITypedReferenceableInstance>) tableInstance.get(COLUMNS_ATTR_NAME);
- assertNull(columns);
- }
-
- @Override
- protected void assertProcessForTestDeleteReference(ITypedReferenceableInstance processInstance) throws Exception {
- //assert that outputs is empty
- ITypedReferenceableInstance newProcess =
- repositoryService.getEntityDefinition(processInstance.getId()._getId());
- assertNull(newProcess.get(AtlasClient.PROCESS_ATTRIBUTE_OUTPUTS));
- }
-
- @Override
- protected void assertEntityDeleted(String id) throws Exception {
- try {
- repositoryService.getEntityDefinition(id);
- fail("Expected EntityNotFoundException");
- } catch(EntityNotFoundException e) {
- // expected
- }
- }
-
- @Override
- protected void assertDeletedColumn(ITypedReferenceableInstance tableInstance) throws AtlasException {
- assertEquals(((List<IReferenceableInstance>) tableInstance.get(COLUMNS_ATTR_NAME)).size(), 2);
- }
-
- @Override
- protected void assertTestDeleteEntities(ITypedReferenceableInstance tableInstance) {
- int vertexCount = getVertices(Constants.ENTITY_TYPE_PROPERTY_KEY, TestUtils.TABLE_TYPE).size();
- assertEquals(vertexCount, 0);
-
- vertexCount = getVertices(Constants.ENTITY_TYPE_PROPERTY_KEY, TestUtils.COLUMN_TYPE).size();
- assertEquals(vertexCount, 0);
- }
-
- @Override
- protected void assertVerticesDeleted(List<AtlasVertex> vertices) {
- assertEquals(vertices.size(), 0);
- }
-
- @Override
- protected void assertTestUpdateEntity_MultiplicityOneNonCompositeReference(String janeGuid) throws Exception {
- // Verify that max is no longer a subordinate of jane.
- ITypedReferenceableInstance jane = repositoryService.getEntityDefinition(janeGuid);
- List<ITypedReferenceableInstance> subordinates = (List<ITypedReferenceableInstance>) jane.get("subordinates");
- Assert.assertEquals(subordinates.size(), 1);
- }
-
- @Override
- protected void assertJohnForTestDisconnectBidirectionalReferences(ITypedReferenceableInstance john,
- String janeGuid) throws Exception {
- assertNull(john.get("manager"));
- }
-
- @Override
- protected void assertMaxForTestDisconnectBidirectionalReferences(Map<String, String> nameGuidMap)
- throws Exception {
- // Verify that the Department.employees reference to the deleted employee
- // was disconnected.
- ITypedReferenceableInstance hrDept = repositoryService.getEntityDefinition(nameGuidMap.get("hr"));
- List<ITypedReferenceableInstance> employees = (List<ITypedReferenceableInstance>) hrDept.get("employees");
- Assert.assertEquals(employees.size(), 3);
- String maxGuid = nameGuidMap.get("Max");
- for (ITypedReferenceableInstance employee : employees) {
- Assert.assertNotEquals(employee.getId()._getId(), maxGuid);
- }
-
- // Verify that the Manager.subordinates reference to the deleted employee
- // Max was disconnected.
- ITypedReferenceableInstance jane = repositoryService.getEntityDefinition(nameGuidMap.get("Jane"));
- List<ITypedReferenceableInstance> subordinates = (List<ITypedReferenceableInstance>) jane.get("subordinates");
- assertEquals(subordinates.size(), 1);
-
- // Verify that max's Person.mentor unidirectional reference to john was disconnected.
- ITypedReferenceableInstance john = repositoryService.getEntityDefinition(nameGuidMap.get("John"));
- assertNull(john.get("mentor"));
- }
-
- @Override
- protected void assertTestDisconnectUnidirectionalArrayReferenceFromClassType(
- List<ITypedReferenceableInstance> columns, String columnGuid) {
- assertEquals(columns.size(), 4);
- for (ITypedReferenceableInstance column : columns) {
- assertFalse(column.getId()._getId().equals(columnGuid));
- }
- }
-
- @Override
- protected void assertTestDisconnectUnidirectionalArrayReferenceFromStructAndTraitTypes(String structContainerGuid)
- throws Exception {
- // Verify that the unidirectional references from the struct and trait instances
- // to the deleted entities were disconnected.
- ITypedReferenceableInstance structContainerConvertedEntity =
- repositoryService.getEntityDefinition(structContainerGuid);
- ITypedStruct struct = (ITypedStruct) structContainerConvertedEntity.get("struct");
- assertNull(struct.get("target"));
- IStruct trait = structContainerConvertedEntity.getTrait("TestTrait");
- assertNotNull(trait);
- assertNull(trait.get("target"));
- }
-
- @Override
- protected void assertTestDisconnectMapReferenceFromClassType(String mapOwnerGuid) throws Exception {
- // Verify map references from mapOwner were disconnected.
- ITypedReferenceableInstance mapOwnerInstance = repositoryService.getEntityDefinition(mapOwnerGuid);
- assertNull(mapOwnerInstance.get("map"));
- assertNull(mapOwnerInstance.get("biMap"));
-
- AtlasVertex mapOwnerVertex = GraphHelper.getInstance().getVertexForGUID(mapOwnerGuid);
- Object object = mapOwnerVertex.getProperty("MapOwner.map.value1", String.class);
- assertNull(object);
- object = mapOwnerVertex.getProperty("MapOwner.biMap.value1", String.class);
- assertNull(object);
- }
-
- @Override
- protected void assertTestDeleteTargetOfMultiplicityRequiredReference() throws Exception {
-
- Assert.fail("Lower bound on attribute Manager.subordinates was not enforced - " +
- NullRequiredAttributeException.class.getSimpleName() + " was expected but none thrown");
- }
-
- @Override
- protected void assertTestLowerBoundsIgnoredOnDeletedEntities(List<ITypedReferenceableInstance> employees) {
-
- Assert.assertEquals(employees.size(), 1, "References to deleted employees were not disconnected");
- }
-
- @Override
- protected void assertTestLowerBoundsIgnoredOnCompositeDeletedEntities(String hrDeptGuid) throws Exception {
-
- try {
- repositoryService.getEntityDefinition(hrDeptGuid);
- Assert.fail(EntityNotFoundException.class.getSimpleName() + " was expected but none thrown");
- }
- catch (EntityNotFoundException e) {
- // good
- }
- }
-
- @Override
- protected void verifyTestDeleteEntityWithDuplicateReferenceListElements(List columnsPropertyValue) {
-
- // With hard deletes enabled, verify that duplicate edge IDs for deleted edges
- // were removed from the array property list.
- Assert.assertEquals(columnsPropertyValue.size(), 2);
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/0877e47c/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedRepositorySoftDeleteTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedRepositorySoftDeleteTest.java b/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedRepositorySoftDeleteTest.java
deleted file mode 100644
index 8c86235..0000000
--- a/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedRepositorySoftDeleteTest.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.graph;
-
-import org.apache.atlas.AtlasClient;
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.TestUtils;
-import org.apache.atlas.repository.Constants;
-import org.apache.atlas.repository.graphdb.AtlasVertex;
-import org.apache.atlas.typesystem.IReferenceableInstance;
-import org.apache.atlas.typesystem.IStruct;
-import org.apache.atlas.typesystem.ITypedReferenceableInstance;
-import org.apache.atlas.typesystem.ITypedStruct;
-import org.apache.atlas.typesystem.persistence.Id;
-import org.apache.atlas.typesystem.persistence.Id.EntityState;
-import org.apache.atlas.typesystem.types.TypeSystem;
-import org.testng.Assert;
-
-import java.util.List;
-import java.util.Map;
-
-import static org.apache.atlas.TestUtils.COLUMNS_ATTR_NAME;
-import static org.apache.atlas.TestUtils.NAME;
-import static org.apache.atlas.TestUtils.PII;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-
-public class GraphBackedRepositorySoftDeleteTest extends GraphBackedMetadataRepositoryDeleteTestBase {
- @Override
- DeleteHandler getDeleteHandler(TypeSystem typeSystem) {
- return new SoftDeleteHandler(typeSystem);
- }
-
- @Override
- protected void assertTestDeleteEntityWithTraits(String guid) throws Exception {
- ITypedReferenceableInstance instance = repositoryService.getEntityDefinition(guid);
- assertTrue(instance.getTraits().contains(PII));
- }
-
- @Override
- protected void assertTableForTestDeleteReference(String tableId) throws Exception {
- ITypedReferenceableInstance table = repositoryService.getEntityDefinition(tableId);
- assertNotNull(table.get(NAME));
- assertNotNull(table.get("description"));
- assertNotNull(table.get("type"));
- assertNotNull(table.get("tableType"));
- assertNotNull(table.get("created"));
-
- Id dbId = (Id) table.get("database");
- assertNotNull(dbId);
-
- ITypedReferenceableInstance db = repositoryService.getEntityDefinition(dbId.getId()._getId());
- assertNotNull(db);
- assertEquals(db.getId().getState(), Id.EntityState.ACTIVE);
- }
-
- @Override
- protected void assertColumnForTestDeleteReference(ITypedReferenceableInstance tableInstance) throws AtlasException {
- List<ITypedReferenceableInstance> columns =
- (List<ITypedReferenceableInstance>) tableInstance.get(COLUMNS_ATTR_NAME);
- assertEquals(columns.size(), 1);
- assertEquals(columns.get(0).getId().getState(), Id.EntityState.DELETED);
- }
-
- @Override
- protected void assertProcessForTestDeleteReference(ITypedReferenceableInstance expected) throws Exception {
- ITypedReferenceableInstance process = repositoryService.getEntityDefinition(expected.getId()._getId());
- List<ITypedReferenceableInstance> outputs =
- (List<ITypedReferenceableInstance>) process.get(AtlasClient.PROCESS_ATTRIBUTE_OUTPUTS);
- List<ITypedReferenceableInstance> expectedOutputs =
- (List<ITypedReferenceableInstance>) process.get(AtlasClient.PROCESS_ATTRIBUTE_OUTPUTS);
- assertEquals(outputs.size(), expectedOutputs.size());
- }
-
- @Override
- protected void assertEntityDeleted(String id) throws Exception {
- ITypedReferenceableInstance entity = repositoryService.getEntityDefinition(id);
- assertEquals(entity.getId().getState(), Id.EntityState.DELETED);
- }
-
- @Override
- protected void assertDeletedColumn(ITypedReferenceableInstance tableInstance) throws AtlasException {
- List<IReferenceableInstance> columns = (List<IReferenceableInstance>) tableInstance.get(COLUMNS_ATTR_NAME);
- assertEquals(columns.size(), 3);
- assertEquals(columns.get(0).getId().getState(), Id.EntityState.DELETED);
- }
-
- @Override
- protected void assertTestDeleteEntities(ITypedReferenceableInstance expected) throws Exception {
- //Assert that the deleted table can be fully constructed back
- ITypedReferenceableInstance table = repositoryService.getEntityDefinition(expected.getId()._getId());
- List<ITypedReferenceableInstance> columns =
- (List<ITypedReferenceableInstance>) table.get(TestUtils.COLUMNS_ATTR_NAME);
- List<ITypedReferenceableInstance> expectedColumns =
- (List<ITypedReferenceableInstance>) table.get(TestUtils.COLUMNS_ATTR_NAME);
- assertEquals(columns.size(), expectedColumns.size());
- assertNotNull(table.get("database"));
- }
-
- @Override
- protected void assertVerticesDeleted(List<AtlasVertex> vertices) {
- for (AtlasVertex vertex : vertices) {
- assertEquals(GraphHelper.getSingleValuedProperty(vertex, Constants.STATE_PROPERTY_KEY, String.class), Id.EntityState.DELETED.name());
- }
- }
-
- @Override
- protected void assertTestUpdateEntity_MultiplicityOneNonCompositeReference(String janeGuid) throws Exception {
- // Verify Jane's subordinates reference cardinality is still 2.
- ITypedReferenceableInstance jane = repositoryService.getEntityDefinition(janeGuid);
- List<ITypedReferenceableInstance> subordinates = (List<ITypedReferenceableInstance>) jane.get("subordinates");
- Assert.assertEquals(subordinates.size(), 2);
- }
-
- @Override
- protected void assertJohnForTestDisconnectBidirectionalReferences(ITypedReferenceableInstance john, String janeGuid)
- throws Exception {
- Id mgr = (Id) john.get("manager");
- assertNotNull(mgr);
- assertEquals(mgr._getId(), janeGuid);
- assertEquals(mgr.getState(), Id.EntityState.DELETED);
- }
-
- @Override
- protected void assertMaxForTestDisconnectBidirectionalReferences(Map<String, String> nameGuidMap) throws Exception {
- // Verify that the Department.employees reference to the deleted employee
- // was disconnected.
- ITypedReferenceableInstance hrDept = repositoryService.getEntityDefinition(nameGuidMap.get("hr"));
- List<ITypedReferenceableInstance> employees = (List<ITypedReferenceableInstance>) hrDept.get("employees");
- Assert.assertEquals(employees.size(), 4);
- String maxGuid = nameGuidMap.get("Max");
- for (ITypedReferenceableInstance employee : employees) {
- if (employee.getId()._getId().equals(maxGuid)) {
- assertEquals(employee.getId().getState(), Id.EntityState.DELETED);
- }
- }
-
- // Verify that the Manager.subordinates still references deleted employee
- ITypedReferenceableInstance jane = repositoryService.getEntityDefinition(nameGuidMap.get("Jane"));
- List<ITypedReferenceableInstance> subordinates = (List<ITypedReferenceableInstance>) jane.get("subordinates");
- assertEquals(subordinates.size(), 2);
- for (ITypedReferenceableInstance subordinate : subordinates) {
- if (subordinate.getId()._getId().equals(maxGuid)) {
- assertEquals(subordinate.getId().getState(), Id.EntityState.DELETED);
- }
- }
-
- // Verify that max's Person.mentor unidirectional reference to john was disconnected.
- ITypedReferenceableInstance john = repositoryService.getEntityDefinition(nameGuidMap.get("John"));
- Id mentor = (Id) john.get("mentor");
- assertEquals(mentor._getId(), maxGuid);
- assertEquals(mentor.getState(), Id.EntityState.DELETED);
- }
-
- @Override
- protected void assertTestDisconnectUnidirectionalArrayReferenceFromClassType(
- List<ITypedReferenceableInstance> columns, String columnGuid) {
- Assert.assertEquals(columns.size(), 5);
- for (ITypedReferenceableInstance column : columns) {
- if (column.getId()._getId().equals(columnGuid)) {
- assertEquals(column.getId().getState(), Id.EntityState.DELETED);
- } else {
- assertEquals(column.getId().getState(), Id.EntityState.ACTIVE);
- }
- }
-
- }
-
- @Override
- protected void assertTestDisconnectUnidirectionalArrayReferenceFromStructAndTraitTypes(String structContainerGuid)
- throws Exception {
- // Verify that the unidirectional references from the struct and trait instances
- // to the deleted entities were not disconnected.
- ITypedReferenceableInstance structContainerConvertedEntity =
- repositoryService.getEntityDefinition(structContainerGuid);
- ITypedStruct struct = (ITypedStruct) structContainerConvertedEntity.get("struct");
- assertNotNull(struct.get("target"));
- IStruct trait = structContainerConvertedEntity.getTrait("TestTrait");
- assertNotNull(trait);
- assertNotNull(trait.get("target"));
-
- }
-
- @Override
- protected void assertTestDisconnectMapReferenceFromClassType(String mapOwnerGuid) throws Exception {
- ITypedReferenceableInstance mapOwnerInstance = repositoryService.getEntityDefinition(mapOwnerGuid);
- Map<String, ITypedReferenceableInstance> map =
- (Map<String, ITypedReferenceableInstance>) mapOwnerInstance.get("map");
- assertNotNull(map);
- assertEquals(map.size(), 1);
- Map<String, ITypedReferenceableInstance> biMap =
- (Map<String, ITypedReferenceableInstance>) mapOwnerInstance.get("biMap");
- assertNotNull(biMap);
- assertEquals(biMap.size(), 1);
- }
-
- @Override
- protected void assertTestDeleteTargetOfMultiplicityRequiredReference() throws Exception {
- // No-op - it's ok that no exception was thrown if soft deletes are enabled.
- }
-
- @Override
- protected void assertTestLowerBoundsIgnoredOnDeletedEntities(List<ITypedReferenceableInstance> employees) {
-
- Assert.assertEquals(employees.size(), 4, "References to deleted employees should not have been disconnected with soft deletes enabled");
- }
-
- @Override
- protected void assertTestLowerBoundsIgnoredOnCompositeDeletedEntities(String hrDeptGuid) throws Exception {
-
- ITypedReferenceableInstance hrDept = repositoryService.getEntityDefinition(hrDeptGuid);
- Assert.assertEquals(hrDept.getId().getState(), EntityState.DELETED);
- }
-
- @Override
- protected void verifyTestDeleteEntityWithDuplicateReferenceListElements(List columnsPropertyValue) {
-
- // With soft deletes enabled, verify that edge IDs for deleted edges
- // were not removed from the array property list.
- Assert.assertEquals(columnsPropertyValue.size(), 4);
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/0877e47c/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexerMockTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexerMockTest.java b/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexerMockTest.java
deleted file mode 100644
index a98ef38..0000000
--- a/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexerMockTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * 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.graph;
-
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.ha.HAConfiguration;
-import org.apache.atlas.repository.Constants;
-import org.apache.atlas.repository.IndexException;
-import org.apache.atlas.repository.RepositoryException;
-import org.apache.atlas.repository.graphdb.AtlasGraph;
-import org.apache.atlas.repository.graphdb.AtlasGraphManagement;
-import org.apache.atlas.type.AtlasTypeRegistry;
-import org.apache.commons.configuration.Configuration;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import static org.mockito.Mockito.verifyZeroInteractions;
-import static org.mockito.Mockito.when;
-
-public class GraphBackedSearchIndexerMockTest implements IAtlasGraphProvider {
-
- @Mock
- private Configuration configuration;
-
- @Mock
- private AtlasGraph graph;
-
- @Mock
- private AtlasGraphManagement management;
-
- @Mock
- private AtlasTypeRegistry typeRegistry;
-
- @BeforeMethod
- public void setup() {
- MockitoAnnotations.initMocks(this);
- }
-
- @Test
- public void testSearchIndicesAreInitializedOnConstructionWhenHAIsDisabled() throws IndexException, RepositoryException {
- when(configuration.getBoolean(HAConfiguration.ATLAS_SERVER_HA_ENABLED_KEY, false)).thenReturn(false);
- when(graph.getManagementSystem()).thenReturn(management);
-
- GraphBackedSearchIndexer graphBackedSearchIndexer = new GraphBackedSearchIndexer(this, configuration, typeRegistry);
- }
-
- @Test
- public void testSearchIndicesAreNotInitializedOnConstructionWhenHAIsEnabled() throws IndexException, RepositoryException {
- when(configuration.containsKey(HAConfiguration.ATLAS_SERVER_HA_ENABLED_KEY)).thenReturn(true);
- when(configuration.getBoolean(HAConfiguration.ATLAS_SERVER_HA_ENABLED_KEY)).thenReturn(true);
- when(graph.getManagementSystem()).thenReturn(management);
- when(management.containsPropertyKey(Constants.VERTEX_TYPE_PROPERTY_KEY)).thenReturn(true);
-
- new GraphBackedSearchIndexer(this, configuration, typeRegistry);
- verifyZeroInteractions(management);
- }
-
- @Test
- public void testIndicesAreReinitializedWhenServerBecomesActive() throws AtlasException {
- when(configuration.containsKey(HAConfiguration.ATLAS_SERVER_HA_ENABLED_KEY)).thenReturn(true);
- when(configuration.getBoolean(HAConfiguration.ATLAS_SERVER_HA_ENABLED_KEY)).thenReturn(true);
- when(graph.getManagementSystem()).thenReturn(management);
-
- GraphBackedSearchIndexer graphBackedSearchIndexer = new GraphBackedSearchIndexer(this, configuration, typeRegistry);
- graphBackedSearchIndexer.instanceIsActive();
- }
-
-
- @Override
- public AtlasGraph get() {
- return graph;
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/0877e47c/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexerTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexerTest.java b/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexerTest.java
deleted file mode 100644
index feffabf..0000000
--- a/repository/src/test/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexerTest.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
- * 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.graph;
-
-import com.google.inject.Inject;
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.TestModules;
-import org.apache.atlas.TestUtils;
-import org.apache.atlas.repository.Constants;
-import org.apache.atlas.repository.graphdb.AtlasGraph;
-import org.apache.atlas.repository.graphdb.AtlasGraphIndex;
-import org.apache.atlas.repository.graphdb.AtlasGraphManagement;
-import org.apache.atlas.repository.graphdb.AtlasPropertyKey;
-import org.apache.atlas.typesystem.types.ClassType;
-import org.apache.atlas.typesystem.types.DataTypes;
-import org.apache.atlas.typesystem.types.EnumType;
-import org.apache.atlas.typesystem.types.EnumValue;
-import org.apache.atlas.typesystem.types.HierarchicalTypeDefinition;
-import org.apache.atlas.typesystem.types.TypeSystem;
-import org.apache.atlas.typesystem.types.utils.TypesUtil;
-import org.testng.annotations.Guice;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-import java.util.Set;
-
-import static org.apache.atlas.typesystem.types.utils.TypesUtil.createClassTypeDef;
-import static org.testng.Assert.*;
-
-@Guice(modules = TestModules.TestOnlyModule.class)
-public class GraphBackedSearchIndexerTest {
- @Inject
- private GraphBackedSearchIndexer graphBackedSearchIndexer;
-
- @Test
- public void verifySystemMixedIndexes() {
- AtlasGraph graph = TestUtils.getGraph();
- AtlasGraphManagement managementSystem = graph.getManagementSystem();
- try {
- AtlasGraphIndex vertexIndex = managementSystem.getGraphIndex(Constants.VERTEX_INDEX);
- assertNotNull(vertexIndex);
- assertTrue(vertexIndex.isMixedIndex());
- assertFalse(vertexIndex.isEdgeIndex());
- assertTrue(vertexIndex.isVertexIndex());
-
- AtlasGraphIndex edgeIndex = managementSystem.getGraphIndex(Constants.EDGE_INDEX);
- assertNotNull(edgeIndex);
- assertTrue(edgeIndex.isMixedIndex());
- assertTrue(edgeIndex.isEdgeIndex());
- assertFalse(edgeIndex.isVertexIndex());
-
-
- verifyVertexIndexContains(managementSystem, Constants.STATE_PROPERTY_KEY);
- }
- finally {
- managementSystem.rollback();
- }
- }
-
- @Test
- public void verifySystemCompositeIndexes() {
- AtlasGraph graph = TestUtils.getGraph();
- AtlasGraphManagement managementSystem = graph.getManagementSystem();
- try {
- verifySystemCompositeIndex(managementSystem, Constants.GUID_PROPERTY_KEY, true);
- verifyVertexIndexContains(managementSystem, Constants.GUID_PROPERTY_KEY);
-
- verifySystemCompositeIndex(managementSystem, Constants.ENTITY_TYPE_PROPERTY_KEY, false);
- verifyVertexIndexContains(managementSystem, Constants.ENTITY_TYPE_PROPERTY_KEY);
-
- verifySystemCompositeIndex(managementSystem, Constants.SUPER_TYPES_PROPERTY_KEY, false);
- verifyVertexIndexContains(managementSystem, Constants.SUPER_TYPES_PROPERTY_KEY);
-
- verifySystemCompositeIndex(managementSystem, Constants.TRAIT_NAMES_PROPERTY_KEY, false);
- verifyVertexIndexContains(managementSystem, Constants.TRAIT_NAMES_PROPERTY_KEY);
- }
- finally {
- managementSystem.rollback();
- }
- }
-
- @Test
- public void verifyFullTextIndex() {
- AtlasGraph graph = TestUtils.getGraph();
- AtlasGraphManagement managementSystem = graph.getManagementSystem();
- try {
- AtlasGraphIndex fullTextIndex = managementSystem.getGraphIndex(Constants.FULLTEXT_INDEX);
- assertTrue(fullTextIndex.isMixedIndex());
-
- Arrays.asList(fullTextIndex.getFieldKeys()).contains(
- managementSystem.getPropertyKey(Constants.ENTITY_TEXT_PROPERTY_KEY));
- }
- finally {
- managementSystem.rollback();
- }
- }
-
- @Test
- public void verifyTypeStoreIndexes() {
- AtlasGraph graph = TestUtils.getGraph();
- AtlasGraphManagement managementSystem = graph.getManagementSystem();
- try {
- verifySystemCompositeIndex(managementSystem, Constants.TYPENAME_PROPERTY_KEY, true);
- verifyVertexIndexContains(managementSystem, Constants.TYPENAME_PROPERTY_KEY);
-
- verifySystemCompositeIndex(managementSystem, Constants.VERTEX_TYPE_PROPERTY_KEY, false);
- verifyVertexIndexContains(managementSystem, Constants.VERTEX_TYPE_PROPERTY_KEY);
- }
- finally {
- managementSystem.rollback();
- }
-
- }
-
- @Test
- public void verifyUserDefinedTypeIndex() throws AtlasException {
- AtlasGraph graph = TestUtils.getGraph();
- AtlasGraphManagement managementSystem = graph.getManagementSystem();
- try {
- TypeSystem typeSystem = TypeSystem.getInstance();
-
- String enumName = "randomEnum" + TestUtils.randomString(10);
- EnumType managedType = typeSystem.defineEnumType(enumName, new EnumValue("randomEnumValue", 0));
-
- HierarchicalTypeDefinition<ClassType> databaseTypeDefinition =
- createClassTypeDef("Database", "Database type description", null,
- TypesUtil.createUniqueRequiredAttrDef("name", DataTypes.STRING_TYPE),
- TypesUtil.createRequiredAttrDef("managedType", managedType));
-
- ClassType databaseType = typeSystem.defineClassType(databaseTypeDefinition);
- graphBackedSearchIndexer.onAdd(Arrays.asList(databaseType));
-
- verifySystemCompositeIndex(managementSystem, "Database.name" + Constants.ENTITY_TYPE_PROPERTY_KEY, false);
- verifyVertexIndexContains(managementSystem, "Database.name" + Constants.ENTITY_TYPE_PROPERTY_KEY);
- verifySystemCompositeIndex(managementSystem, "Database.name" + Constants.SUPER_TYPES_PROPERTY_KEY, false);
-
- verifyVertexIndexContains(managementSystem, "Database.managedType");
- }
- finally {
- //search indexer uses its own titan management transaction
- managementSystem.rollback();
- }
- }
-
- private void verifyVertexIndexContains(AtlasGraphManagement managementSystem, String indexName) {
- AtlasGraphIndex vertexIndex = managementSystem.getGraphIndex(Constants.VERTEX_INDEX);
- Set<AtlasPropertyKey> fieldKeys = vertexIndex.getFieldKeys();
- Arrays.asList(fieldKeys).contains(managementSystem.getPropertyKey(indexName));
- }
-
- private void verifySystemCompositeIndex(AtlasGraphManagement managementSystem, String indexName, boolean isUnique) {
- AtlasGraphIndex systemIndex = managementSystem.getGraphIndex(indexName);
- assertNotNull(systemIndex);
- assertTrue(systemIndex.isCompositeIndex());
- if (isUnique) {
- assertTrue(systemIndex.isUnique());
- } else {
- assertFalse(systemIndex.isUnique());
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/0877e47c/repository/src/test/java/org/apache/atlas/repository/graph/GraphHelperMockTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/graph/GraphHelperMockTest.java b/repository/src/test/java/org/apache/atlas/repository/graph/GraphHelperMockTest.java
deleted file mode 100644
index a0894cd..0000000
--- a/repository/src/test/java/org/apache/atlas/repository/graph/GraphHelperMockTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/**
- * 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.graph;
-
-import org.apache.atlas.repository.RepositoryException;
-import org.apache.atlas.repository.graphdb.AtlasEdge;
-import org.apache.atlas.repository.graphdb.AtlasEdgeDirection;
-import org.apache.atlas.repository.graphdb.AtlasGraph;
-import org.apache.atlas.repository.graphdb.AtlasVertex;
-import org.mockito.MockitoAnnotations;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import java.util.Iterator;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import static org.testng.Assert.assertEquals;
-
-public class GraphHelperMockTest {
-
- private GraphHelper graphHelperInstance;
-
- private AtlasGraph graph;
-
- @BeforeClass
- public void setup() {
- MockitoAnnotations.initMocks(this);
- graph = mock(AtlasGraph.class);
- graphHelperInstance = GraphHelper.getInstance(graph);
- }
-
- @Test(expectedExceptions = RepositoryException.class)
- public void testGetOrCreateEdgeLabelWithMaxRetries() throws Exception {
- final String edgeLabel = "testLabel";
- AtlasVertex v1 = mock(AtlasVertex.class);
- AtlasVertex v2 = mock(AtlasVertex.class);
-
- Iterable noEdgesIterable = new Iterable<AtlasEdge>() {
- @Override
- public Iterator<AtlasEdge> iterator() {
- return new Iterator<AtlasEdge>() {
- @Override
- public boolean hasNext() {
- return false;
- }
-
- @Override
- public AtlasEdge next() {
- return null;
- }
-
- @Override
- public void remove() {
- }
- };
- }
- };
- when(v2.getEdges(AtlasEdgeDirection.IN)).thenReturn(noEdgesIterable);
- when(v1.getEdges(AtlasEdgeDirection.OUT)).thenReturn(noEdgesIterable);
-
- when(v1.getId()).thenReturn("1234");
- when(v2.getId()).thenReturn("5678");
- when(graph.addEdge(v1, v2, edgeLabel)).thenThrow(new RuntimeException("Unique property constraint violated"));
- graphHelperInstance.getOrCreateEdge(v1, v2, edgeLabel);
- }
-
- @Test
- public void testGetOrCreateEdgeLabelWithRetries() throws Exception {
- final String edgeLabel = "testLabel";
- AtlasVertex v1 = mock(AtlasVertex.class);
- AtlasVertex v2 = mock(AtlasVertex.class);
- AtlasEdge edge = mock(AtlasEdge.class);
-
- Iterable noEdgesIterable = new Iterable<AtlasEdge>() {
- @Override
- public Iterator<AtlasEdge> iterator() {
- return new Iterator<AtlasEdge>() {
- @Override
- public boolean hasNext() {
- return false;
- }
-
- @Override
- public AtlasEdge next() {
- return null;
- }
-
- @Override
- public void remove() {
- }
- };
- }
- };
- when(v2.getEdges(AtlasEdgeDirection.IN)).thenReturn(noEdgesIterable);
- when(v1.getEdges(AtlasEdgeDirection.OUT)).thenReturn(noEdgesIterable);
-
- when(v1.getId()).thenReturn("v1");
- when(v2.getId()).thenReturn("v2");
- when(edge.getId()).thenReturn("edge");
- when(graph.addEdge(v1, v2, edgeLabel))
- .thenThrow(new RuntimeException("Unique property constraint violated")).thenReturn(edge);
- AtlasEdge redge = graphHelperInstance.getOrCreateEdge(v1, v2, edgeLabel);
- assertEquals(edge, redge);
- }
-}