Repository: atlas Updated Branches: refs/heads/branch-0.8 5c9bf7a30 -> daabed131
http://git-wip-us.apache.org/repos/asf/atlas/blob/daabed13/webapp/src/test/java/org/apache/atlas/web/adapters/TestEntityRESTDelete.java ---------------------------------------------------------------------- diff --git a/webapp/src/test/java/org/apache/atlas/web/adapters/TestEntityRESTDelete.java b/webapp/src/test/java/org/apache/atlas/web/adapters/TestEntityRESTDelete.java new file mode 100644 index 0000000..5a8724b --- /dev/null +++ b/webapp/src/test/java/org/apache/atlas/web/adapters/TestEntityRESTDelete.java @@ -0,0 +1,208 @@ +/** + * 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.web.adapters; + +import org.apache.atlas.RequestContext; +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.AtlasEntityHeader; +import org.apache.atlas.model.instance.EntityMutationResponse; +import org.apache.atlas.model.instance.EntityMutations; +import org.apache.atlas.model.typedef.AtlasTypesDef; +import org.apache.atlas.store.AtlasTypeDefStore; +import org.apache.atlas.store.DeleteType; +import org.apache.atlas.web.rest.EntityREST; +import org.mockito.Mockito; +import org.testng.Assert; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.testng.Assert.assertNotNull; +import static org.testng.AssertJUnit.assertTrue; +import static org.testng.FileAssert.fail; + +@Guice(modules = {TestModules.TestOnlyModule.class}) +public class TestEntityRESTDelete { + + @Inject + private AtlasTypeDefStore typeStore; + + @Inject + private EntityREST entityREST; + + private List<AtlasEntity> dbEntities = new ArrayList<>(); + + @BeforeClass + public void setUp() throws Exception { + AtlasTypesDef typesDef = TestUtilsV2.defineHiveTypes(); + typeStore.createTypesDef(typesDef); + } + + @AfterMethod + public void cleanup() { + RequestContext.clear(); + } + + private void assertSoftDelete(String guid) throws AtlasBaseException { + AtlasEntity.AtlasEntityWithExtInfo entity = entityREST.getById(guid, false); + assertTrue(entity != null && entity.getEntity().getStatus() == AtlasEntity.Status.DELETED); + } + + private void assertHardDelete(String guid) { + try { + entityREST.getById(guid, false); + fail("Entity should have been deleted. Exception should have been thrown."); + } catch (AtlasBaseException e) { + assertTrue(true); + } + } + + private void createEntities() throws Exception { + dbEntities.clear(); + + for (int i = 1; i <= 2; i++) { + AtlasEntity dbEntity = TestUtilsV2.createDBEntity(); + + final EntityMutationResponse response = entityREST.createOrUpdate(new AtlasEntity.AtlasEntitiesWithExtInfo(dbEntity)); + + assertNotNull(response); + List<AtlasEntityHeader> entitiesMutated = response.getEntitiesByOperation(EntityMutations.EntityOperation.CREATE); + + assertNotNull(entitiesMutated); + Assert.assertEquals(entitiesMutated.size(), 1); + assertNotNull(entitiesMutated.get(0)); + dbEntity.setGuid(entitiesMutated.get(0).getGuid()); + + dbEntities.add(dbEntity); + } + } + + @Test + public void deleteByGuidTestSoft() throws Exception { + RequestContextV1.get().setDeleteType(DeleteType.SOFT); + + createEntities(); + + EntityMutationResponse response = entityREST.deleteByGuid(dbEntities.get(0).getGuid()); + + assertNotNull(response); + assertNotNull(response.getDeletedEntities()); + assertSoftDelete(dbEntities.get(0).getGuid()); + } + + @Test + public void deleteByGuidTestHard() throws Exception { + RequestContextV1.get().setDeleteType(DeleteType.HARD); + + createEntities(); + EntityMutationResponse response = entityREST.deleteByGuid(dbEntities.get(0).getGuid()); + + assertNotNull(response); + assertNotNull(response.getDeletedEntities()); + assertHardDelete(dbEntities.get(0).getGuid()); + } + + + @Test + public void deleteByGuidsSoft() throws Exception { + RequestContextV1.get().setDeleteType(DeleteType.SOFT); + + createEntities(); + List<String> guids = new ArrayList<>(); + guids.add(dbEntities.get(0).getGuid()); + guids.add(dbEntities.get(1).getGuid()); + + EntityMutationResponse response = entityREST.deleteByGuids(guids); + + assertNotNull(response); + assertNotNull(response.getDeletedEntities()); + + for (String guid : guids) { + assertSoftDelete(guid); + } + } + + @Test + public void deleteByGuidsHard() throws Exception { + RequestContextV1.get().setDeleteType(DeleteType.HARD); + + createEntities(); + List<String> guids = new ArrayList<>(); + guids.add(dbEntities.get(0).getGuid()); + guids.add(dbEntities.get(1).getGuid()); + EntityMutationResponse response = entityREST.deleteByGuids(guids); + + assertNotNull(response); + assertNotNull(response.getDeletedEntities()); + + for (String guid : guids) { + assertHardDelete(guid); + } + } + + @Test + public void testUpdateGetDeleteEntityByUniqueAttributeSoft() throws Exception { + RequestContextV1.get().setDeleteType(DeleteType.SOFT); + + createEntities(); + entityREST.deleteByUniqueAttribute(TestUtilsV2.DATABASE_TYPE, toHttpServletRequest(TestUtilsV2.NAME, + (String) dbEntities.get(0).getAttribute(TestUtilsV2.NAME))); + + assertSoftDelete(dbEntities.get(0).getGuid()); + } + + @Test + public void testUpdateGetDeleteEntityByUniqueAttributeHard() throws Exception { + RequestContextV1.get().setDeleteType(DeleteType.HARD); + + createEntities(); + + entityREST.deleteByUniqueAttribute(TestUtilsV2.DATABASE_TYPE, toHttpServletRequest(TestUtilsV2.NAME, + (String) dbEntities.get(0).getAttribute(TestUtilsV2.NAME))); + + assertHardDelete(dbEntities.get(0).getGuid()); + } + + private HttpServletRequest toHttpServletRequest(String attrName, String attrValue) { + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); + Map<String, String[]> paramsMap = toParametersMap(EntityREST.PREFIX_ATTR + attrName, attrValue); + + Mockito.when(request.getParameterMap()).thenReturn(paramsMap); + + return request; + } + + private Map<String, String[]> toParametersMap(final String name, final String value) { + return new HashMap<String, String[]>() {{ + put(name, new String[]{value}); + }}; + } +} \ No newline at end of file