Add support to bulk api for patch/deletes 81/25481/1
authorMaharajh, Robby (rx2202) <rx2202@us.att.com>
Mon, 4 Dec 2017 20:49:29 +0000 (15:49 -0500)
committerMaharajh, Robby (rx2202) <rx2202@us.att.com>
Mon, 4 Dec 2017 20:49:39 +0000 (15:49 -0500)
reationships

Issue-ID: AAI-534
Change-Id: I5334bb047ff1977474cd7b653e61d47ee7e99220
Signed-off-by: Maharajh, Robby (rx2202) <rx2202@us.att.com>
aai-resources/src/main/java/org/onap/aai/rest/BulkConsumer.java
aai-resources/src/test/java/org/onap/aai/rest/BulkProcessConsumerTest.java
aai-resources/src/test/resources/payloads/bulk/complex-bulk-process-delete-transactions.json [new file with mode: 0644]
aai-resources/src/test/resources/payloads/relationship/complex-bugfix.json [new file with mode: 0644]
aai-resources/src/test/resources/payloads/relationship/pserver-bugfix.json [new file with mode: 0644]
aai-resources/src/test/resources/payloads/relationship/pserver-complex-relationship-for-bulk.json [new file with mode: 0644]

index 5a90bc5..a973250 100644 (file)
@@ -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));
index 92d1637..8a75a96 100644 (file)
-/**
- * ============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";
-       }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * org.onap.aai\r
+ * ================================================================================\r
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *    http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
+ */\r
+package org.onap.aai.rest;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.mockito.Mockito.when;\r
+\r
+import java.io.IOException;\r
+\r
+import javax.ws.rs.core.Response;\r
+\r
+import org.apache.commons.lang3.StringUtils;\r
+import org.json.JSONException;\r
+import org.junit.Test;\r
+import org.onap.aai.introspection.Version;\r
+import org.skyscreamer.jsonassert.JSONAssert;\r
+\r
+import com.att.eelf.configuration.EELFLogger;\r
+import com.att.eelf.configuration.EELFManager;\r
+\r
+public class BulkProcessConsumerTest extends BulkProcessorTestAbstraction {\r
+\r
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(BulkProcessConsumerTest.class.getName());\r
+    private LegacyMoxyConsumer legacyMoxyConsumer;\r
+\r
+       @Test\r
+    public void bulkAddPayloadInBulkProcessTest() throws IOException {\r
+\r
+        when(uriInfo.getPath()).thenReturn(uri);\r
+        when(uriInfo.getPath(false)).thenReturn(uri);\r
+\r
+        String payload = getBulkPayload("pserver-transactions");\r
+        Response response = executeRequest(payload);\r
+\r
+        assertEquals("Valid Response Code", Response.Status.CREATED.getStatusCode(), response.getStatus());\r
+        assertEquals("Contains 3 {\"201\":null}", 3, StringUtils.countMatches(response.getEntity().toString(), "{\"201\":null}"));\r
+    }\r
+       \r
+       @Test\r
+    public void bulkProcessPayloadTest() throws IOException {\r
+\r
+        when(uriInfo.getPath()).thenReturn(uri);\r
+        when(uriInfo.getPath(false)).thenReturn(uri);\r
+\r
+        String payload = getBulkPayload("pserver-bulk-process-transactions");\r
+        Response response = executeRequest(payload);\r
+\r
+        assertEquals("Valid Response Code", Response.Status.CREATED.getStatusCode(), response.getStatus());\r
+        assertEquals("Contains 1 {\"201\":null}", 1, StringUtils.countMatches(response.getEntity().toString(), "{\"201\":null}"));\r
+        assertEquals("Contains 1 {\"404\":\"{", 1, StringUtils.countMatches(response.getEntity().toString(), "{\"404\":\"{"));\r
+        assertEquals("Contains 1 ERR.5.4.6114", 1, StringUtils.countMatches(response.getEntity().toString(), "ERR.5.4.6114"));\r
+    }\r
+       \r
+       @Test\r
+    public void bulkProcessComplexDeletePayloadTest() throws IOException {\r
+\r
+        when(uriInfo.getPath()).thenReturn(uri);\r
+        when(uriInfo.getPath(false)).thenReturn(uri);\r
+\r
+        String payload = getBulkPayload("complex-bulk-process-transactions");\r
+        Response response = executeRequest(payload);\r
+\r
+        System.out.println(response.getEntity().toString());\r
+        assertEquals("Valid Response Code", Response.Status.CREATED.getStatusCode(), response.getStatus());\r
+        assertEquals("Contains 0 {\"201\":null}", 0, StringUtils.countMatches(response.getEntity().toString(), "{\"201\":null}"));\r
+        assertEquals("Contains 1 {\"404\":\"{", 1, StringUtils.countMatches(response.getEntity().toString(), "{\"404\":\"{"));\r
+        assertEquals("Contains 1 ERR.5.4.6114", 1, StringUtils.countMatches(response.getEntity().toString(), "ERR.5.4.6114"));\r
+    }\r
+       \r
+       @Test\r
+    public void testBulkDeletePserverAndComplexRelationship() throws IOException, JSONException {\r
+               \r
+               legacyMoxyConsumer  = new LegacyMoxyConsumer();\r
+\r
+        String pserverData = getPayload("payloads/relationship/pserver-bugfix.json");\r
+        String complexData = getPayload("payloads/relationship/complex-bugfix.json");\r
+\r
+        String hostname = "pserver-9876543210-77-jenkins";\r
+        String physicalLocationId ="complex-987654321-77-jenkins";\r
+\r
+        String pserverUri = String.format("cloud-infrastructure/pservers/pserver/%s", hostname);\r
+        String complexUri = String.format("cloud-infrastructure/complexes/complex/%s", physicalLocationId);\r
+\r
+        doSetupResource(pserverUri, pserverData);\r
+        doSetupResource(complexUri, complexData);\r
+\r
+        String complexToPserverRelationshipData = getPayload("payloads/relationship/pserver-complex-relationship-for-bulk.json");\r
+        String complexToPserverRelationshipUri = String.format(\r
+                "cloud-infrastructure/pservers/pserver/%s/relationship-list/relationship", hostname);\r
+\r
+        Response response = legacyMoxyConsumer.updateRelationship(\r
+                complexToPserverRelationshipData,\r
+                Version.getLatest().toString(),\r
+                complexToPserverRelationshipUri,\r
+                httpHeaders,\r
+                uriInfo,\r
+                null\r
+        );\r
+\r
+        assertNotNull("Response from the legacy moxy consumer returned null", response);\r
+        int code = response.getStatus();\r
+        if(!VALID_HTTP_STATUS_CODES.contains(code)){\r
+            System.out.println("Response Code: " + code + "\tEntity: " +  response.getEntity());\r
+        }\r
+\r
+        assertEquals("Expected to return status created from the response",\r
+                Response.Status.OK.getStatusCode(), response.getStatus());\r
+        logger.info("Response Code: " + code + "\tEntity: " +  response.getEntity());\r
+\r
+        // TODO - Need to actually verify the relationship between pserver and cloud-region\r
+        \r
+        String payload = getBulkPayload("complex-bulk-process-delete-transactions");\r
+        Response responseBulkDelete = executeRequest(payload);\r
+\r
+        System.out.println(responseBulkDelete.getEntity().toString());\r
+        \r
+        code = responseBulkDelete.getStatus();\r
+        \r
+        if(!VALID_HTTP_STATUS_CODES.contains(code)){\r
+            System.out.println("Response Code: " + code + "\tEntity: " +  responseBulkDelete.getEntity());\r
+            System.out.println("Response Code: " + code + "\tEntity: " +  responseBulkDelete.getEntity());\r
+        } \r
+        assertEquals("Expected to return status created from the response",\r
+                       Response.Status.CREATED.getStatusCode(), responseBulkDelete.getStatus());\r
+        assertEquals("Contains 0 {\"204\":null}", 1, StringUtils.countMatches(responseBulkDelete.getEntity().toString(), "{\"204\":null}"));\r
+        \r
+    }\r
+       \r
+    protected void doSetupResource(String uri, String payload) throws JSONException {\r
+\r
+        when(uriInfo.getPath()).thenReturn(uri);\r
+        when(uriInfo.getPath(false)).thenReturn(uri);\r
+\r
+        Response response = legacyMoxyConsumer.getLegacy(\r
+                "",\r
+                Version.getLatest().toString(),\r
+                uri,\r
+                "all",\r
+                "false",\r
+                httpHeaders,\r
+                uriInfo,\r
+                null\r
+        );\r
+\r
+        assertNotNull("Response from the legacy moxy consumer returned null", response);\r
+        assertEquals("Expected to not have the data already in memory",\r
+                Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());\r
+\r
+        response = legacyMoxyConsumer.update(\r
+                payload,\r
+                Version.getLatest().toString(),\r
+                uri,\r
+                httpHeaders,\r
+                uriInfo,\r
+                null\r
+        );\r
+\r
+        assertNotNull("Response from the legacy moxy consumer returned null", response);\r
+        int code = response.getStatus();\r
+        if(!VALID_HTTP_STATUS_CODES.contains(code)){\r
+            System.out.println("Response Code: " + code + "\tEntity: " +  response.getEntity());\r
+        }\r
+        assertEquals("Expected to return status created from the response",\r
+                Response.Status.CREATED.getStatusCode(), response.getStatus());\r
+\r
+        queryParameters.add("depth", "10000");\r
+        response = legacyMoxyConsumer.getLegacy(\r
+                "",\r
+                Version.getLatest().toString(),\r
+                uri,\r
+                "all",\r
+                "false",\r
+                httpHeaders,\r
+                uriInfo,\r
+                null\r
+        );\r
+\r
+        assertNotNull("Response from the legacy moxy consumer returned null", response);\r
+        assertEquals("Expected to return the pserver data that was just put in memory",\r
+                Response.Status.OK.getStatusCode(), response.getStatus());\r
+\r
+        if("".equalsIgnoreCase(payload)){\r
+            payload = "{}";\r
+        }\r
+\r
+        JSONAssert.assertEquals(payload, response.getEntity().toString(), false);\r
+    }\r
+       \r
+       \r
+       @Test\r
+    public void bulkAddInvalidMethodTest() throws IOException {\r
+\r
+        when(uriInfo.getPath()).thenReturn(uri);\r
+        when(uriInfo.getPath(false)).thenReturn(uri);\r
+\r
+        String payload = getBulkPayload("pserver-transactions-invalid-method");\r
+        Response response = executeRequest(payload);\r
+\r
+        assertEquals("Valid Response Code", Response.Status.CREATED.getStatusCode(), response.getStatus());\r
+        assertEquals("Contains 1 {\"400\":\"{", 1, StringUtils.countMatches(response.getEntity().toString(), "{\"400\":\"{"));\r
+        assertEquals("Contains 1 ERR.5.4.6118", 1, StringUtils.countMatches(response.getEntity().toString(), "ERR.5.4.6118"));\r
+    }\r
+\r
+    @Test\r
+    public void bulkAddThrowExceptionWhenPayloadContainsNoTransactionsTest(){\r
+\r
+        when(uriInfo.getPath()).thenReturn(uri);\r
+        when(uriInfo.getPath(false)).thenReturn(uri);\r
+\r
+        String payload = "{\"transactions\":[]}";\r
+        Response response = executeRequest(payload);\r
+\r
+        assertEquals("Bad Request", Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());\r
+        assertEquals("Contains error code", true, response.getEntity().toString().contains("ERR.5.4.6118"));\r
+    }\r
+\r
+    @Test\r
+    public void bulkAddThrowExceptionWhenInvalidJsonTest() throws IOException {\r
+\r
+        when(uriInfo.getPath()).thenReturn(uri);\r
+        when(uriInfo.getPath(false)).thenReturn(uri);\r
+\r
+        String payload = "{";\r
+        Response response = executeRequest(payload);\r
+\r
+        assertEquals("Bad Request", Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());\r
+        assertEquals("Contains error code", true, response.getEntity().toString().contains("ERR.5.4.6111"));\r
+    }\r
+    \r
+    @Override\r
+    protected BulkConsumer getConsumer(){\r
+        return new BulkProcessConsumer();\r
+    }\r
+  \r
+    @Override\r
+    protected String getUri() {\r
+               return "/aai/" + Version.getLatest().toString() + "/bulkprocess";\r
+       }\r
+}\r
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 (file)
index 0000000..96a4228
--- /dev/null
@@ -0,0 +1,20 @@
+{\r
+       "transactions": [\r
+               {\r
+                       "delete": [\r
+                               {\r
+                                       "uri": "/cloud-infrastructure/pservers/pserver/pserver-9876543210-77-jenkins/relationship-list/relationship",\r
+                                       "body": {\r
+                                               "related-to": "complex",\r
+                                               "relationship-data": [\r
+                                                       {\r
+                                                               "relationship-key": "complex.physical-location-id",\r
+                                                               "relationship-value": "complex-987654321-77-jenkins"\r
+                                                       }\r
+                                               ]\r
+                                       }\r
+                               }\r
+                       ]\r
+               }\r
+       ]\r
+}
\ 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 (file)
index 0000000..29fe3d6
--- /dev/null
@@ -0,0 +1,16 @@
+{\r
+  "physical-location-id" : "complex-987654321-77-jenkins",\r
+  "physical-location-type" : "uug",\r
+  "street1" : "kDv5Ge6dr",\r
+  "city" : "KpEa5IjqY0u82",\r
+  "postal-code" : "6CRqacfEW2",\r
+  "country" : "P0ho",\r
+  "region" : "Sk2QevPYRBjT",\r
+  "ctag-pools" : {\r
+    "ctag-pool" : [ {\r
+      "target-pe" : "5dbe73c6-cedf-4e68-a7c5-699ba6d90e1d",\r
+      "availability-zone-name" : "819ec2fa-fb9f-49f0-8fd8-5feb941aad1f",\r
+      "ctag-pool-purpose" : "4TMeWI"\r
+    } ]\r
+  }\r
+}
\ 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 (file)
index 0000000..e78bd7a
--- /dev/null
@@ -0,0 +1,4 @@
+{\r
+  "hostname" : "pserver-9876543210-77-jenkins",\r
+  "in-maint" : false\r
+}
\ 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 (file)
index 0000000..72982af
--- /dev/null
@@ -0,0 +1,8 @@
+{\r
+  "related-to" : "complex",\r
+  "related-link" : "/aai/v11/cloud-infrastructure/complexes/complex/complex-987654321-77-jenkins",\r
+  "relationship-data" : [{\r
+    "relationship-key" : "complex.physical-location-id",\r
+    "relationship-value" : "complex-987654321-77-jenkins"\r
+  }]\r
+}
\ No newline at end of file