Commit 2824f15a by Shwetha GS

ATLAS-586 While updating the multiple attributes, Atlas returns the response…

ATLAS-586 While updating the multiple attributes, Atlas returns the response with escape characters (dkantor via shwethags)
parent a5f8c5aa
......@@ -14,6 +14,7 @@ ATLAS-409 Atlas will not import avro tables with schema read from a file (dosset
ATLAS-379 Create sqoop and falcon metadata addons (venkatnrangan,bvellanki,sowmyaramesh via shwethags)
ALL CHANGES:
ATLAS-586 While updating the multiple attributes, Atlas returns the response with escape characters (dkantor via shwethags)
ATLAS-582 Move Atlas UI to use backboneJS (kevalbhatt18 via shwethags)
ATLAS-540 API to retrieve entity version events (shwethags)
ATLAS-529 support drop database (sumasai)
......
......@@ -19,6 +19,7 @@
package org.apache.atlas.web.resources;
import com.google.common.base.Preconditions;
import org.apache.atlas.AtlasClient;
import org.apache.atlas.AtlasException;
import org.apache.atlas.EntityAuditEvent;
......@@ -58,6 +59,7 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
......@@ -165,9 +167,10 @@ public class EntityResource {
JSONObject response = new JSONObject();
response.put(AtlasClient.REQUEST_ID, Servlets.getRequestId());
response.put(AtlasClient.GUID, new JSONArray(guids));
response.put(AtlasClient.DEFINITION, metadataService.getEntityDefinition(new JSONArray(guids).getString(0)));
JSONArray guidsArray = new JSONArray(guids);
response.put(AtlasClient.GUID, guidsArray);
String entityDefinition = metadataService.getEntityDefinition(guidsArray.getString(0));
response.put(AtlasClient.DEFINITION, new JSONObject(entityDefinition));
return Response.ok(response).build();
} catch(EntityExistsException e) {
LOG.error("Unique constraint violation", e);
......
......@@ -20,6 +20,8 @@ package org.apache.atlas.web.resources;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.google.inject.Inject;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
......@@ -50,6 +52,7 @@ import org.apache.atlas.typesystem.types.utils.TypesUtil;
import org.apache.atlas.web.util.Servlets;
import org.apache.commons.lang.RandomStringUtils;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -368,14 +371,19 @@ public class EntityJerseyResourceIT extends BaseResourceIT {
}
private String getEntityDefinition(ClientResponse clientResponse) throws Exception {
Assert.assertEquals(clientResponse.getStatus(), Response.Status.OK.getStatusCode());
JSONObject response = new JSONObject(clientResponse.getEntity(String.class));
JSONObject response = getEntity(clientResponse);
final String definition = response.getString(AtlasClient.DEFINITION);
Assert.assertNotNull(definition);
return definition;
}
private JSONObject getEntity(ClientResponse clientResponse) throws JSONException {
Assert.assertEquals(clientResponse.getStatus(), Response.Status.OK.getStatusCode());
JSONObject response = new JSONObject(clientResponse.getEntity(String.class));
return response;
}
@Test
public void testGetInvalidEntityDefinition() throws Exception {
WebResource resource = service.path(ENTITIES).path("blah");
......@@ -730,12 +738,28 @@ public class EntityJerseyResourceIT extends BaseResourceIT {
columns.add(ref1);
columns.add(ref2);
tableInstance.set("columns", columns);
String entityJson = InstanceSerialization.toJson(tableInstance, true);
JSONArray entityArray = new JSONArray(1);
entityArray.put(entityJson);
LOG.debug("Replacing entity= " + tableInstance);
serviceClient.updateEntities(tableInstance);
ClientResponse clientResponse = service.path(ENTITIES).
accept(Servlets.JSON_MEDIA_TYPE).type(Servlets.JSON_MEDIA_TYPE).
method(HttpMethod.PUT, ClientResponse.class, entityArray);
Assert.assertEquals(clientResponse.getStatus(), Response.Status.OK.getStatusCode());
ClientResponse response = getEntityDefinition(tableId._getId());
String definition = getEntityDefinition(response);
// ATLAS-586: verify response entity can be parsed by GSON.
String entity = clientResponse.getEntity(String.class);
Gson gson = new Gson();
UpdateEntitiesResponse updateEntitiesResponse = null;
try {
updateEntitiesResponse = gson.fromJson(entity, UpdateEntitiesResponse.class);
}
catch (JsonSyntaxException e) {
Assert.fail("Response entity from " + service.path(ENTITIES).getURI() + " not parseable by GSON", e);
}
clientResponse = getEntityDefinition(tableId._getId());
String definition = getEntityDefinition(clientResponse);
Referenceable getReferenceable = InstanceSerialization.fromJsonReferenceable(definition, true);
List<Referenceable> refs = (List<Referenceable>) getReferenceable.get("columns");
Assert.assertEquals(refs.size(), 2);
......@@ -744,6 +768,17 @@ public class EntityJerseyResourceIT extends BaseResourceIT {
Assert.assertTrue(refs.get(1).equalsContents(columns.get(1)));
}
private static class UpdateEntitiesResponse {
String requestId;
String[] GUID;
AtlasEntity definition;
}
private static class AtlasEntity {
String typeName;
final Map<String, Object> values = new HashMap<String, Object>();
}
@Test
public void testDeleteEntitiesViaRestApi() throws Exception {
// Create 2 database entities
......@@ -761,10 +796,7 @@ public class EntityJerseyResourceIT extends BaseResourceIT {
queryParam(AtlasClient.GUID.toLowerCase(), db1Id._getId()).
queryParam(AtlasClient.GUID.toLowerCase(), db2Id._getId()).
accept(Servlets.JSON_MEDIA_TYPE).type(Servlets.JSON_MEDIA_TYPE).method(HttpMethod.DELETE, ClientResponse.class);
Assert.assertEquals(clientResponse.getStatus(), Response.Status.OK.getStatusCode());
// Verify that response has guids for both database entities
JSONObject response = new JSONObject(clientResponse.getEntity(String.class));
JSONObject response = getEntity(clientResponse);
final String deletedGuidsJson = response.getString(AtlasClient.GUID);
Assert.assertNotNull(deletedGuidsJson);
JSONArray guidsArray = new JSONArray(deletedGuidsJson);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment