diff options
author | Maharajh, Robby (rx2202) <rx2202@us.att.com> | 2017-12-04 15:49:29 -0500 |
---|---|---|
committer | Maharajh, Robby (rx2202) <rx2202@us.att.com> | 2017-12-04 15:49:39 -0500 |
commit | cdc1733ce7f53902d551a7d38c65dc23210d0b70 (patch) | |
tree | d09150e28c979541ccda95df5676ae37199afe88 | |
parent | 45f302a5f05223d98a23b5ca2dbf6c6fe0f823df (diff) |
Add support to bulk api for patch/deletes
reationships
Issue-ID: AAI-534
Change-Id: I5334bb047ff1977474cd7b653e61d47ee7e99220
Signed-off-by: Maharajh, Robby (rx2202) <rx2202@us.att.com>
6 files changed, 308 insertions, 138 deletions
diff --git a/aai-resources/src/main/java/org/onap/aai/rest/BulkConsumer.java b/aai-resources/src/main/java/org/onap/aai/rest/BulkConsumer.java index 5a90bc5..a973250 100644 --- a/aai-resources/src/main/java/org/onap/aai/rest/BulkConsumer.java +++ b/aai-resources/src/main/java/org/onap/aai/rest/BulkConsumer.java @@ -378,7 +378,7 @@ public abstract class BulkConsumer extends RESTAPI { String bodyStr = gson.toJson(bodyObj); bulkOperation.setRawReq(bodyStr); - if (bulkOperation.getHttpMethod().equals(HttpMethod.PUT_EDGE)) { + if (bulkOperation.getHttpMethod().equals(HttpMethod.PUT_EDGE) || bulkOperation.getHttpMethod().equals(HttpMethod.DELETE_EDGE)) { Introspector obj; try { obj = loader.unmarshal("relationship", bodyStr, org.onap.aai.restcore.MediaType.getEnum(inputMediaType)); diff --git a/aai-resources/src/test/java/org/onap/aai/rest/BulkProcessConsumerTest.java b/aai-resources/src/test/java/org/onap/aai/rest/BulkProcessConsumerTest.java index 92d1637..8a75a96 100644 --- a/aai-resources/src/test/java/org/onap/aai/rest/BulkProcessConsumerTest.java +++ b/aai-resources/src/test/java/org/onap/aai/rest/BulkProcessConsumerTest.java @@ -1,137 +1,259 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed 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. - * ============LICENSE_END========================================================= - * - * ECOMP is a trademark and service mark of AT&T Intellectual Property. - */ -package org.onap.aai.rest; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - -import java.io.IOException; - -import javax.ws.rs.core.Response; - -import org.apache.commons.lang3.StringUtils; -import org.junit.Test; -import org.onap.aai.introspection.Version; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; - -public class BulkProcessConsumerTest extends BulkProcessorTestAbstraction { - - private static final EELFLogger logger = EELFManager.getInstance().getLogger(BulkProcessConsumerTest.class.getName()); - - - @Test - public void bulkAddPayloadInBulkProcessTest() throws IOException { - - when(uriInfo.getPath()).thenReturn(uri); - when(uriInfo.getPath(false)).thenReturn(uri); - - String payload = getBulkPayload("pserver-transactions"); - Response response = executeRequest(payload); - - assertEquals("Valid Response Code", Response.Status.CREATED.getStatusCode(), response.getStatus()); - assertEquals("Contains 3 {\"201\":null}", 3, StringUtils.countMatches(response.getEntity().toString(), "{\"201\":null}")); - } - - @Test - public void bulkProcessPayloadTest() throws IOException { - - when(uriInfo.getPath()).thenReturn(uri); - when(uriInfo.getPath(false)).thenReturn(uri); - - String payload = getBulkPayload("pserver-bulk-process-transactions"); - Response response = executeRequest(payload); - - assertEquals("Valid Response Code", Response.Status.CREATED.getStatusCode(), response.getStatus()); - assertEquals("Contains 1 {\"201\":null}", 1, StringUtils.countMatches(response.getEntity().toString(), "{\"201\":null}")); - assertEquals("Contains 1 {\"404\":\"{", 1, StringUtils.countMatches(response.getEntity().toString(), "{\"404\":\"{")); - assertEquals("Contains 1 ERR.5.4.6114", 1, StringUtils.countMatches(response.getEntity().toString(), "ERR.5.4.6114")); - } - - @Test - public void bulkProcessComplexDeletePayloadTest() throws IOException { - - when(uriInfo.getPath()).thenReturn(uri); - when(uriInfo.getPath(false)).thenReturn(uri); - - String payload = getBulkPayload("complex-bulk-process-transactions"); - Response response = executeRequest(payload); - - System.out.println(response.getEntity().toString()); - assertEquals("Valid Response Code", Response.Status.CREATED.getStatusCode(), response.getStatus()); - assertEquals("Contains 0 {\"201\":null}", 0, StringUtils.countMatches(response.getEntity().toString(), "{\"201\":null}")); - assertEquals("Contains 1 {\"404\":\"{", 1, StringUtils.countMatches(response.getEntity().toString(), "{\"404\":\"{")); - assertEquals("Contains 1 ERR.5.4.6114", 1, StringUtils.countMatches(response.getEntity().toString(), "ERR.5.4.6114")); - } - - - @Test - public void bulkAddInvalidMethodTest() throws IOException { - - when(uriInfo.getPath()).thenReturn(uri); - when(uriInfo.getPath(false)).thenReturn(uri); - - String payload = getBulkPayload("pserver-transactions-invalid-method"); - Response response = executeRequest(payload); - - assertEquals("Valid Response Code", Response.Status.CREATED.getStatusCode(), response.getStatus()); - assertEquals("Contains 1 {\"400\":\"{", 1, StringUtils.countMatches(response.getEntity().toString(), "{\"400\":\"{")); - assertEquals("Contains 1 ERR.5.4.6118", 1, StringUtils.countMatches(response.getEntity().toString(), "ERR.5.4.6118")); - } - - @Test - public void bulkAddThrowExceptionWhenPayloadContainsNoTransactionsTest(){ - - when(uriInfo.getPath()).thenReturn(uri); - when(uriInfo.getPath(false)).thenReturn(uri); - - String payload = "{\"transactions\":[]}"; - Response response = executeRequest(payload); - - assertEquals("Bad Request", Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); - assertEquals("Contains error code", true, response.getEntity().toString().contains("ERR.5.4.6118")); - } - - @Test - public void bulkAddThrowExceptionWhenInvalidJsonTest() throws IOException { - - when(uriInfo.getPath()).thenReturn(uri); - when(uriInfo.getPath(false)).thenReturn(uri); - - String payload = "{"; - Response response = executeRequest(payload); - - assertEquals("Bad Request", Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); - assertEquals("Contains error code", true, response.getEntity().toString().contains("ERR.5.4.6111")); - } - - @Override - protected BulkConsumer getConsumer(){ - return new BulkProcessConsumer(); - } - - @Override - protected String getUri() { - return "/aai/" + Version.getLatest().toString() + "/bulkprocess"; - } -} +/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.aai.rest;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+
+import javax.ws.rs.core.Response;
+
+import org.apache.commons.lang3.StringUtils;
+import org.json.JSONException;
+import org.junit.Test;
+import org.onap.aai.introspection.Version;
+import org.skyscreamer.jsonassert.JSONAssert;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+public class BulkProcessConsumerTest extends BulkProcessorTestAbstraction {
+
+ private static final EELFLogger logger = EELFManager.getInstance().getLogger(BulkProcessConsumerTest.class.getName());
+ private LegacyMoxyConsumer legacyMoxyConsumer;
+
+ @Test
+ public void bulkAddPayloadInBulkProcessTest() throws IOException {
+
+ when(uriInfo.getPath()).thenReturn(uri);
+ when(uriInfo.getPath(false)).thenReturn(uri);
+
+ String payload = getBulkPayload("pserver-transactions");
+ Response response = executeRequest(payload);
+
+ assertEquals("Valid Response Code", Response.Status.CREATED.getStatusCode(), response.getStatus());
+ assertEquals("Contains 3 {\"201\":null}", 3, StringUtils.countMatches(response.getEntity().toString(), "{\"201\":null}"));
+ }
+
+ @Test
+ public void bulkProcessPayloadTest() throws IOException {
+
+ when(uriInfo.getPath()).thenReturn(uri);
+ when(uriInfo.getPath(false)).thenReturn(uri);
+
+ String payload = getBulkPayload("pserver-bulk-process-transactions");
+ Response response = executeRequest(payload);
+
+ assertEquals("Valid Response Code", Response.Status.CREATED.getStatusCode(), response.getStatus());
+ assertEquals("Contains 1 {\"201\":null}", 1, StringUtils.countMatches(response.getEntity().toString(), "{\"201\":null}"));
+ assertEquals("Contains 1 {\"404\":\"{", 1, StringUtils.countMatches(response.getEntity().toString(), "{\"404\":\"{"));
+ assertEquals("Contains 1 ERR.5.4.6114", 1, StringUtils.countMatches(response.getEntity().toString(), "ERR.5.4.6114"));
+ }
+
+ @Test
+ public void bulkProcessComplexDeletePayloadTest() throws IOException {
+
+ when(uriInfo.getPath()).thenReturn(uri);
+ when(uriInfo.getPath(false)).thenReturn(uri);
+
+ String payload = getBulkPayload("complex-bulk-process-transactions");
+ Response response = executeRequest(payload);
+
+ System.out.println(response.getEntity().toString());
+ assertEquals("Valid Response Code", Response.Status.CREATED.getStatusCode(), response.getStatus());
+ assertEquals("Contains 0 {\"201\":null}", 0, StringUtils.countMatches(response.getEntity().toString(), "{\"201\":null}"));
+ assertEquals("Contains 1 {\"404\":\"{", 1, StringUtils.countMatches(response.getEntity().toString(), "{\"404\":\"{"));
+ assertEquals("Contains 1 ERR.5.4.6114", 1, StringUtils.countMatches(response.getEntity().toString(), "ERR.5.4.6114"));
+ }
+
+ @Test
+ public void testBulkDeletePserverAndComplexRelationship() throws IOException, JSONException {
+
+ legacyMoxyConsumer = new LegacyMoxyConsumer();
+
+ String pserverData = getPayload("payloads/relationship/pserver-bugfix.json");
+ String complexData = getPayload("payloads/relationship/complex-bugfix.json");
+
+ String hostname = "pserver-9876543210-77-jenkins";
+ String physicalLocationId ="complex-987654321-77-jenkins";
+
+ String pserverUri = String.format("cloud-infrastructure/pservers/pserver/%s", hostname);
+ String complexUri = String.format("cloud-infrastructure/complexes/complex/%s", physicalLocationId);
+
+ doSetupResource(pserverUri, pserverData);
+ doSetupResource(complexUri, complexData);
+
+ String complexToPserverRelationshipData = getPayload("payloads/relationship/pserver-complex-relationship-for-bulk.json");
+ String complexToPserverRelationshipUri = String.format(
+ "cloud-infrastructure/pservers/pserver/%s/relationship-list/relationship", hostname);
+
+ Response response = legacyMoxyConsumer.updateRelationship(
+ complexToPserverRelationshipData,
+ Version.getLatest().toString(),
+ complexToPserverRelationshipUri,
+ httpHeaders,
+ uriInfo,
+ null
+ );
+
+ assertNotNull("Response from the legacy moxy consumer returned null", response);
+ int code = response.getStatus();
+ if(!VALID_HTTP_STATUS_CODES.contains(code)){
+ System.out.println("Response Code: " + code + "\tEntity: " + response.getEntity());
+ }
+
+ assertEquals("Expected to return status created from the response",
+ Response.Status.OK.getStatusCode(), response.getStatus());
+ logger.info("Response Code: " + code + "\tEntity: " + response.getEntity());
+
+ // TODO - Need to actually verify the relationship between pserver and cloud-region
+
+ String payload = getBulkPayload("complex-bulk-process-delete-transactions");
+ Response responseBulkDelete = executeRequest(payload);
+
+ System.out.println(responseBulkDelete.getEntity().toString());
+
+ code = responseBulkDelete.getStatus();
+
+ if(!VALID_HTTP_STATUS_CODES.contains(code)){
+ System.out.println("Response Code: " + code + "\tEntity: " + responseBulkDelete.getEntity());
+ System.out.println("Response Code: " + code + "\tEntity: " + responseBulkDelete.getEntity());
+ }
+ assertEquals("Expected to return status created from the response",
+ Response.Status.CREATED.getStatusCode(), responseBulkDelete.getStatus());
+ assertEquals("Contains 0 {\"204\":null}", 1, StringUtils.countMatches(responseBulkDelete.getEntity().toString(), "{\"204\":null}"));
+
+ }
+
+ protected void doSetupResource(String uri, String payload) throws JSONException {
+
+ when(uriInfo.getPath()).thenReturn(uri);
+ when(uriInfo.getPath(false)).thenReturn(uri);
+
+ Response response = legacyMoxyConsumer.getLegacy(
+ "",
+ Version.getLatest().toString(),
+ uri,
+ "all",
+ "false",
+ httpHeaders,
+ uriInfo,
+ null
+ );
+
+ assertNotNull("Response from the legacy moxy consumer returned null", response);
+ assertEquals("Expected to not have the data already in memory",
+ Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());
+
+ response = legacyMoxyConsumer.update(
+ payload,
+ Version.getLatest().toString(),
+ uri,
+ httpHeaders,
+ uriInfo,
+ null
+ );
+
+ assertNotNull("Response from the legacy moxy consumer returned null", response);
+ int code = response.getStatus();
+ if(!VALID_HTTP_STATUS_CODES.contains(code)){
+ System.out.println("Response Code: " + code + "\tEntity: " + response.getEntity());
+ }
+ assertEquals("Expected to return status created from the response",
+ Response.Status.CREATED.getStatusCode(), response.getStatus());
+
+ queryParameters.add("depth", "10000");
+ response = legacyMoxyConsumer.getLegacy(
+ "",
+ Version.getLatest().toString(),
+ uri,
+ "all",
+ "false",
+ httpHeaders,
+ uriInfo,
+ null
+ );
+
+ assertNotNull("Response from the legacy moxy consumer returned null", response);
+ assertEquals("Expected to return the pserver data that was just put in memory",
+ Response.Status.OK.getStatusCode(), response.getStatus());
+
+ if("".equalsIgnoreCase(payload)){
+ payload = "{}";
+ }
+
+ JSONAssert.assertEquals(payload, response.getEntity().toString(), false);
+ }
+
+
+ @Test
+ public void bulkAddInvalidMethodTest() throws IOException {
+
+ when(uriInfo.getPath()).thenReturn(uri);
+ when(uriInfo.getPath(false)).thenReturn(uri);
+
+ String payload = getBulkPayload("pserver-transactions-invalid-method");
+ Response response = executeRequest(payload);
+
+ assertEquals("Valid Response Code", Response.Status.CREATED.getStatusCode(), response.getStatus());
+ assertEquals("Contains 1 {\"400\":\"{", 1, StringUtils.countMatches(response.getEntity().toString(), "{\"400\":\"{"));
+ assertEquals("Contains 1 ERR.5.4.6118", 1, StringUtils.countMatches(response.getEntity().toString(), "ERR.5.4.6118"));
+ }
+
+ @Test
+ public void bulkAddThrowExceptionWhenPayloadContainsNoTransactionsTest(){
+
+ when(uriInfo.getPath()).thenReturn(uri);
+ when(uriInfo.getPath(false)).thenReturn(uri);
+
+ String payload = "{\"transactions\":[]}";
+ Response response = executeRequest(payload);
+
+ assertEquals("Bad Request", Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
+ assertEquals("Contains error code", true, response.getEntity().toString().contains("ERR.5.4.6118"));
+ }
+
+ @Test
+ public void bulkAddThrowExceptionWhenInvalidJsonTest() throws IOException {
+
+ when(uriInfo.getPath()).thenReturn(uri);
+ when(uriInfo.getPath(false)).thenReturn(uri);
+
+ String payload = "{";
+ Response response = executeRequest(payload);
+
+ assertEquals("Bad Request", Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
+ assertEquals("Contains error code", true, response.getEntity().toString().contains("ERR.5.4.6111"));
+ }
+
+ @Override
+ protected BulkConsumer getConsumer(){
+ return new BulkProcessConsumer();
+ }
+
+ @Override
+ protected String getUri() {
+ return "/aai/" + Version.getLatest().toString() + "/bulkprocess";
+ }
+}
diff --git a/aai-resources/src/test/resources/payloads/bulk/complex-bulk-process-delete-transactions.json b/aai-resources/src/test/resources/payloads/bulk/complex-bulk-process-delete-transactions.json new file mode 100644 index 0000000..96a4228 --- /dev/null +++ b/aai-resources/src/test/resources/payloads/bulk/complex-bulk-process-delete-transactions.json @@ -0,0 +1,20 @@ +{
+ "transactions": [
+ {
+ "delete": [
+ {
+ "uri": "/cloud-infrastructure/pservers/pserver/pserver-9876543210-77-jenkins/relationship-list/relationship",
+ "body": {
+ "related-to": "complex",
+ "relationship-data": [
+ {
+ "relationship-key": "complex.physical-location-id",
+ "relationship-value": "complex-987654321-77-jenkins"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file diff --git a/aai-resources/src/test/resources/payloads/relationship/complex-bugfix.json b/aai-resources/src/test/resources/payloads/relationship/complex-bugfix.json new file mode 100644 index 0000000..29fe3d6 --- /dev/null +++ b/aai-resources/src/test/resources/payloads/relationship/complex-bugfix.json @@ -0,0 +1,16 @@ +{
+ "physical-location-id" : "complex-987654321-77-jenkins",
+ "physical-location-type" : "uug",
+ "street1" : "kDv5Ge6dr",
+ "city" : "KpEa5IjqY0u82",
+ "postal-code" : "6CRqacfEW2",
+ "country" : "P0ho",
+ "region" : "Sk2QevPYRBjT",
+ "ctag-pools" : {
+ "ctag-pool" : [ {
+ "target-pe" : "5dbe73c6-cedf-4e68-a7c5-699ba6d90e1d",
+ "availability-zone-name" : "819ec2fa-fb9f-49f0-8fd8-5feb941aad1f",
+ "ctag-pool-purpose" : "4TMeWI"
+ } ]
+ }
+}
\ No newline at end of file diff --git a/aai-resources/src/test/resources/payloads/relationship/pserver-bugfix.json b/aai-resources/src/test/resources/payloads/relationship/pserver-bugfix.json new file mode 100644 index 0000000..e78bd7a --- /dev/null +++ b/aai-resources/src/test/resources/payloads/relationship/pserver-bugfix.json @@ -0,0 +1,4 @@ +{
+ "hostname" : "pserver-9876543210-77-jenkins",
+ "in-maint" : false
+}
\ No newline at end of file diff --git a/aai-resources/src/test/resources/payloads/relationship/pserver-complex-relationship-for-bulk.json b/aai-resources/src/test/resources/payloads/relationship/pserver-complex-relationship-for-bulk.json new file mode 100644 index 0000000..72982af --- /dev/null +++ b/aai-resources/src/test/resources/payloads/relationship/pserver-complex-relationship-for-bulk.json @@ -0,0 +1,8 @@ +{
+ "related-to" : "complex",
+ "related-link" : "/aai/v11/cloud-infrastructure/complexes/complex/complex-987654321-77-jenkins",
+ "relationship-data" : [{
+ "relationship-key" : "complex.physical-location-id",
+ "relationship-value" : "complex-987654321-77-jenkins"
+ }]
+}
\ No newline at end of file |