Repository: atlas Updated Branches: refs/heads/master 8253653bc -> ecf8095ff
ATLAS-2355: Fix IT failures in webapp module Project: http://git-wip-us.apache.org/repos/asf/atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/ecf8095f Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/ecf8095f Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/ecf8095f Branch: refs/heads/master Commit: ecf8095ff92252f252e14292bb5d82d7b6aa1951 Parents: 8253653 Author: Sarath Subramanian <[email protected]> Authored: Thu Jan 11 14:47:50 2018 -0800 Committer: Sarath Subramanian <[email protected]> Committed: Thu Jan 11 14:47:50 2018 -0800 ---------------------------------------------------------------------- .../java/org/apache/atlas/hive/HiveITBase.java | 2 +- .../org/apache/atlas/hive/hook/HiveHookIT.java | 4 +- .../main/java/org/apache/atlas/AtlasClient.java | 7 +- .../java/org/apache/atlas/utils/AtlasJson.java | 14 ++- webapp/pom.xml | 13 --- .../atlas/web/resources/EntityResource.java | 25 +++-- .../atlas/web/integration/BaseResourceIT.java | 7 -- .../web/integration/EntityJerseyResourceIT.java | 8 +- .../atlas/web/resources/AdminResourceTest.java | 12 +- .../json/search-parameters/entity-filters.json | 112 +++++++++++++++---- 10 files changed, 138 insertions(+), 66 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/atlas/blob/ecf8095f/addons/hive-bridge/src/test/java/org/apache/atlas/hive/HiveITBase.java ---------------------------------------------------------------------- diff --git a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/HiveITBase.java b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/HiveITBase.java index febce06..b4ea3f9 100644 --- a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/HiveITBase.java +++ b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/HiveITBase.java @@ -155,7 +155,7 @@ public class HiveITBase { protected String assertEntityIsRegistered(final String typeName, final String property, final String value, final HiveHookIT.AssertPredicate assertPredicate) throws Exception { - waitFor(80000, new HiveHookIT.Predicate() { + waitFor(2000, new HiveHookIT.Predicate() { @Override public void evaluate() throws Exception { Referenceable entity = atlasClient.getEntity(typeName, property, value); http://git-wip-us.apache.org/repos/asf/atlas/blob/ecf8095f/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java ---------------------------------------------------------------------- diff --git a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java index 9176fb9..262f7dc 100755 --- a/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java +++ b/addons/hive-bridge/src/test/java/org/apache/atlas/hive/hook/HiveHookIT.java @@ -876,7 +876,7 @@ public class HiveHookIT extends HiveITBase { String tableId = assertTableIsRegistered(DEFAULT_DB, tableName); Referenceable tableEntity = atlasClient.getEntity(tableId); - final String createTime = (String)tableEntity.get(HiveMetaStoreBridge.CREATE_TIME); + final String createTime = String.valueOf(tableEntity.get(HiveMetaStoreBridge.CREATE_TIME)); Assert.assertNotNull(createTime); String columnGuid = assertColumnIsRegistered(HiveMetaStoreBridge.getColumnQualifiedName(HiveMetaStoreBridge.getTableQualifiedName(CLUSTER_NAME, DEFAULT_DB, tableName), NAME)); @@ -917,7 +917,7 @@ public class HiveHookIT extends HiveITBase { Referenceable sd = ((Referenceable) entity.get(HiveMetaStoreBridge.STORAGE_DESC)); String location = (String) sd.get(HiveMetaStoreBridge.LOCATION); assertTrue(location.contains(newTableName)); - Assert.assertEquals(entity.get(HiveMetaStoreBridge.CREATE_TIME), createTime); + Assert.assertEquals(String.valueOf(entity.get(HiveMetaStoreBridge.CREATE_TIME)), createTime); } }); } http://git-wip-us.apache.org/repos/asf/atlas/blob/ecf8095f/client/client-v1/src/main/java/org/apache/atlas/AtlasClient.java ---------------------------------------------------------------------- diff --git a/client/client-v1/src/main/java/org/apache/atlas/AtlasClient.java b/client/client-v1/src/main/java/org/apache/atlas/AtlasClient.java index ab5bdac..c132afc 100644 --- a/client/client-v1/src/main/java/org/apache/atlas/AtlasClient.java +++ b/client/client-v1/src/main/java/org/apache/atlas/AtlasClient.java @@ -799,7 +799,7 @@ public class AtlasClient extends AtlasBaseClient { public ArrayNode searchByDSL(final String query, final int limit, final int offset) throws AtlasServiceException { LOG.debug("DSL query: {}", query); final API api = API_V1.SEARCH_DSL; - ObjectNode result = callAPIWithRetries(api, null, new ResourceCreator() { + ObjectNode response = callAPIWithRetries(api, null, new ResourceCreator() { @Override public WebResource createResource() { WebResource resource = getResource(api); @@ -809,7 +809,10 @@ public class AtlasClient extends AtlasBaseClient { return resource; } }); - return (ArrayNode)result.get(RESULTS); + + JsonNode results = response.get(RESULTS); + + return (results.isNull()) ? AtlasJson.createV1ArrayNode(): (ArrayNode) response.get(RESULTS); } /** http://git-wip-us.apache.org/repos/asf/atlas/blob/ecf8095f/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java ---------------------------------------------------------------------- diff --git a/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java b/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java index d4db756..adf0665 100644 --- a/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java +++ b/intg/src/main/java/org/apache/atlas/utils/AtlasJson.java @@ -87,7 +87,11 @@ public class AtlasJson { public static String toJson(Object obj) { String ret; try { - ret = mapper.writeValueAsString(obj); + if (obj instanceof JsonNode && ((JsonNode) obj).isTextual()) { + ret = ((JsonNode) obj).textValue(); + } else { + ret = mapperV1.writeValueAsString(obj); + } }catch (IOException e){ LOG.error("AtlasJson.toJson()", e); @@ -115,8 +119,12 @@ public class AtlasJson { public static String toV1Json(Object obj) { String ret; try { - ret = mapperV1.writeValueAsString(obj); - }catch (IOException e){ + if (obj instanceof JsonNode && ((JsonNode) obj).isTextual()) { + ret = ((JsonNode) obj).textValue(); + } else { + ret = mapperV1.writeValueAsString(obj); + } + } catch (IOException e) { LOG.error("AtlasType.toV1Json()", e); ret = null; http://git-wip-us.apache.org/repos/asf/atlas/blob/ecf8095f/webapp/pom.xml ---------------------------------------------------------------------- diff --git a/webapp/pom.xml b/webapp/pom.xml index 352b8cd..2cf6e10 100755 --- a/webapp/pom.xml +++ b/webapp/pom.xml @@ -237,19 +237,6 @@ </dependency> <dependency> - <groupId>com.sun.jersey</groupId> - <artifactId>jersey-json</artifactId> - <version>${jersey.version}</version> - - </dependency> - - <dependency> - <groupId>javax.ws.rs</groupId> - <artifactId>jsr311-api</artifactId> - <version>${jsr.version}</version> - </dependency> - - <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> </dependency> http://git-wip-us.apache.org/repos/asf/atlas/blob/ecf8095f/webapp/src/main/java/org/apache/atlas/web/resources/EntityResource.java ---------------------------------------------------------------------- diff --git a/webapp/src/main/java/org/apache/atlas/web/resources/EntityResource.java b/webapp/src/main/java/org/apache/atlas/web/resources/EntityResource.java index b062093..715a54d 100755 --- a/webapp/src/main/java/org/apache/atlas/web/resources/EntityResource.java +++ b/webapp/src/main/java/org/apache/atlas/web/resources/EntityResource.java @@ -18,6 +18,7 @@ package org.apache.atlas.web.resources; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; @@ -264,19 +265,25 @@ public class EntityResource { entityJson = Servlets.getRequestPayload(request); - ArrayNode jsonEntities = AtlasJson.parseToV1ArrayNode(entityJson); - String[] jsonStrings = new String[jsonEntities.size()]; + //Handle backward compatibility - if entities is not JSONArray, convert to JSONArray + String[] jsonStrings; - for (int i = 0; i < jsonEntities.size(); i++) { - jsonStrings[i] = AtlasJson.toV1Json(jsonEntities.get(i)); - } + try { + ArrayNode jsonEntities = AtlasJson.parseToV1ArrayNode(entityJson); - if (LOG.isDebugEnabled()) { - LOG.debug("updateEntities(): count={}, entityJson={} ", jsonEntities.size(), entityJson); + jsonStrings = new String[jsonEntities.size()]; - for (int i = 0; i < jsonStrings.length; i++) { - LOG.debug("updateEntities(): entity[{}]={}", i, jsonStrings[i]); + for (int i = 0; i < jsonEntities.size(); i++) { + jsonStrings[i] = AtlasJson.toV1Json(jsonEntities.get(i)); } + } catch (IOException e) { + jsonStrings = new String[1]; + + jsonStrings[0] = entityJson; + } + + if (LOG.isDebugEnabled()) { + LOG.debug("Updating entities: count={}; entities-json={}", jsonStrings.length, entityJson); } AtlasEntitiesWithExtInfo entitiesInfo = restAdapters.toAtlasEntities(jsonStrings); http://git-wip-us.apache.org/repos/asf/atlas/blob/ecf8095f/webapp/src/test/java/org/apache/atlas/web/integration/BaseResourceIT.java ---------------------------------------------------------------------- diff --git a/webapp/src/test/java/org/apache/atlas/web/integration/BaseResourceIT.java b/webapp/src/test/java/org/apache/atlas/web/integration/BaseResourceIT.java index 64a828b..6a7aece 100755 --- a/webapp/src/test/java/org/apache/atlas/web/integration/BaseResourceIT.java +++ b/webapp/src/test/java/org/apache/atlas/web/integration/BaseResourceIT.java @@ -100,7 +100,6 @@ public abstract class BaseResourceIT { protected NotificationInterface notificationInterface = null; - protected EmbeddedKafkaServer kafkaServer = null; protected KafkaNotification kafkaNotification = null; @BeforeClass @@ -689,13 +688,10 @@ public abstract class BaseResourceIT { applicationProperties.setProperty("atlas.kafka.data", "target/" + RandomStringUtils.randomAlphanumeric(5)); - kafkaServer = new EmbeddedKafkaServer(applicationProperties); kafkaNotification = new KafkaNotification(applicationProperties); notificationInterface = kafkaNotification; - kafkaServer.start(); kafkaNotification.start(); - Thread.sleep(2000); } @@ -705,8 +701,5 @@ public abstract class BaseResourceIT { kafkaNotification.stop(); } - if (kafkaServer != null) { - kafkaServer.stop(); - } } } http://git-wip-us.apache.org/repos/asf/atlas/blob/ecf8095f/webapp/src/test/java/org/apache/atlas/web/integration/EntityJerseyResourceIT.java ---------------------------------------------------------------------- diff --git a/webapp/src/test/java/org/apache/atlas/web/integration/EntityJerseyResourceIT.java b/webapp/src/test/java/org/apache/atlas/web/integration/EntityJerseyResourceIT.java index d49391f..f769431 100755 --- a/webapp/src/test/java/org/apache/atlas/web/integration/EntityJerseyResourceIT.java +++ b/webapp/src/test/java/org/apache/atlas/web/integration/EntityJerseyResourceIT.java @@ -878,8 +878,8 @@ public class EntityJerseyResourceIT extends BaseResourceIT { LOG.debug("Updating entity= {}", tableUpdated); EntityResult entityResult = atlasClientV1.updateEntity(guid, tableUpdated); - assertEquals(entityResult.getUpdateEntities().size(), 2); - assertEquals(entityResult.getUpdateEntities().get(1), guid); + assertEquals(entityResult.getUpdateEntities().size(), 1); + assertEquals(entityResult.getUpdateEntities().get(0), guid); Referenceable entity = atlasClientV1.getEntity(guid); List<Referenceable> refs = (List<Referenceable>) entity.get("columns"); @@ -935,8 +935,8 @@ public class EntityJerseyResourceIT extends BaseResourceIT { LOG.debug("Updating entity= {}", tableUpdated); EntityResult entityResult = atlasClientV1.updateEntity(BaseResourceIT.HIVE_TABLE_TYPE_BUILTIN, AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, (String) hiveTableInstance.get(QUALIFIED_NAME), tableUpdated); - assertEquals(entityResult.getUpdateEntities().size(), 2); - assertEquals(entityResult.getUpdateEntities().get(1), guid); + assertEquals(entityResult.getUpdateEntities().size(), 1); + assertEquals(entityResult.getUpdateEntities().get(0), guid); Referenceable entity = atlasClientV1.getEntity(guid); List<Referenceable> refs = (List<Referenceable>) entity.get("columns"); http://git-wip-us.apache.org/repos/asf/atlas/blob/ecf8095f/webapp/src/test/java/org/apache/atlas/web/resources/AdminResourceTest.java ---------------------------------------------------------------------- diff --git a/webapp/src/test/java/org/apache/atlas/web/resources/AdminResourceTest.java b/webapp/src/test/java/org/apache/atlas/web/resources/AdminResourceTest.java index 3c5d031..fd96fc3 100644 --- a/webapp/src/test/java/org/apache/atlas/web/resources/AdminResourceTest.java +++ b/webapp/src/test/java/org/apache/atlas/web/resources/AdminResourceTest.java @@ -18,7 +18,9 @@ package org.apache.atlas.web.resources; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; +import org.apache.atlas.utils.AtlasJson; import org.apache.atlas.web.service.ServiceState; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -28,6 +30,8 @@ import org.testng.annotations.Test; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.Response; +import java.io.IOException; + import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; @@ -43,26 +47,26 @@ public class AdminResourceTest { } @Test - public void testStatusOfActiveServerIsReturned() { + public void testStatusOfActiveServerIsReturned() throws IOException { when(serviceState.getState()).thenReturn(ServiceState.ServiceStateValue.ACTIVE); AdminResource adminResource = new AdminResource(serviceState, null, null, null, null); Response response = adminResource.getStatus(); assertEquals(response.getStatus(), HttpServletResponse.SC_OK); - ObjectNode entity = (ObjectNode) response.getEntity(); + JsonNode entity = AtlasJson.parseToV1JsonNode((String) response.getEntity()); assertEquals(entity.get("Status").asText(), "ACTIVE"); } @Test - public void testResourceGetsValueFromServiceState() { + public void testResourceGetsValueFromServiceState() throws IOException { when(serviceState.getState()).thenReturn(ServiceState.ServiceStateValue.PASSIVE); AdminResource adminResource = new AdminResource(serviceState, null, null, null, null); Response response = adminResource.getStatus(); verify(serviceState).getState(); - ObjectNode entity = (ObjectNode) response.getEntity(); + JsonNode entity = AtlasJson.parseToV1JsonNode((String) response.getEntity()); assertEquals(entity.get("Status").asText(), "PASSIVE"); } http://git-wip-us.apache.org/repos/asf/atlas/blob/ecf8095f/webapp/src/test/resources/json/search-parameters/entity-filters.json ---------------------------------------------------------------------- diff --git a/webapp/src/test/resources/json/search-parameters/entity-filters.json b/webapp/src/test/resources/json/search-parameters/entity-filters.json index 0611644..b18311f 100644 --- a/webapp/src/test/resources/json/search-parameters/entity-filters.json +++ b/webapp/src/test/resources/json/search-parameters/entity-filters.json @@ -74,9 +74,19 @@ "limit": 50, "offset": 0, "entityFilters": { - "attributeName": "name", - "operator": "neq", - "attributeValue": "dummy /Table_1@0" + "condition": "AND", + "criterion": [ + { + "attributeName": "name", + "operator": "neq", + "attributeValue": "dummy /Table_1@0" + }, + { + "attributeName": "description", + "operator": "isNull", + "attributeValue": "" + } + ] }, "tagFilters": null, "attributes": [ @@ -96,9 +106,19 @@ "limit": 25, "offset": 0, "entityFilters": { - "attributeName": "temporary", - "operator": "eq", - "attributeValue": "false" + "condition": "AND", + "criterion": [ + { + "attributeName": "temporary", + "operator": "eq", + "attributeValue": "false" + }, + { + "attributeName": "description", + "operator": "isNull", + "attributeValue": "" + } + ] }, "tagFilters": null, "attributes": [ @@ -118,9 +138,19 @@ "limit": 50, "offset": 0, "entityFilters": { - "attributeName": "temporary", - "operator": "neq", - "attributeValue": "true" + "condition": "AND", + "criterion": [ + { + "attributeName": "temporary", + "operator": "neq", + "attributeValue": "true" + }, + { + "attributeName": "description", + "operator": "isNull", + "attributeValue": "" + } + ] }, "tagFilters": null, "attributes": [ @@ -162,9 +192,19 @@ "limit": 25, "offset": 0, "entityFilters": { - "attributeName": "name", - "operator": "endsWith", - "attributeValue": "0" + "condition": "AND", + "criterion": [ + { + "attributeName": "name", + "operator": "endsWith", + "attributeValue": "0" + }, + { + "attributeName": "description", + "operator": "isNull", + "attributeValue": "" + } + ] }, "tagFilters": null, "attributes": [ @@ -184,9 +224,19 @@ "limit": 25, "offset": 0, "entityFilters": { - "attributeName": "name", - "operator": "endsWith", - "attributeValue": "8" + "condition": "AND", + "criterion": [ + { + "attributeName": "name", + "operator": "endsWith", + "attributeValue": "8" + }, + { + "attributeName": "description", + "operator": "isNull", + "attributeValue": "" + } + ] }, "tagFilters": null, "attributes": [ @@ -206,9 +256,19 @@ "limit": 25, "offset": 0, "entityFilters": { - "attributeName": "createTime", - "operator": "lte", - "attributeValue": "1491250084794" + "condition": "AND", + "criterion": [ + { + "attributeName": "createTime", + "operator": "lte", + "attributeValue": "1491250084794" + }, + { + "attributeName": "description", + "operator": "isNull", + "attributeValue": "" + } + ] }, "tagFilters": null, "attributes": [ @@ -228,9 +288,19 @@ "limit": 25, "offset": 0, "entityFilters": { - "attributeName": "lastAccessTime", - "operator": "gte", - "attributeValue": "1491248907000" + "condition": "AND", + "criterion": [ + { + "attributeName": "lastAccessTime", + "operator": "gte", + "attributeValue": "1491248907000" + }, + { + "attributeName": "description", + "operator": "isNull", + "attributeValue": "" + } + ] }, "tagFilters": null, "attributes": [
