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:37 UTC
[15/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/store/graph/v1/AtlasRelationshipStoreV1Test.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipStoreV1Test.java b/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipStoreV1Test.java
deleted file mode 100644
index 8c58a92..0000000
--- a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipStoreV1Test.java
+++ /dev/null
@@ -1,623 +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.store.graph.v1;
-
-import com.google.common.collect.ImmutableList;
-import org.apache.atlas.RequestContextV1;
-import org.apache.atlas.TestModules;
-import org.apache.atlas.TestUtilsV2;
-import org.apache.atlas.exception.AtlasBaseException;
-import org.apache.atlas.model.instance.AtlasEntity;
-import org.apache.atlas.model.instance.AtlasEntity.AtlasEntitiesWithExtInfo;
-import org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo;
-import org.apache.atlas.model.instance.AtlasEntityHeader;
-import org.apache.atlas.model.instance.AtlasObjectId;
-import org.apache.atlas.model.instance.AtlasRelatedObjectId;
-import org.apache.atlas.model.instance.EntityMutationResponse;
-import org.apache.atlas.model.typedef.AtlasTypesDef;
-import org.apache.atlas.repository.graph.AtlasGraphProvider;
-import org.apache.atlas.repository.graph.GraphBackedSearchIndexer;
-import org.apache.atlas.repository.store.bootstrap.AtlasTypeDefStoreInitializer;
-import org.apache.atlas.repository.store.graph.AtlasEntityStore;
-import org.apache.atlas.repository.store.graph.AtlasRelationshipStore;
-import org.apache.atlas.store.AtlasTypeDefStore;
-import org.apache.atlas.type.AtlasEntityType;
-import org.apache.atlas.type.AtlasTypeRegistry;
-import org.apache.commons.collections.CollectionUtils;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Guice;
-import org.testng.annotations.Test;
-
-import javax.inject.Inject;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.apache.atlas.TestRelationshipUtilsV2.EMPLOYEE_TYPE;
-import static org.apache.atlas.TestRelationshipUtilsV2.getDepartmentEmployeeInstances;
-import static org.apache.atlas.TestRelationshipUtilsV2.getDepartmentEmployeeTypes;
-import static org.apache.atlas.TestRelationshipUtilsV2.getInverseReferenceTestTypes;
-import static org.apache.atlas.TestUtils.NAME;
-import static org.apache.atlas.type.AtlasTypeUtil.getAtlasObjectId;
-import static org.mockito.Mockito.mock;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-
-@Guice(modules = TestModules.TestOnlyModule.class)
-public abstract class AtlasRelationshipStoreV1Test {
-
- @Inject
- AtlasTypeRegistry typeRegistry;
-
- @Inject
- AtlasTypeDefStore typeDefStore;
-
- @Inject
- DeleteHandlerV1 deleteHandler;
-
- @Inject
- EntityGraphMapper graphMapper;
-
- AtlasEntityStore entityStore;
- AtlasRelationshipStore relationshipStore;
- AtlasEntityChangeNotifier mockChangeNotifier = mock(AtlasEntityChangeNotifier.class);
-
- protected Map<String, AtlasObjectId> employeeNameIdMap = new HashMap<>();
-
- @BeforeClass
- public void setUp() throws Exception {
- new GraphBackedSearchIndexer(typeRegistry);
-
- // create employee relationship types
- AtlasTypesDef employeeTypes = getDepartmentEmployeeTypes();
- typeDefStore.createTypesDef(employeeTypes);
-
- AtlasEntitiesWithExtInfo employeeInstances = getDepartmentEmployeeInstances();
- EntityMutationResponse response = entityStore.createOrUpdate(new AtlasEntityStream(employeeInstances), false);
-
- for (AtlasEntityHeader entityHeader : response.getCreatedEntities()) {
- employeeNameIdMap.put((String) entityHeader.getAttribute(NAME), getAtlasObjectId(entityHeader));
- }
-
- init();
- AtlasTypesDef typesDef = getInverseReferenceTestTypes();
-
- AtlasTypesDef typesToCreate = AtlasTypeDefStoreInitializer.getTypesToCreate(typesDef, typeRegistry);
-
- if (!typesToCreate.isEmpty()) {
- typeDefStore.createTypesDef(typesToCreate);
- }
- }
-
- @BeforeTest
- public void init() throws Exception {
- entityStore = new AtlasEntityStoreV1(deleteHandler, typeRegistry, mockChangeNotifier, graphMapper);
- relationshipStore = new AtlasRelationshipStoreV1(typeRegistry);
-
- RequestContextV1.clear();
- RequestContextV1.get().setUser(TestUtilsV2.TEST_USER);
- }
-
- @AfterClass
- public void clear() {
- AtlasGraphProvider.cleanup();
- }
-
- @Test
- public void testDepartmentEmployeeEntitiesUsingRelationship() throws Exception {
- AtlasObjectId hrId = employeeNameIdMap.get("hr");
- AtlasObjectId maxId = employeeNameIdMap.get("Max");
- AtlasObjectId johnId = employeeNameIdMap.get("John");
- AtlasObjectId juliusId = employeeNameIdMap.get("Julius");
- AtlasObjectId janeId = employeeNameIdMap.get("Jane");
- AtlasObjectId mikeId = employeeNameIdMap.get("Mike");
-
- AtlasEntity hrDept = getEntityFromStore(hrId.getGuid());
- AtlasEntity max = getEntityFromStore(maxId.getGuid());
- AtlasEntity john = getEntityFromStore(johnId.getGuid());
- AtlasEntity julius = getEntityFromStore(juliusId.getGuid());
- AtlasEntity jane = getEntityFromStore(janeId.getGuid());
- AtlasEntity mike = getEntityFromStore(mikeId.getGuid());
-
- // Department relationship attributes
- List<AtlasObjectId> deptEmployees = toAtlasObjectIds(hrDept.getRelationshipAttribute("employees"));
- assertNotNull(deptEmployees);
- assertEquals(deptEmployees.size(), 5);
- assertObjectIdsContains(deptEmployees, maxId);
- assertObjectIdsContains(deptEmployees, johnId);
- assertObjectIdsContains(deptEmployees, juliusId);
- assertObjectIdsContains(deptEmployees, janeId);
- assertObjectIdsContains(deptEmployees, mikeId);
-
- // Max employee validation
- AtlasObjectId maxDepartmentId = toAtlasObjectId(max.getRelationshipAttribute("department"));
- assertNotNull(maxDepartmentId);
- assertObjectIdEquals(maxDepartmentId, hrId);
-
- AtlasObjectId maxManagerId = toAtlasObjectId(max.getRelationshipAttribute("manager"));
- assertNotNull(maxManagerId);
- assertObjectIdEquals(maxManagerId, janeId);
-
- List<AtlasObjectId> maxMentorsId = toAtlasObjectIds(max.getRelationshipAttribute("mentors"));
- assertNotNull(maxMentorsId);
- assertEquals(maxMentorsId.size(), 1);
- assertObjectIdEquals(maxMentorsId.get(0), juliusId);
-
- List<AtlasObjectId> maxMenteesId = toAtlasObjectIds(max.getRelationshipAttribute("mentees"));
- assertNotNull(maxMenteesId);
- assertEquals(maxMenteesId.size(), 1);
- assertObjectIdEquals(maxMenteesId.get(0), johnId);
-
- List<AtlasObjectId> maxFriendsIds = toAtlasObjectIds(max.getRelationshipAttribute("friends"));
- assertNotNull(maxFriendsIds);
- assertEquals(maxFriendsIds.size(), 2);
- assertObjectIdsContains(maxFriendsIds, mikeId);
- assertObjectIdsContains(maxFriendsIds, johnId);
-
- // John Employee validation
- AtlasObjectId johnDepartmentId = toAtlasObjectId(john.getRelationshipAttribute("department"));
- assertNotNull(johnDepartmentId);
- assertObjectIdEquals(johnDepartmentId, hrId);
-
- AtlasObjectId johnManagerId = toAtlasObjectId(john.getRelationshipAttribute("manager"));
- assertNotNull(johnManagerId);
- assertObjectIdEquals(johnManagerId, janeId);
-
- List<AtlasObjectId> johnMentorIds = toAtlasObjectIds(john.getRelationshipAttribute("mentors"));
- assertNotNull(johnMentorIds);
- assertEquals(johnMentorIds.size(), 2);
- assertObjectIdsContains(johnMentorIds, maxId);
- assertObjectIdsContains(johnMentorIds, juliusId);
-
- List<AtlasObjectId> johnMenteesId = toAtlasObjectIds(john.getRelationshipAttribute("mentees"));
- assertEmpty(johnMenteesId);
-
- List<AtlasObjectId> johnFriendsIds = toAtlasObjectIds(john.getRelationshipAttribute("friends"));
- assertNotNull(johnFriendsIds);
- assertEquals(johnFriendsIds.size(), 2);
- assertObjectIdsContains(johnFriendsIds, mikeId);
- assertObjectIdsContains(johnFriendsIds, maxId);
-
- // Mike Employee validation
- AtlasObjectId mikeDepartmentId = toAtlasObjectId(mike.getRelationshipAttribute("department"));
- assertNotNull(mikeDepartmentId);
- assertObjectIdEquals(mikeDepartmentId, hrId);
-
- AtlasObjectId mikeManagerId = toAtlasObjectId(mike.getRelationshipAttribute("manager"));
- assertNotNull(mikeManagerId);
- assertObjectIdEquals(mikeManagerId, juliusId);
-
- List<AtlasObjectId> mikeMentorIds = toAtlasObjectIds(mike.getRelationshipAttribute("mentors"));
- assertEmpty(mikeMentorIds);
-
- List<AtlasObjectId> mikeMenteesId = toAtlasObjectIds(mike.getRelationshipAttribute("mentees"));
- assertEmpty(mikeMenteesId);
-
- List<AtlasObjectId> mikeFriendsIds = toAtlasObjectIds(mike.getRelationshipAttribute("friends"));
- assertNotNull(mikeFriendsIds);
- assertEquals(mikeFriendsIds.size(), 2);
- assertObjectIdsContains(mikeFriendsIds, maxId);
- assertObjectIdsContains(mikeFriendsIds, johnId);
-
- // Jane Manager validation
- AtlasObjectId janeDepartmentId = toAtlasObjectId(jane.getRelationshipAttribute("department"));
- assertNotNull(janeDepartmentId);
- assertObjectIdEquals(janeDepartmentId, hrId);
-
- AtlasObjectId janeManagerId = toAtlasObjectId(jane.getRelationshipAttribute("manager"));
- assertNull(janeManagerId);
-
- List<AtlasObjectId> janeMentorIds = toAtlasObjectIds(jane.getRelationshipAttribute("mentors"));
- assertEmpty(janeMentorIds);
-
- List<AtlasObjectId> janeMenteesId = toAtlasObjectIds(jane.getRelationshipAttribute("mentees"));
- assertEmpty(janeMenteesId);
-
- List<AtlasObjectId> janeSubordinateIds = toAtlasObjectIds(jane.getRelationshipAttribute("subordinates"));
- assertNotNull(janeSubordinateIds);
- assertEquals(janeSubordinateIds.size(), 2);
- assertObjectIdsContains(janeSubordinateIds, maxId);
- assertObjectIdsContains(janeSubordinateIds, johnId);
-
- List<AtlasObjectId> janeFriendsIds = toAtlasObjectIds(jane.getRelationshipAttribute("friends"));
- assertEmpty(janeFriendsIds);
-
- AtlasObjectId janeSiblingId = toAtlasObjectId(jane.getRelationshipAttribute("sibling"));
- assertNotNull(janeSiblingId);
- assertObjectIdEquals(janeSiblingId, juliusId);
-
- // Julius Manager validation
- AtlasObjectId juliusDepartmentId = toAtlasObjectId(julius.getRelationshipAttribute("department"));
- assertNotNull(juliusDepartmentId);
- assertObjectIdEquals(juliusDepartmentId, hrId);
-
- AtlasObjectId juliusManagerId = toAtlasObjectId(julius.getRelationshipAttribute("manager"));
- assertNull(juliusManagerId);
-
- List<AtlasObjectId> juliusMentorIds = toAtlasObjectIds(julius.getRelationshipAttribute("mentors"));
- assertEmpty(juliusMentorIds);
-
- List<AtlasObjectId> juliusMenteesId = toAtlasObjectIds(julius.getRelationshipAttribute("mentees"));
- assertNotNull(juliusMenteesId);
- assertEquals(juliusMenteesId.size(), 2);
- assertObjectIdsContains(juliusMenteesId, maxId);
- assertObjectIdsContains(juliusMenteesId, johnId);
-
- List<AtlasObjectId> juliusSubordinateIds = toAtlasObjectIds(julius.getRelationshipAttribute("subordinates"));
- assertNotNull(juliusSubordinateIds);
- assertEquals(juliusSubordinateIds.size(), 1);
- assertObjectIdsContains(juliusSubordinateIds, mikeId);
-
- List<AtlasObjectId> juliusFriendsIds = toAtlasObjectIds(julius.getRelationshipAttribute("friends"));
- assertEmpty(juliusFriendsIds);
-
- AtlasObjectId juliusSiblingId = toAtlasObjectId(julius.getRelationshipAttribute("sibling"));
- assertNotNull(juliusSiblingId);
- assertObjectIdEquals(juliusSiblingId, janeId);
- }
-
- // Seeing intermittent failures with janus profile, disabling it until its fixed.
- @Test(enabled = false)
- public void testRelationshipAttributeUpdate_NonComposite_OneToMany() throws Exception {
- AtlasObjectId maxId = employeeNameIdMap.get("Max");
- AtlasObjectId juliusId = employeeNameIdMap.get("Julius");
- AtlasObjectId janeId = employeeNameIdMap.get("Jane");
- AtlasObjectId mikeId = employeeNameIdMap.get("Mike");
- AtlasObjectId johnId = employeeNameIdMap.get("John");
-
- // Change Max's Employee.manager reference to Julius and apply the change as a partial update.
- // This should also update Julius to add Max to the inverse Manager.subordinates reference.
- AtlasEntity maxEntityForUpdate = new AtlasEntity(EMPLOYEE_TYPE);
- maxEntityForUpdate.setRelationshipAttribute("manager", juliusId);
-
- AtlasEntityType employeeType = typeRegistry.getEntityTypeByName(EMPLOYEE_TYPE);
- Map<String, Object> uniqAttributes = Collections.<String, Object>singletonMap("name", "Max");
- EntityMutationResponse updateResponse = entityStore.updateByUniqueAttributes(employeeType, uniqAttributes , new AtlasEntityWithExtInfo(maxEntityForUpdate));
-
- List<AtlasEntityHeader> partialUpdatedEntities = updateResponse.getPartialUpdatedEntities();
- assertEquals(partialUpdatedEntities.size(), 3);
- // 3 entities should have been updated:
- // * Max to change the Employee.manager reference
- // * Julius to add Max to Manager.subordinates
- // * Jane to remove Max from Manager.subordinates
-
- AtlasEntitiesWithExtInfo updatedEntities = entityStore.getByIds(ImmutableList.of(maxId.getGuid(), juliusId.getGuid(), janeId.getGuid()));
-
- // Max's manager updated as Julius
- AtlasEntity maxEntity = updatedEntities.getEntity(maxId.getGuid());
- verifyRelationshipAttributeValue(maxEntity, "manager", juliusId.getGuid());
-
- // Max added to the subordinate list of Julius, existing subordinate is Mike
- AtlasEntity juliusEntity = updatedEntities.getEntity(juliusId.getGuid());
- verifyRelationshipAttributeList(juliusEntity, "subordinates", ImmutableList.of(maxId, mikeId));
-
- // Max removed from the subordinate list of Julius
- AtlasEntity janeEntity = updatedEntities.getEntity(janeId.getGuid());
-
- // Jane's subordinates list includes John and Max for soft delete
- // Jane's subordinates list includes only John for hard delete
- verifyRelationshipAttributeUpdate_NonComposite_OneToMany(janeEntity);
-
- // Remove Mike from Max's friends list
- // Max's current friends: [Mike, John]
- // Max's updated friends: [Julius, John]
- maxEntityForUpdate = new AtlasEntity(EMPLOYEE_TYPE);
- maxEntityForUpdate.setRelationshipAttribute("friends", ImmutableList.of(johnId, juliusId));
-
- init();
- updateResponse = entityStore.updateByUniqueAttributes(employeeType, uniqAttributes , new AtlasEntityWithExtInfo(maxEntityForUpdate));
-
- partialUpdatedEntities = updateResponse.getPartialUpdatedEntities();
- assertEquals(partialUpdatedEntities.size(), 3);
- // 3 entities should have been updated:
- // * Max added Julius and removed Mike from Employee.friends
- // * Mike removed Max from Employee.friends
- // * Julius added Max in Employee.friends
-
- updatedEntities = entityStore.getByIds(ImmutableList.of(maxId.getGuid(), mikeId.getGuid(), johnId.getGuid(), juliusId.getGuid()));
-
- maxEntity = updatedEntities.getEntity(maxId.getGuid());
- juliusEntity = updatedEntities.getEntity(juliusId.getGuid());
- AtlasEntity mikeEntity = updatedEntities.getEntity(mikeId.getGuid());
- AtlasEntity johnEntity = updatedEntities.getEntity(johnId.getGuid());
-
- verifyRelationshipAttributeUpdate_ManyToMany_Friends(maxEntity, juliusEntity, mikeEntity, johnEntity);
-
- // Remove Julius from Jane's sibling and add Mike as new sibling
- AtlasEntity juliusEntityForUpdate = new AtlasEntity(EMPLOYEE_TYPE);
- juliusEntityForUpdate.setRelationshipAttribute("sibling", mikeId);
-
- init();
- updateResponse = entityStore.updateByUniqueAttributes(employeeType, Collections.<String, Object>singletonMap("name", "Julius") , new AtlasEntityWithExtInfo(juliusEntityForUpdate));
- partialUpdatedEntities = updateResponse.getPartialUpdatedEntities();
- assertEquals(partialUpdatedEntities.size(), 3);
-
- updatedEntities = entityStore.getByIds(ImmutableList.of(juliusId.getGuid(), janeId.getGuid(), mikeId.getGuid()));
-
- juliusEntity = updatedEntities.getEntity(juliusId.getGuid());
- janeEntity = updatedEntities.getEntity(janeId.getGuid());
- mikeEntity = updatedEntities.getEntity(mikeId.getGuid());
-
- verifyRelationshipAttributeUpdate_OneToOne_Sibling(juliusEntity, janeEntity, mikeEntity);
- }
-
- @Test
- public void testRelationshipAttributeUpdate_NonComposite_ManyToOne() throws Exception {
- AtlasEntity a1 = new AtlasEntity("A");
- a1.setAttribute(NAME, "a1_name");
-
- AtlasEntity a2 = new AtlasEntity("A");
- a2.setAttribute(NAME, "a2_name");
-
- AtlasEntity a3 = new AtlasEntity("A");
- a3.setAttribute(NAME, "a3_name");
-
- AtlasEntity b = new AtlasEntity("B");
- b.setAttribute(NAME, "b_name");
-
- AtlasEntitiesWithExtInfo entitiesWithExtInfo = new AtlasEntitiesWithExtInfo();
- entitiesWithExtInfo.addEntity(a1);
- entitiesWithExtInfo.addEntity(a2);
- entitiesWithExtInfo.addEntity(a3);
- entitiesWithExtInfo.addEntity(b);
- entityStore.createOrUpdate(new AtlasEntityStream(entitiesWithExtInfo) , false);
-
- AtlasEntity bPartialUpdate = new AtlasEntity("B");
- bPartialUpdate.setRelationshipAttribute("manyA", ImmutableList.of(getAtlasObjectId(a1), getAtlasObjectId(a2)));
-
- init();
- EntityMutationResponse response = entityStore.updateByUniqueAttributes(typeRegistry.getEntityTypeByName("B"),
- Collections.singletonMap(NAME, b.getAttribute(NAME)),
- new AtlasEntityWithExtInfo(bPartialUpdate));
- // Verify 3 entities were updated:
- // * set b.manyA reference to a1 and a2
- // * set inverse a1.oneB reference to b
- // * set inverse a2.oneB reference to b
- assertEquals(response.getPartialUpdatedEntities().size(), 3);
- AtlasEntitiesWithExtInfo updatedEntities = entityStore.getByIds(ImmutableList.of(a1.getGuid(), a2.getGuid(), b.getGuid()));
-
- AtlasEntity a1Entity = updatedEntities.getEntity(a1.getGuid());
- verifyRelationshipAttributeValue(a1Entity, "oneB", b.getGuid());
-
- AtlasEntity a2Entity = updatedEntities.getEntity(a2.getGuid());
- verifyRelationshipAttributeValue(a2Entity, "oneB", b.getGuid());
-
- AtlasEntity bEntity = updatedEntities.getEntity(b.getGuid());
- verifyRelationshipAttributeList(bEntity, "manyA", ImmutableList.of(getAtlasObjectId(a1), getAtlasObjectId(a2)));
-
-
- bPartialUpdate.setRelationshipAttribute("manyA", ImmutableList.of(getAtlasObjectId(a3)));
- init();
- response = entityStore.updateByUniqueAttributes(typeRegistry.getEntityTypeByName("B"),
- Collections.singletonMap(NAME, b.getAttribute(NAME)),
- new AtlasEntityWithExtInfo(bPartialUpdate));
- // Verify 4 entities were updated:
- // * set b.manyA reference to a3
- // * set inverse a3.oneB reference to b
- // * disconnect inverse a1.oneB reference to b
- // * disconnect inverse a2.oneB reference to b
- assertEquals(response.getPartialUpdatedEntities().size(), 4);
- init();
-
- updatedEntities = entityStore.getByIds(ImmutableList.of(a1.getGuid(), a2.getGuid(), a3.getGuid(), b.getGuid()));
- a1Entity = updatedEntities.getEntity(a1.getGuid());
- a2Entity = updatedEntities.getEntity(a2.getGuid());
- bEntity = updatedEntities.getEntity(b.getGuid());
-
- AtlasEntity a3Entity = updatedEntities.getEntity(a3.getGuid());
- verifyRelationshipAttributeValue(a3Entity, "oneB", b.getGuid());
-
- verifyRelationshipAttributeUpdate_NonComposite_ManyToOne(a1Entity, a2Entity, a3Entity, bEntity);
- }
-
- @Test
- public void testRelationshipAttributeUpdate_NonComposite_OneToOne() throws Exception {
- AtlasEntity a1 = new AtlasEntity("A");
- a1.setAttribute(NAME, "a1_name");
-
- AtlasEntity a2 = new AtlasEntity("A");
- a2.setAttribute(NAME, "a2_name");
-
- AtlasEntity b = new AtlasEntity("B");
- b.setAttribute(NAME, "b_name");
-
- AtlasEntitiesWithExtInfo entitiesWithExtInfo = new AtlasEntitiesWithExtInfo();
- entitiesWithExtInfo.addEntity(a1);
- entitiesWithExtInfo.addEntity(a2);
- entitiesWithExtInfo.addEntity(b);
-
- EntityMutationResponse response = entityStore.createOrUpdate(new AtlasEntityStream(entitiesWithExtInfo) , false);
-
- AtlasEntity partialUpdateB = new AtlasEntity("B");
- partialUpdateB.setRelationshipAttribute("a", getAtlasObjectId(a1));
-
- init();
- AtlasEntityType bType = typeRegistry.getEntityTypeByName("B");
-
- response = entityStore.updateByUniqueAttributes(bType, Collections.singletonMap(NAME, b.getAttribute(NAME)), new AtlasEntityWithExtInfo(partialUpdateB));
- List<AtlasEntityHeader> partialUpdatedEntitiesHeader = response.getPartialUpdatedEntities();
- // Verify 2 entities were updated:
- // * set b.a reference to a1
- // * set inverse a1.b reference to b
- assertEquals(partialUpdatedEntitiesHeader.size(), 2);
- AtlasEntitiesWithExtInfo partialUpdatedEntities = entityStore.getByIds(ImmutableList.of(a1.getGuid(), b.getGuid()));
-
- AtlasEntity a1Entity = partialUpdatedEntities.getEntity(a1.getGuid());
- verifyRelationshipAttributeValue(a1Entity, "b", b.getGuid());
-
- AtlasEntity bEntity = partialUpdatedEntities.getEntity(b.getGuid());
- verifyRelationshipAttributeValue(bEntity, "a", a1.getGuid());
-
- init();
-
- // Update b.a to reference a2.
- partialUpdateB.setRelationshipAttribute("a", getAtlasObjectId(a2));
- response = entityStore.updateByUniqueAttributes(bType, Collections.<String, Object>singletonMap(NAME, b.getAttribute(NAME)), new AtlasEntityWithExtInfo(partialUpdateB));
- partialUpdatedEntitiesHeader = response.getPartialUpdatedEntities();
- // Verify 3 entities were updated:
- // * set b.a reference to a2
- // * set a2.b reference to b
- // * disconnect a1.b reference
- assertEquals(partialUpdatedEntitiesHeader.size(), 3);
- partialUpdatedEntities = entityStore.getByIds(ImmutableList.of(a1.getGuid(), a2.getGuid(), b.getGuid()));
-
- bEntity = partialUpdatedEntities.getEntity(b.getGuid());
- verifyRelationshipAttributeValue(bEntity, "a", a2.getGuid());
-
- AtlasEntity a2Entity = partialUpdatedEntities.getEntity(a2.getGuid());
- verifyRelationshipAttributeValue(a2Entity, "b", b.getGuid());
-
- a1Entity = partialUpdatedEntities.getEntity(a1.getGuid());
- verifyRelationshipAttributeUpdate_NonComposite_OneToOne(a1Entity, bEntity);
- }
-
- @Test
- public void testRelationshipAttributeUpdate_NonComposite_ManyToMany() throws Exception {
- AtlasEntity a1 = new AtlasEntity("A");
- a1.setAttribute(NAME, "a1_name");
-
- AtlasEntity a2 = new AtlasEntity("A");
- a2.setAttribute(NAME, "a2_name");
-
- AtlasEntity a3 = new AtlasEntity("A");
- a3.setAttribute(NAME, "a3_name");
-
- AtlasEntity b1 = new AtlasEntity("B");
- b1.setAttribute(NAME, "b1_name");
-
- AtlasEntity b2 = new AtlasEntity("B");
- b2.setAttribute(NAME, "b2_name");
-
- AtlasEntitiesWithExtInfo entitiesWithExtInfo = new AtlasEntitiesWithExtInfo();
- entitiesWithExtInfo.addEntity(a1);
- entitiesWithExtInfo.addEntity(a2);
- entitiesWithExtInfo.addEntity(a3);
- entitiesWithExtInfo.addEntity(b1);
- entitiesWithExtInfo.addEntity(b2);
- entityStore.createOrUpdate(new AtlasEntityStream(entitiesWithExtInfo) , false);
-
- AtlasEntity b1PartialUpdate = new AtlasEntity("B");
- b1PartialUpdate.setRelationshipAttribute("manyToManyA", ImmutableList.of(getAtlasObjectId(a1), getAtlasObjectId(a2)));
-
- init();
- EntityMutationResponse response = entityStore.updateByUniqueAttributes(typeRegistry.getEntityTypeByName("B"),
- Collections.singletonMap(NAME, b1.getAttribute(NAME)),
- new AtlasEntityWithExtInfo(b1PartialUpdate));
-
- List<AtlasEntityHeader> updatedEntityHeaders = response.getPartialUpdatedEntities();
- assertEquals(updatedEntityHeaders.size(), 3);
-
- AtlasEntitiesWithExtInfo updatedEntities = entityStore.getByIds(ImmutableList.of(a1.getGuid(), a2.getGuid(), b1.getGuid()));
-
- AtlasEntity b1Entity = updatedEntities.getEntity(b1.getGuid());
- verifyRelationshipAttributeList(b1Entity, "manyToManyA", ImmutableList.of(getAtlasObjectId(a1), getAtlasObjectId(a2)));
-
- AtlasEntity a1Entity = updatedEntities.getEntity(a1.getGuid());
- verifyRelationshipAttributeList(a1Entity, "manyB", ImmutableList.of(getAtlasObjectId(b1)));
-
- AtlasEntity a2Entity = updatedEntities.getEntity(a2.getGuid());
- verifyRelationshipAttributeList(a2Entity, "manyB", ImmutableList.of(getAtlasObjectId(b1)));
- }
-
- protected abstract void verifyRelationshipAttributeUpdate_NonComposite_OneToOne(AtlasEntity a1, AtlasEntity b);
-
- protected abstract void verifyRelationshipAttributeUpdate_NonComposite_OneToMany(AtlasEntity entity) throws Exception;
-
- protected abstract void verifyRelationshipAttributeUpdate_NonComposite_ManyToOne(AtlasEntity a1, AtlasEntity a2, AtlasEntity a3, AtlasEntity b);
-
- protected abstract void verifyRelationshipAttributeUpdate_ManyToMany_Friends(AtlasEntity e1, AtlasEntity e2, AtlasEntity e3, AtlasEntity e4) throws Exception;
-
- protected abstract void verifyRelationshipAttributeUpdate_OneToOne_Sibling(AtlasEntity e1, AtlasEntity e2, AtlasEntity e3) throws Exception;
-
- protected static void assertObjectIdsContains(List<AtlasObjectId> objectIds, AtlasObjectId objectId) {
- assertTrue(CollectionUtils.isNotEmpty(objectIds));
- assertTrue(objectIds.contains(objectId));
- }
-
- protected static void assertObjectIdEquals(AtlasObjectId objId1, AtlasObjectId objId2) {
- assertTrue(objId1.equals(objId2));
- }
-
- private static void assertEmpty(List collection) {
- assertTrue(collection != null && collection.isEmpty());
- }
-
- protected static List<AtlasObjectId> toAtlasObjectIds(Object object) {
- List<AtlasObjectId> ret = new ArrayList<>();
-
- if (object instanceof List) {
- List<?> objectIds = (List) object;
-
- if (CollectionUtils.isNotEmpty(objectIds)) {
- for (Object obj : objectIds) {
- if (obj instanceof AtlasRelatedObjectId) {
- AtlasRelatedObjectId relatedObjectId = (AtlasRelatedObjectId) obj;
- ret.add(new AtlasObjectId(relatedObjectId.getGuid(), relatedObjectId.getTypeName(), relatedObjectId.getUniqueAttributes()));
- }
- }
- }
- }
-
- return ret;
- }
-
- protected static AtlasObjectId toAtlasObjectId(Object object) {
- if (object instanceof AtlasRelatedObjectId) {
- AtlasRelatedObjectId relatedObjectId = (AtlasRelatedObjectId) object;
- return new AtlasObjectId(relatedObjectId.getGuid(), relatedObjectId.getTypeName(), relatedObjectId.getUniqueAttributes());
- }
-
- return null;
- }
-
- private AtlasEntity getEntityFromStore(String guid) throws AtlasBaseException {
- AtlasEntityWithExtInfo entity = guid != null ? entityStore.getById(guid) : null;
-
- return entity != null ? entity.getEntity() : null;
- }
-
- protected static void verifyRelationshipAttributeList(AtlasEntity entity, String relationshipAttrName, List<AtlasObjectId> expectedValues) {
- Object refValue = entity.getRelationshipAttribute(relationshipAttrName);
- assertTrue(refValue instanceof List);
-
- List<AtlasObjectId> refList = toAtlasObjectIds(refValue);
- assertEquals(refList.size(), expectedValues.size());
-
- if (expectedValues.size() > 0) {
- assertTrue(refList.containsAll(expectedValues));
- }
- }
-
- protected static void verifyRelationshipAttributeValue(AtlasEntity entity, String relationshipAttrName, String expectedGuid) {
- Object refValue = entity.getRelationshipAttribute(relationshipAttrName);
- if (expectedGuid == null) {
- assertNull(refValue);
- }
- else {
- assertTrue(refValue instanceof AtlasObjectId);
- AtlasObjectId referencedObjectId = (AtlasObjectId) refValue;
- assertEquals(referencedObjectId.getGuid(), expectedGuid);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/atlas/blob/0877e47c/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/HardDeleteHandlerV1Test.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/HardDeleteHandlerV1Test.java b/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/HardDeleteHandlerV1Test.java
deleted file mode 100644
index 407ebff..0000000
--- a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/HardDeleteHandlerV1Test.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
- * <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.store.graph.v1;
-
-
-import org.apache.atlas.AtlasClient;
-import org.apache.atlas.AtlasException;
-import org.apache.atlas.TestModules;
-import org.apache.atlas.TestUtils;
-import org.apache.atlas.exception.AtlasBaseException;
-import org.apache.atlas.model.instance.AtlasEntity;
-import org.apache.atlas.model.instance.AtlasEntityHeader;
-import org.apache.atlas.model.instance.AtlasObjectId;
-import org.apache.atlas.repository.Constants;
-import org.apache.atlas.repository.graph.GraphHelper;
-import org.apache.atlas.repository.graphdb.AtlasVertex;
-import org.apache.atlas.typesystem.IStruct;
-import org.apache.atlas.typesystem.ITypedReferenceableInstance;
-import org.apache.atlas.typesystem.ITypedStruct;
-import org.testng.Assert;
-import org.testng.annotations.Guice;
-
-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;
-
-@Guice(modules = TestModules.HardDeleteModule.class)
-public class HardDeleteHandlerV1Test extends AtlasDeleteHandlerV1Test {
-
-
- @Override
- protected void assertTableForTestDeleteReference(String tableId) {
- //entity is deleted. So, no assertions
- }
-
- @Override
- protected void assertColumnForTestDeleteReference(final AtlasEntity.AtlasEntityWithExtInfo tableInstance) throws AtlasBaseException {
- List<AtlasObjectId> columns = (List<AtlasObjectId>) tableInstance.getEntity().getAttribute(COLUMNS_ATTR_NAME);
- assertNull(columns);
- }
-
- @Override
- protected void assertProcessForTestDeleteReference(final AtlasEntityHeader processInstance) throws Exception {
- //assert that outputs is empty
- ITypedReferenceableInstance newProcess =
- metadataService.getEntityDefinition(processInstance.getGuid());
- assertNull(newProcess.get(AtlasClient.PROCESS_ATTRIBUTE_OUTPUTS));
- }
-
- @Override
- protected void assertEntityDeleted(String id) throws Exception {
- try {
- entityStore.getById(id);
- fail("Expected EntityNotFoundException");
- } catch (AtlasBaseException e) {
- // expected
- }
- }
-
- @Override
- protected void assertDeletedColumn(final AtlasEntity.AtlasEntityWithExtInfo tableInstance) throws AtlasException {
- final List<AtlasObjectId> columns = (List<AtlasObjectId>) tableInstance.getEntity().getAttribute(COLUMNS_ATTR_NAME);
- Assert.assertEquals(columns.size(), 2);
- }
-
- @Override
- protected void assertTestDeleteEntities(AtlasEntity.AtlasEntityWithExtInfo 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 = metadataService.getEntityDefinition(janeGuid);
- List<ITypedReferenceableInstance> subordinates = (List<ITypedReferenceableInstance>) jane.get("subordinates");
- Assert.assertEquals(subordinates.size(), 1);
- }
-
- @Override
- protected void assertJohnForTestDisconnectBidirectionalReferences(final AtlasEntity.AtlasEntityWithExtInfo john, final String janeGuid) throws Exception {
- assertNull(john.getEntity().getAttribute("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 = metadataService.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 = metadataService.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 = metadataService.getEntityDefinition(nameGuidMap.get("John"));
- assertNull(john.get("mentor"));
- }
-
- @Override
- protected void assertTestDisconnectUnidirectionalArrayReferenceFromClassType(
- List<AtlasObjectId> columns, String columnGuid) {
- assertEquals(columns.size(), 2);
- for (AtlasObjectId column : columns) {
- assertFalse(column.getGuid().equals(columnGuid));
- }
- }
-
- protected void assertTestDisconnectMapReferenceFromClassType(final String mapOwnerGuid) throws Exception {
- // Verify map references from mapOwner were disconnected.
- AtlasEntity.AtlasEntityWithExtInfo mapOwnerInstance = entityStore.getById(mapOwnerGuid);
- Map<String, AtlasObjectId> map =
- (Map<String, AtlasObjectId>) mapOwnerInstance.getEntity().getAttribute("map");
- Assert.assertNull(map);
- Map<String, AtlasObjectId> biMap =
- (Map<String, AtlasObjectId>) mapOwnerInstance.getEntity().getAttribute("biMap");
- Assert.assertNull(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 assertTestDisconnectUnidirectionalArrayReferenceFromStructAndTraitTypes(String structContainerGuid)
- throws Exception {
- // Verify that the unidirectional references from the struct and trait instances
- // to the deleted entities were disconnected.
- ITypedReferenceableInstance structContainerConvertedEntity =
- metadataService.getEntityDefinition(structContainerGuid);
- ITypedStruct struct = (ITypedStruct) structContainerConvertedEntity.get("struct");
- assertNull(struct.get("target"));
- IStruct trait = structContainerConvertedEntity.getTrait("TestTrait");
- assertNotNull(trait);
- assertNull(trait.get("target"));
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/0877e47c/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/InverseReferenceUpdateHardDeleteV1Test.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/InverseReferenceUpdateHardDeleteV1Test.java b/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/InverseReferenceUpdateHardDeleteV1Test.java
deleted file mode 100644
index d54adeb..0000000
--- a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/InverseReferenceUpdateHardDeleteV1Test.java
+++ /dev/null
@@ -1,75 +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.store.graph.v1;
-
-import com.google.common.collect.ImmutableList;
-import org.apache.atlas.TestModules;
-import org.apache.atlas.model.instance.AtlasEntity;
-import org.apache.atlas.model.instance.AtlasObjectId;
-import org.apache.atlas.type.AtlasTypeUtil;
-import org.testng.annotations.Guice;
-
-import java.util.Map;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
-
-/**
- * Inverse reference update test with {@link HardDeleteHandlerV1}
- */
-@Guice(modules = TestModules.HardDeleteModule.class)
-public class InverseReferenceUpdateHardDeleteV1Test extends InverseReferenceUpdateV1Test {
-
- @Override
- protected void verify_testInverseReferenceAutoUpdate_NonComposite_OneToMany(AtlasEntity jane) throws Exception {
-
- // Max should have been removed from the subordinates list, leaving only John.
- verifyReferenceList(jane, "subordinates", ImmutableList.of(nameIdMap.get("John")));
- }
-
- @Override
- protected void verify_testInverseReferenceAutoUpdate_NonCompositeManyToOne(AtlasEntity a1, AtlasEntity a2, AtlasEntity a3, AtlasEntity b) {
-
- verifyReferenceValue(a1, "oneB", null);
-
- verifyReferenceValue(a2, "oneB", null);
-
- verifyReferenceList(b, "manyA", ImmutableList.of(AtlasTypeUtil.getAtlasObjectId(a3)));
- }
-
- @Override
- protected void verify_testInverseReferenceAutoUpdate_NonComposite_OneToOne(AtlasEntity a1, AtlasEntity b) {
-
- verifyReferenceValue(a1, "b", null);
- }
-
- @Override
- protected void verify_testInverseReferenceAutoUpdate_Map(AtlasEntity a1, AtlasEntity b1,
- AtlasEntity b2, AtlasEntity b3) {
-
- Object value = a1.getAttribute("mapToB");
- assertTrue(value instanceof Map);
- Map<String, AtlasObjectId> refMap = (Map<String, AtlasObjectId>) value;
- assertEquals(refMap.size(), 1);
- AtlasObjectId referencedEntityId = refMap.get("b3");
- assertEquals(referencedEntityId, AtlasTypeUtil.getAtlasObjectId(b3));
- verifyReferenceValue(b1, "mappedFromA", null);
- verifyReferenceValue(b2, "mappedFromA", null);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/0877e47c/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/InverseReferenceUpdateSoftDeleteV1Test.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/InverseReferenceUpdateSoftDeleteV1Test.java b/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/InverseReferenceUpdateSoftDeleteV1Test.java
deleted file mode 100644
index 884ab54..0000000
--- a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/InverseReferenceUpdateSoftDeleteV1Test.java
+++ /dev/null
@@ -1,78 +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.store.graph.v1;
-
-import com.google.common.collect.ImmutableList;
-import org.apache.atlas.TestModules;
-import org.apache.atlas.model.instance.AtlasEntity;
-import org.apache.atlas.model.instance.AtlasObjectId;
-import org.apache.atlas.type.AtlasTypeUtil;
-import org.testng.annotations.Guice;
-
-import java.util.Map;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
-
-
-/**
- * Inverse reference update test with {@link SoftDeleteHandlerV1}
- */
-@Guice(modules = TestModules.SoftDeleteModule.class)
-public class InverseReferenceUpdateSoftDeleteV1Test extends InverseReferenceUpdateV1Test {
-
- @Override
- protected void verify_testInverseReferenceAutoUpdate_NonComposite_OneToMany(AtlasEntity jane)
- throws Exception {
-
- // Max is still in the subordinates list, as the edge still exists with state DELETED
- verifyReferenceList(jane, "subordinates", ImmutableList.of(nameIdMap.get("John"), nameIdMap.get("Max")));
- }
-
- @Override
- protected void verify_testInverseReferenceAutoUpdate_NonCompositeManyToOne(AtlasEntity a1,
- AtlasEntity a2, AtlasEntity a3, AtlasEntity b) {
-
- verifyReferenceValue(a1, "oneB", b.getGuid());
-
- verifyReferenceValue(a2, "oneB", b.getGuid());
-
- verifyReferenceList(b, "manyA", ImmutableList.of(AtlasTypeUtil.getAtlasObjectId(a1), AtlasTypeUtil.getAtlasObjectId(a2), AtlasTypeUtil.getAtlasObjectId(a3)));
- }
-
- @Override
- protected void verify_testInverseReferenceAutoUpdate_NonComposite_OneToOne(AtlasEntity a1, AtlasEntity b) {
-
- verifyReferenceValue(a1, "b", b.getGuid());
- }
-
- @Override
- protected void verify_testInverseReferenceAutoUpdate_Map(AtlasEntity a1, AtlasEntity b1,
- AtlasEntity b2, AtlasEntity b3) {
-
- Object value = a1.getAttribute("mapToB");
- assertTrue(value instanceof Map);
- Map<String, AtlasObjectId> refMap = (Map<String, AtlasObjectId>) value;
- assertEquals(refMap.size(), 3);
- AtlasObjectId referencedEntityId = refMap.get("b3");
- assertEquals(referencedEntityId, AtlasTypeUtil.getAtlasObjectId(b3));
- verifyReferenceValue(b1, "mappedFromA", a1.getGuid());
- verifyReferenceValue(b2, "mappedFromA", a1.getGuid());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/0877e47c/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/InverseReferenceUpdateV1Test.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/InverseReferenceUpdateV1Test.java b/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/InverseReferenceUpdateV1Test.java
deleted file mode 100644
index 6475639..0000000
--- a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/InverseReferenceUpdateV1Test.java
+++ /dev/null
@@ -1,380 +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.store.graph.v1;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import org.apache.atlas.RequestContextV1;
-import org.apache.atlas.TestUtils;
-import org.apache.atlas.TestUtilsV2;
-import org.apache.atlas.model.instance.AtlasEntity;
-import org.apache.atlas.model.instance.AtlasEntity.AtlasEntitiesWithExtInfo;
-import org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo;
-import org.apache.atlas.model.instance.AtlasEntityHeader;
-import org.apache.atlas.model.instance.AtlasObjectId;
-import org.apache.atlas.model.instance.EntityMutationResponse;
-import org.apache.atlas.model.typedef.AtlasTypesDef;
-import org.apache.atlas.repository.graph.AtlasGraphProvider;
-import org.apache.atlas.repository.store.bootstrap.AtlasTypeDefStoreInitializer;
-import org.apache.atlas.repository.store.graph.AtlasEntityStore;
-import org.apache.atlas.services.MetadataService;
-import org.apache.atlas.store.AtlasTypeDefStore;
-import org.apache.atlas.type.AtlasEntityType;
-import org.apache.atlas.type.AtlasTypeRegistry;
-import org.apache.atlas.type.AtlasTypeUtil;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import javax.inject.Inject;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.apache.atlas.TestUtils.NAME;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-
-/**
- * Test automatic inverse reference updating in V1 (V2?) code path.
- *
- */
-public abstract class InverseReferenceUpdateV1Test {
- @Inject
- AtlasTypeRegistry typeRegistry;
-
- @Inject
- AtlasTypeDefStore typeDefStore;
-
- @Inject
- AtlasEntityStore entityStore;
-
- @Inject
- MetadataService metadataService;
-
- private AtlasEntitiesWithExtInfo deptEntity;
-
- protected Map<String, AtlasObjectId> nameIdMap = new HashMap<>();
-
- @BeforeClass
- public void setUp() throws Exception {
- RequestContextV1.clear();
- RequestContextV1.get().setUser(TestUtilsV2.TEST_USER);
-
- metadataService = TestUtils.addSessionCleanupWrapper(metadataService);
-
- AtlasTypesDef[] testTypesDefs = new AtlasTypesDef[] { TestUtilsV2.defineDeptEmployeeTypes(),
- TestUtilsV2.defineInverseReferenceTestTypes()
- };
-
- for (AtlasTypesDef typesDef : testTypesDefs) {
- AtlasTypesDef typesToCreate = AtlasTypeDefStoreInitializer.getTypesToCreate(typesDef, typeRegistry);
-
- if (!typesToCreate.isEmpty()) {
- typeDefStore.createTypesDef(typesToCreate);
- }
- }
-
- deptEntity = TestUtilsV2.createDeptEg2();
- init();
- EntityMutationResponse response = entityStore.createOrUpdate(new AtlasEntityStream(deptEntity), false);
- for (AtlasEntityHeader entityHeader : response.getCreatedEntities()) {
- nameIdMap.put((String)entityHeader.getAttribute(NAME), AtlasTypeUtil.getAtlasObjectId(entityHeader));
- }
- }
-
- @AfterClass
- public void clear() {
- AtlasGraphProvider.cleanup();
- }
-
- @BeforeMethod
- public void init() throws Exception {
- RequestContextV1.clear();
- RequestContextV1.get().setUser(TestUtilsV2.TEST_USER);
- }
-
- @Test
- public void testInverseReferenceAutoUpdate_NonComposite_OneToMany() throws Exception {
- AtlasObjectId juliusId = nameIdMap.get("Julius");
-
- // Change Max's Employee.manager reference to Julius and apply the change as a partial update.
- // This should also update Julius to add Max to the inverse Manager.subordinates reference.
- AtlasEntity maxEntityForUpdate = new AtlasEntity(TestUtilsV2.EMPLOYEE_TYPE);
- maxEntityForUpdate.setAttribute("manager", juliusId);
- AtlasEntityType employeeType = typeRegistry.getEntityTypeByName(TestUtilsV2.EMPLOYEE_TYPE);
- Map<String, Object> uniqAttributes = Collections.<String, Object>singletonMap("name", "Max");
- EntityMutationResponse updateResponse = entityStore.updateByUniqueAttributes(employeeType, uniqAttributes , new AtlasEntityWithExtInfo(maxEntityForUpdate));
- List<AtlasEntityHeader> partialUpdatedEntities = updateResponse.getPartialUpdatedEntities();
- // 3 entities should have been updated:
- // * Max to change the Employee.manager reference
- // * Julius to add Max to Manager.subordinates
- // * Jane to remove Max from Manager.subordinates
- assertEquals(partialUpdatedEntities.size(), 3);
-
- AtlasObjectId maxId = nameIdMap.get("Max");
- String janeGuid = nameIdMap.get("Jane").getGuid();
- AtlasEntitiesWithExtInfo storedEntities = entityStore.getByIds(ImmutableList.of(maxId.getGuid(), juliusId.getGuid(), janeGuid));
- AtlasEntity storedEntity = storedEntities.getEntity(maxId.getGuid());
- verifyReferenceValue(storedEntity, "manager", juliusId.getGuid());
- storedEntity = storedEntities.getEntity(juliusId.getGuid());
- verifyReferenceList(storedEntity, "subordinates", ImmutableList.of(maxId));
- storedEntity = storedEntities.getEntity(janeGuid);
- verify_testInverseReferenceAutoUpdate_NonComposite_OneToMany(storedEntity);
- }
-
- protected abstract void verify_testInverseReferenceAutoUpdate_NonComposite_OneToMany(AtlasEntity jane) throws Exception;
-
- @Test
- public void testInverseReferenceAutoUpdate_NonCompositeManyToOne() throws Exception {
- AtlasEntityType bType = typeRegistry.getEntityTypeByName("B");
- AtlasEntity a1 = new AtlasEntity("A");
- a1.setAttribute(NAME, TestUtils.randomString());
- AtlasEntity a2 = new AtlasEntity("A");
- a2.setAttribute(NAME, TestUtils.randomString());
- AtlasEntity a3 = new AtlasEntity("A");
- a3.setAttribute(NAME, TestUtils.randomString());
- AtlasEntity b = new AtlasEntity("B");
-
- b.setAttribute(NAME, TestUtils.randomString());
- AtlasEntitiesWithExtInfo atlasEntitiesWithExtInfo = new AtlasEntitiesWithExtInfo();
- atlasEntitiesWithExtInfo.addEntity(a1);
- atlasEntitiesWithExtInfo.addEntity(a2);
- atlasEntitiesWithExtInfo.addEntity(a3);
- atlasEntitiesWithExtInfo.addEntity(b);
- AtlasEntityStream entityStream = new AtlasEntityStream(atlasEntitiesWithExtInfo);
- EntityMutationResponse response = entityStore.createOrUpdate(entityStream , false);
-
- AtlasEntity bForPartialUpdate = new AtlasEntity("B");
- bForPartialUpdate.setAttribute("manyA", ImmutableList.of(AtlasTypeUtil.getAtlasObjectId(a1), AtlasTypeUtil.getAtlasObjectId(a2)));
- init();
- response = entityStore.updateByUniqueAttributes(bType, Collections.<String, Object>singletonMap(NAME, b.getAttribute(NAME)), new AtlasEntityWithExtInfo(bForPartialUpdate));
- List<AtlasEntityHeader> partialUpdatedEntities = response.getPartialUpdatedEntities();
- // Verify 3 entities were updated:
- // * set b.manyA reference to a1 and a2
- // * set inverse a1.oneB reference to b
- // * set inverse a2.oneB reference to b
- assertEquals(partialUpdatedEntities.size(), 3);
- AtlasEntitiesWithExtInfo storedEntities = entityStore.getByIds(ImmutableList.of(a1.getGuid(), a2.getGuid(), b.getGuid()));
- AtlasEntity storedEntity = storedEntities.getEntity(a1.getGuid());
- verifyReferenceValue(storedEntity, "oneB", b.getGuid());
-
- storedEntity = storedEntities.getEntity(a2.getGuid());
- verifyReferenceValue(storedEntity, "oneB", b.getGuid());
-
- storedEntity = storedEntities.getEntity(b.getGuid());
- verifyReferenceList(storedEntity, "manyA", ImmutableList.of(AtlasTypeUtil.getAtlasObjectId(a1), AtlasTypeUtil.getAtlasObjectId(a2)));
-
- bForPartialUpdate.setAttribute("manyA", ImmutableList.of(AtlasTypeUtil.getAtlasObjectId(a3)));
- init();
- response = entityStore.updateByUniqueAttributes(bType, Collections.<String, Object>singletonMap(NAME, b.getAttribute(NAME)), new AtlasEntityWithExtInfo(bForPartialUpdate));
- partialUpdatedEntities = response.getPartialUpdatedEntities();
- // Verify 4 entities were updated:
- // * set b.manyA reference to a3
- // * set inverse a3.oneB reference to b
- // * disconnect inverse a1.oneB reference to b
- // * disconnect inverse a2.oneB reference to b
- assertEquals(partialUpdatedEntities.size(), 4);
-
- init();
- storedEntities = entityStore.getByIds(ImmutableList.of(a1.getGuid(), a2.getGuid(), a3.getGuid(), b.getGuid()));
- verifyReferenceValue(storedEntities.getEntity(a3.getGuid()), "oneB", b.getGuid());
-
- verify_testInverseReferenceAutoUpdate_NonCompositeManyToOne(storedEntities.getEntity(a1.getGuid()), storedEntities.getEntity(a2.getGuid()),
- storedEntities.getEntity(a3.getGuid()), storedEntities.getEntity(b.getGuid()));
- }
-
- protected abstract void verify_testInverseReferenceAutoUpdate_NonCompositeManyToOne(AtlasEntity a1, AtlasEntity a2, AtlasEntity a3, AtlasEntity b);
-
- @Test
- public void testInverseReferenceAutoUpdate_NonComposite_OneToOne() throws Exception {
- AtlasEntityType bType = typeRegistry.getEntityTypeByName("B");
- AtlasEntity a1 = new AtlasEntity("A");
- a1.setAttribute(NAME, TestUtils.randomString());
- AtlasEntity a2 = new AtlasEntity("A");
- a2.setAttribute(NAME, TestUtils.randomString());
- AtlasEntity b = new AtlasEntity("B");
- b.setAttribute(NAME, TestUtils.randomString());
- AtlasEntitiesWithExtInfo atlasEntitiesWithExtInfo = new AtlasEntitiesWithExtInfo();
- atlasEntitiesWithExtInfo.addEntity(a1);
- atlasEntitiesWithExtInfo.addEntity(a2);
- atlasEntitiesWithExtInfo.addEntity(b);
- AtlasEntityStream entityStream = new AtlasEntityStream(atlasEntitiesWithExtInfo);
- EntityMutationResponse response = entityStore.createOrUpdate(entityStream , false);
-
- AtlasEntity bForPartialUpdate = new AtlasEntity("B");
- bForPartialUpdate.setAttribute("a", AtlasTypeUtil.getAtlasObjectId(a1));
- init();
- response = entityStore.updateByUniqueAttributes(bType, Collections.<String, Object>singletonMap(NAME, b.getAttribute(NAME)), new AtlasEntityWithExtInfo(bForPartialUpdate));
- List<AtlasEntityHeader> partialUpdatedEntities = response.getPartialUpdatedEntities();
- // Verify 2 entities were updated:
- // * set b.a reference to a1
- // * set inverse a1.b reference to b
- assertEquals(partialUpdatedEntities.size(), 2);
- AtlasEntitiesWithExtInfo storedEntities = entityStore.getByIds(ImmutableList.of(a1.getGuid(), b.getGuid()));
- AtlasEntity storedEntity = storedEntities.getEntity(a1.getGuid());
- verifyReferenceValue(storedEntity, "b", b.getGuid());
- storedEntity = storedEntities.getEntity(b.getGuid());
- verifyReferenceValue(storedEntity, "a", a1.getGuid());
-
- // Update b.a to reference a2.
- bForPartialUpdate.setAttribute("a", AtlasTypeUtil.getAtlasObjectId(a2));
- init();
- response = entityStore.updateByUniqueAttributes(bType, Collections.<String, Object>singletonMap(NAME, b.getAttribute(NAME)), new AtlasEntityWithExtInfo(bForPartialUpdate));
- partialUpdatedEntities = response.getPartialUpdatedEntities();
- // Verify 3 entities were updated:
- // * set b.a reference to a2
- // * set a2.b reference to b
- // * disconnect a1.b reference
- assertEquals(partialUpdatedEntities.size(), 3);
- storedEntities = entityStore.getByIds(ImmutableList.of(a1.getGuid(), a2.getGuid(), b.getGuid()));
- storedEntity = storedEntities.getEntity(a2.getGuid());
- verifyReferenceValue(storedEntity, "b", b.getGuid());
- storedEntity = storedEntities.getEntity(b.getGuid());
- verifyReferenceValue(storedEntity, "a", a2.getGuid());
- storedEntity = storedEntities.getEntity(a1.getGuid());
- Object refValue = storedEntity.getAttribute("b");
- verify_testInverseReferenceAutoUpdate_NonComposite_OneToOne(storedEntities.getEntity(a1.getGuid()), storedEntities.getEntity(b.getGuid()));
- }
-
- protected abstract void verify_testInverseReferenceAutoUpdate_NonComposite_OneToOne(AtlasEntity a1, AtlasEntity b);
-
- @Test
- public void testInverseReferenceAutoUpdate_NonComposite_ManyToMany() throws Exception {
- AtlasEntityType bType = typeRegistry.getEntityTypeByName("B");
- AtlasEntity a1 = new AtlasEntity("A");
- a1.setAttribute(NAME, TestUtils.randomString());
- AtlasEntity a2 = new AtlasEntity("A");
- a2.setAttribute(NAME, TestUtils.randomString());
- AtlasEntity a3 = new AtlasEntity("A");
- a3.setAttribute(NAME, TestUtils.randomString());
- AtlasEntity b1 = new AtlasEntity("B");
- b1.setAttribute(NAME, TestUtils.randomString());
- AtlasEntity b2 = new AtlasEntity("B");
- b2.setAttribute(NAME, TestUtils.randomString());
- AtlasEntitiesWithExtInfo atlasEntitiesWithExtInfo = new AtlasEntitiesWithExtInfo();
- atlasEntitiesWithExtInfo.addEntity(a1);
- atlasEntitiesWithExtInfo.addEntity(a2);
- atlasEntitiesWithExtInfo.addEntity(a3);
- atlasEntitiesWithExtInfo.addEntity(b1);
- atlasEntitiesWithExtInfo.addEntity(b2);
- AtlasEntityStream entityStream = new AtlasEntityStream(atlasEntitiesWithExtInfo);
- EntityMutationResponse response = entityStore.createOrUpdate(entityStream , false);
-
- AtlasEntity b1ForPartialUpdate = new AtlasEntity("B");
- b1ForPartialUpdate.setAttribute("manyToManyA", ImmutableList.of(AtlasTypeUtil.getAtlasObjectId(a1), AtlasTypeUtil.getAtlasObjectId(a2)));
- init();
- response = entityStore.updateByUniqueAttributes(bType, Collections.<String, Object>singletonMap(NAME, b1.getAttribute(NAME)), new AtlasEntityWithExtInfo(b1ForPartialUpdate));
- List<AtlasEntityHeader> partialUpdatedEntities = response.getPartialUpdatedEntities();
- assertEquals(partialUpdatedEntities.size(), 3);
- AtlasEntitiesWithExtInfo storedEntities = entityStore.getByIds(ImmutableList.of(a1.getGuid(), a2.getGuid(), b1.getGuid()));
- AtlasEntity storedEntity = storedEntities.getEntity(b1.getGuid());
- verifyReferenceList(storedEntity, "manyToManyA", ImmutableList.of(AtlasTypeUtil.getAtlasObjectId(a1), AtlasTypeUtil.getAtlasObjectId(a2)));
- storedEntity = storedEntities.getEntity(a1.getGuid());
- verifyReferenceList(storedEntity, "manyB", ImmutableList.of(AtlasTypeUtil.getAtlasObjectId(b1)));
- storedEntity = storedEntities.getEntity(a2.getGuid());
- verifyReferenceList(storedEntity, "manyB", ImmutableList.of(AtlasTypeUtil.getAtlasObjectId(b1)));
- }
-
- @Test
- public void testInverseReferenceAutoUpdate_Map() throws Exception {
- AtlasEntity a1 = new AtlasEntity("A");
- a1.setAttribute(NAME, TestUtils.randomString());
- AtlasEntity b1 = new AtlasEntity("B");
- b1.setAttribute(NAME, TestUtils.randomString());
- AtlasEntity b2 = new AtlasEntity("B");
- b2.setAttribute(NAME, TestUtils.randomString());
- AtlasEntity b3 = new AtlasEntity("B");
- b3.setAttribute(NAME, TestUtils.randomString());
- AtlasEntitiesWithExtInfo atlasEntitiesWithExtInfo = new AtlasEntitiesWithExtInfo();
- atlasEntitiesWithExtInfo.addEntity(a1);
- atlasEntitiesWithExtInfo.addEntity(b1);
- atlasEntitiesWithExtInfo.addEntity(b2);
- atlasEntitiesWithExtInfo.addEntity(b3);
- AtlasEntityStream entityStream = new AtlasEntityStream(atlasEntitiesWithExtInfo);
- EntityMutationResponse response = entityStore.createOrUpdate(entityStream , false);
-
- AtlasEntityType aType = typeRegistry.getEntityTypeByName("A");
- AtlasEntity aForPartialUpdate = new AtlasEntity("A");
- aForPartialUpdate.setAttribute("mapToB", ImmutableMap.<String, AtlasObjectId>of("b1", AtlasTypeUtil.getAtlasObjectId(b1), "b2", AtlasTypeUtil.getAtlasObjectId(b2)));
- init();
- response = entityStore.updateByUniqueAttributes(aType, Collections.<String, Object>singletonMap(NAME, a1.getAttribute(NAME)), new AtlasEntityWithExtInfo(aForPartialUpdate));
- List<AtlasEntityHeader> partialUpdatedEntities = response.getPartialUpdatedEntities();
- // Verify 3 entities were updated:
- // * set a1.mapToB to "b1"->b1, "b2"->b2
- // * set b1.mappedFromA to a1
- // * set b2.mappedFromA to a1
- assertEquals(partialUpdatedEntities.size(), 3);
- AtlasEntitiesWithExtInfo storedEntities = entityStore.getByIds(ImmutableList.of(a1.getGuid(), b2.getGuid(), b1.getGuid()));
- AtlasEntity storedEntity = storedEntities.getEntity(a1.getGuid());
- Object value = storedEntity.getAttribute("mapToB");
- assertTrue(value instanceof Map);
- Map<String, AtlasObjectId> refMap = (Map<String, AtlasObjectId>) value;
- assertEquals(refMap.size(), 2);
- AtlasObjectId referencedEntityId = refMap.get("b1");
- assertEquals(referencedEntityId, AtlasTypeUtil.getAtlasObjectId(b1));
- referencedEntityId = refMap.get("b2");
- assertEquals(referencedEntityId, AtlasTypeUtil.getAtlasObjectId(b2));
- storedEntity = storedEntities.getEntity(b1.getGuid());
- verifyReferenceValue(storedEntity, "mappedFromA", a1.getGuid());
- storedEntity = storedEntities.getEntity(b2.getGuid());
- verifyReferenceValue(storedEntity, "mappedFromA", a1.getGuid());
-
- aForPartialUpdate.setAttribute("mapToB", ImmutableMap.<String, AtlasObjectId>of("b3", AtlasTypeUtil.getAtlasObjectId(b3)));
- init();
- response = entityStore.updateByUniqueAttributes(aType, Collections.<String, Object>singletonMap(NAME, a1.getAttribute(NAME)), new AtlasEntityWithExtInfo(aForPartialUpdate));
- partialUpdatedEntities = response.getPartialUpdatedEntities();
- // Verify 4 entities were updated:
- // * set a1.mapToB to "b3"->b3
- // * set b3.mappedFromA to a1
- // * disconnect b1.mappedFromA
- // * disconnect b2.mappedFromA
- assertEquals(partialUpdatedEntities.size(), 4);
- storedEntities = entityStore.getByIds(ImmutableList.of(a1.getGuid(), b2.getGuid(), b1.getGuid(), b3.getGuid()));
- AtlasEntity storedB3 = storedEntities.getEntity(b3.getGuid());
- verifyReferenceValue(storedB3, "mappedFromA", a1.getGuid());
- verify_testInverseReferenceAutoUpdate_Map(storedEntities.getEntity(a1.getGuid()), storedEntities.getEntity(b1.getGuid()), storedEntities.getEntity(b2.getGuid()), storedB3);
- }
-
- protected abstract void verify_testInverseReferenceAutoUpdate_Map(AtlasEntity a1, AtlasEntity b1, AtlasEntity b2, AtlasEntity b3);
-
- protected void verifyReferenceValue(AtlasEntity entity, String refName, String expectedGuid) {
- Object refValue = entity.getAttribute(refName);
- if (expectedGuid == null) {
- assertNull(refValue);
- }
- else {
- assertTrue(refValue instanceof AtlasObjectId);
- AtlasObjectId referencedObjectId = (AtlasObjectId) refValue;
- assertEquals(referencedObjectId.getGuid(), expectedGuid);
- }
- }
-
- protected void verifyReferenceList(AtlasEntity entity, String refName, List<AtlasObjectId> expectedValues) {
- Object refValue = entity.getAttribute(refName);
- assertTrue(refValue instanceof List);
- List<AtlasObjectId> refList = (List<AtlasObjectId>) refValue;
- assertEquals(refList.size(), expectedValues.size());
- if (expectedValues.size() > 0) {
- assertTrue(refList.containsAll(expectedValues));
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/atlas/blob/0877e47c/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/SoftDeleteHandlerV1Test.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/SoftDeleteHandlerV1Test.java b/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/SoftDeleteHandlerV1Test.java
deleted file mode 100644
index 3f1ed03..0000000
--- a/repository/src/test/java/org/apache/atlas/repository/store/graph/v1/SoftDeleteHandlerV1Test.java
+++ /dev/null
@@ -1,215 +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.store.graph.v1;
-
-
-import org.apache.atlas.AtlasClient;
-import org.apache.atlas.TestModules;
-import org.apache.atlas.exception.AtlasBaseException;
-import org.apache.atlas.model.instance.AtlasEntity;
-import org.apache.atlas.model.instance.AtlasEntityHeader;
-import org.apache.atlas.model.instance.AtlasObjectId;
-import org.apache.atlas.repository.Constants;
-import org.apache.atlas.repository.graph.GraphHelper;
-import org.apache.atlas.repository.graphdb.AtlasVertex;
-import org.apache.atlas.services.MetadataService;
-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.testng.Assert;
-import org.testng.annotations.Guice;
-
-import javax.inject.Inject;
-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.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-
-@Guice(modules = TestModules.SoftDeleteModule.class)
-public class SoftDeleteHandlerV1Test extends AtlasDeleteHandlerV1Test {
-
- @Inject
- MetadataService metadataService;
-
- @Override
- protected void assertDeletedColumn(final AtlasEntity.AtlasEntityWithExtInfo tableInstance) throws AtlasBaseException {
- final List<AtlasObjectId> columns = (List<AtlasObjectId>) tableInstance.getEntity().getAttribute(COLUMNS_ATTR_NAME);
- Assert.assertEquals(columns.size(), 3);
-
- final AtlasEntity.AtlasEntityWithExtInfo colDeleted = entityStore.getById(columns.get(0).getGuid());
- assertEquals(colDeleted.getEntity().getStatus(), AtlasEntity.Status.DELETED);
- }
-
- @Override
- protected void assertTestDeleteEntities(final AtlasEntity.AtlasEntityWithExtInfo tableInstance) throws Exception {
- //Assert that the deleted table can be fully constructed back
- List<IReferenceableInstance> columns = (List<IReferenceableInstance>) tableInstance.getEntity().getAttribute(COLUMNS_ATTR_NAME);
- assertEquals(columns.size(), 3);
- assertNotNull(tableInstance.getEntity().getAttribute("database"));
- }
-
- @Override
- protected void assertTableForTestDeleteReference(final String tableId) throws Exception {
-
- ITypedReferenceableInstance table = metadataService.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 = metadataService.getEntityDefinition(dbId.getId()._getId());
- assertNotNull(db);
- assertEquals(db.getId().getState(), Id.EntityState.ACTIVE);
-
- }
-
- @Override
- protected void assertColumnForTestDeleteReference(final AtlasEntity.AtlasEntityWithExtInfo tableInstance) throws AtlasBaseException {
- List<AtlasObjectId> columns = (List<AtlasObjectId>) tableInstance.getEntity().getAttribute(COLUMNS_ATTR_NAME);
- assertEquals(columns.size(), 1);
-
- final AtlasEntity.AtlasEntityWithExtInfo byId = entityStore.getById(columns.get(0).getGuid());
- assertEquals(byId.getEntity().getStatus(), AtlasEntity.Status.DELETED);
- }
-
- @Override
- protected void assertProcessForTestDeleteReference(final AtlasEntityHeader processInstance) throws Exception {
- //
- ITypedReferenceableInstance process = metadataService.getEntityDefinition(processInstance.getGuid());
- 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(final String id) throws Exception {
- final AtlasEntity.AtlasEntityWithExtInfo byId = entityStore.getById(id);
- assertEquals(byId.getEntity().getStatus(), AtlasEntity.Status.DELETED);
- }
-
- @Override
- protected void assertTestUpdateEntity_MultiplicityOneNonCompositeReference(final String janeGuid) throws Exception {
- // Verify Jane's subordinates reference cardinality is still 2.
- ITypedReferenceableInstance jane = metadataService.getEntityDefinition(janeGuid);
- List<ITypedReferenceableInstance> subordinates = (List<ITypedReferenceableInstance>) jane.get("subordinates");
- Assert.assertEquals(subordinates.size(), 2);
- }
-
- @Override
- protected void assertJohnForTestDisconnectBidirectionalReferences(final AtlasEntity.AtlasEntityWithExtInfo john, final String janeGuid) throws Exception {
- AtlasObjectId mgr = (AtlasObjectId) john.getEntity().getAttribute("manager");
- assertNotNull(mgr);
- assertEquals(mgr.getGuid(), janeGuid);
-
-
- final AtlasEntity.AtlasEntityWithExtInfo mgrEntity = entityStore.getById(mgr.getGuid());
- assertEquals(mgrEntity.getEntity().getStatus(), AtlasEntity.Status.DELETED);
- }
-
- @Override
- protected void assertMaxForTestDisconnectBidirectionalReferences(final Map<String, String> nameGuidMap) throws Exception {
-
- // Verify that the Department.employees reference to the deleted employee
- // was disconnected.
- ITypedReferenceableInstance hrDept = metadataService.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 = metadataService.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 = metadataService.getEntityDefinition(nameGuidMap.get("John"));
- Id mentor = (Id) john.get("mentor");
- assertEquals(mentor._getId(), maxGuid);
- assertEquals(mentor.getState(), Id.EntityState.DELETED);
-
- }
-
- @Override
- protected void assertTestDisconnectUnidirectionalArrayReferenceFromClassType(final List<AtlasObjectId> columns, final String columnGuid) throws AtlasBaseException {
- Assert.assertEquals(columns.size(), 3);
- for (AtlasObjectId column : columns) {
- AtlasEntity.AtlasEntityWithExtInfo columnEntity = entityStore.getById(column.getGuid());
- if (column.getGuid().equals(columnGuid)) {
- assertEquals(columnEntity.getEntity().getStatus(), AtlasEntity.Status.DELETED);
- } else {
- assertEquals(columnEntity.getEntity().getStatus(), AtlasEntity.Status.ACTIVE);
- }
- }
- }
-
- @Override
- protected void assertTestDisconnectMapReferenceFromClassType(final String mapOwnerGuid) throws Exception {
- AtlasEntity.AtlasEntityWithExtInfo mapOwnerInstance = entityStore.getById(mapOwnerGuid);
- Map<String, AtlasObjectId> map =
- (Map<String, AtlasObjectId>) mapOwnerInstance.getEntity().getAttribute("map");
- assertNotNull(map);
- assertEquals(map.size(), 1);
- Map<String, AtlasObjectId> biMap =
- (Map<String, AtlasObjectId>) mapOwnerInstance.getEntity().getAttribute("biMap");
- assertNotNull(biMap);
- assertEquals(biMap.size(), 1);
- }
-
- @Override
- protected void assertTestDisconnectUnidirectionalArrayReferenceFromStructAndTraitTypes(final String structContainerGuid) throws Exception {
- // Verify that the unidirectional references from the struct and trait instances
- // to the deleted entities were not disconnected.
- ITypedReferenceableInstance structContainerConvertedEntity =
- metadataService.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 assertVerticesDeleted(List<AtlasVertex> vertices) {
- for (AtlasVertex vertex : vertices) {
- assertEquals(GraphHelper.getSingleValuedProperty(vertex, Constants.STATE_PROPERTY_KEY, String.class), Id.EntityState.DELETED.name());
- }
- }
-}