http patch request added 51/42451/3
authorpwielebs <piotr.wielebski@nokia.com>
Thu, 12 Apr 2018 08:34:26 +0000 (10:34 +0200)
committerpwielebs <piotr.wielebski@nokia.com>
Thu, 12 Apr 2018 12:16:07 +0000 (14:16 +0200)
Change-Id: I9b3e339008d790b253e2b94e4b307b9a86907988
Issue-ID: DCAEGEN2-407
Signed-off-by: pwielebs <piotr.wielebski@nokia.com>
prh-aai-client/src/main/java/org/onap/dcaegen2/services/service/AAIExtendedHttpClientImpl.java
prh-aai-client/src/main/java/org/onap/dcaegen2/services/utils/HttpRequestDetails.java
prh-aai-client/src/main/java/org/onap/dcaegen2/services/utils/RequestVerbs.java
prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/AAIExtendedHttpClientImplTest.java
prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/AAIHttpClientImplTest.java
prh-aai-client/src/test/java/org/onap/dcaegen2/services/service/utils/HttpRequestDetailsTest.java

index 133a537..048d9fe 100644 (file)
@@ -23,9 +23,11 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.ResponseHandler;
 import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPatch;
 import org.apache.http.client.methods.HttpPut;
 import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.util.EntityUtils;
 import org.onap.dcaegen2.services.config.AAIHttpClientConfiguration;
@@ -38,6 +40,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 import javax.annotation.Nonnull;
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Iterator;
@@ -151,6 +154,9 @@ public class AAIExtendedHttpClientImpl implements AAIExtendedHttpClient {
             return new HttpGet(extendedURI);
         } else if (isExtendedURINotNull(extendedURI) && (httpRequestDetails.requestVerb().equals(RequestVerbs.PUT))) {
             return new HttpPut(extendedURI);
+        } else if (isExtendedURINotNull(extendedURI) &&
+                isPatchRequestValid(httpRequestDetails.requestVerb(),httpRequestDetails.jsonBody())) {
+            return createHttpPatch(extendedURI, httpRequestDetails.jsonBody());
         } else {
             return null;
         }
@@ -159,4 +165,31 @@ public class AAIExtendedHttpClientImpl implements AAIExtendedHttpClient {
     private Boolean isExtendedURINotNull(URI extendedURI) {
         return extendedURI != null ? true : false;
     }
+
+    private Optional<StringEntity> createStringEntity(Optional<String> jsonBody) {
+        return Optional.of(parseJson(jsonBody).get());
+    }
+
+    private HttpPatch createHttpPatch(URI extendedURI, Optional<String> jsonBody) {
+        HttpPatch httpPatch = new HttpPatch(extendedURI);
+        Optional<StringEntity> stringEntity = createStringEntity(jsonBody);
+        httpPatch.setEntity(stringEntity.get());
+        return httpPatch;
+    }
+
+    private Optional<StringEntity> parseJson(Optional<String> jsonBody) {
+        Optional<StringEntity> stringEntity = Optional.empty();
+
+        try {
+            stringEntity = Optional.of(new StringEntity(jsonBody.get()));
+        } catch (UnsupportedEncodingException e) {
+            logger.error("Exception while parsing JSON: {}", e);
+        }
+
+        return stringEntity;
+    }
+
+    private Boolean isPatchRequestValid(RequestVerbs requestVerb, Optional<String> jsonBody) {
+        return requestVerb == RequestVerbs.PATCH && jsonBody.isPresent();
+    }
 }
index 896e306..574cb22 100644 (file)
@@ -24,6 +24,7 @@ import org.immutables.value.Value;
 
 import java.io.Serializable;
 import java.util.Map;
+import java.util.Optional;
 
 @Value.Immutable(prehash = true)
 @Value.Style(stagedBuilder = true)
@@ -34,6 +35,9 @@ public abstract class HttpRequestDetails implements Serializable {
     @Value.Parameter
     public abstract String aaiAPIPath();
 
+    @Value.Parameter
+    public abstract Optional<String> jsonBody();
+
     @Value.Parameter
     public abstract Map<String,String> queryParameters();
 
index f350aa4..9b331de 100644 (file)
@@ -22,7 +22,8 @@ package org.onap.dcaegen2.services.utils;
 
 public enum RequestVerbs {
     GET,
-    PUT;
+    PUT,
+    PATCH;
 
     private RequestVerbs() {};
 }
index e114bbf..9ff34b8 100644 (file)
@@ -31,8 +31,11 @@ import java.util.Map;
 import java.util.Optional;
 import org.apache.http.client.ResponseHandler;
 import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPatch;
 import org.apache.http.client.methods.HttpPut;
 import org.apache.http.impl.client.CloseableHttpClient;
+import org.immutables.value.internal.$processor$.meta.$GsonMirrors;
+import org.junit.Ignore;
 import org.junit.jupiter.api.*;
 import org.onap.dcaegen2.services.config.AAIHttpClientConfiguration;
 import org.onap.dcaegen2.services.utils.HttpRequestDetails;
@@ -45,19 +48,21 @@ public class AAIExtendedHttpClientImplTest {
     private static CloseableHttpClient closeableHttpClientMock = mock(CloseableHttpClient.class);
     private static HttpRequestDetails httpRequestDetailsMock = mock(HttpRequestDetails.class);
     private static Optional<String> expectedResult = Optional.empty();
+    private static final String JSON_MESSAGE = "{ \"ipaddress-v4-oam\": \"11.22.33.44\" }";
+    private static final String PNF_ID = "NOKQTFCOC540002E";
 
     @BeforeAll
     public static void init() throws NoSuchFieldException, IllegalAccessException {
 
         Map<String, String> queryParams = new HashMap<>();
-        queryParams.put("ipaddress-v4-oam", "11.22.33.44");
+        queryParams.put("pnf-id", PNF_ID);
 
-        Map<String, String> AAI_HEADERS = new HashMap<>();
-        AAI_HEADERS.put("X-FromAppId", "prh");
-        AAI_HEADERS.put("X-TransactionId", "vv-temp");
-        AAI_HEADERS.put("Accept", "application/json");
-        AAI_HEADERS.put("Real-Time", "true");
-        AAI_HEADERS.put("Content-Type", "application/json");
+        Map<String, String> aaiHeaders = new HashMap<>();
+        aaiHeaders.put("X-FromAppId", "prh");
+        aaiHeaders.put("X-TransactionId", "vv-temp");
+        aaiHeaders.put("Accept", "application/json");
+        aaiHeaders.put("Real-Time", "true");
+        aaiHeaders.put("Content-Type", "application/json");
 
         when(aaiHttpClientConfigurationMock.aaiHost()).thenReturn("54.45.33.2");
         when(aaiHttpClientConfigurationMock.aaiProtocol()).thenReturn("https");
@@ -65,9 +70,10 @@ public class AAIExtendedHttpClientImplTest {
         when(aaiHttpClientConfigurationMock.aaiUserName()).thenReturn("PRH");
         when(aaiHttpClientConfigurationMock.aaiUserPassword()).thenReturn("PRH");
 
-        when(httpRequestDetailsMock.aaiAPIPath()).thenReturn("/aai/v11/network/pnfs/pnf/NOKQTFCOC540002E");
-        when(httpRequestDetailsMock.headers()).thenReturn(AAI_HEADERS);
+        when(httpRequestDetailsMock.aaiAPIPath()).thenReturn("/aai/v11/network/pnfs/pnf");
+        when(httpRequestDetailsMock.headers()).thenReturn(aaiHeaders);
         when(httpRequestDetailsMock.queryParameters()).thenReturn(queryParams);
+        when(httpRequestDetailsMock.jsonBody()).thenReturn(Optional.of(JSON_MESSAGE));
 
         testedObject = new AAIExtendedHttpClientImpl(aaiHttpClientConfigurationMock);
         setField();
@@ -83,13 +89,13 @@ public class AAIExtendedHttpClientImplTest {
     }
 
     @Test
-    public void getHttpResponseGet_success() throws IOException {
-        when(httpRequestDetailsMock.requestVerb()).thenReturn(RequestVerbs.GET);
+    public void getHttpResponsePatch_success() throws IOException {
+        when(httpRequestDetailsMock.requestVerb()).thenReturn(RequestVerbs.PATCH);
 
-        expectedResult = Optional.of("getExtendedDetailsOK");
+        expectedResult = Optional.of(JSON_MESSAGE);
 
-        when(closeableHttpClientMock.execute(any(HttpGet.class), any(ResponseHandler.class))).
-                thenReturn(expectedResult);
+        when(closeableHttpClientMock.execute(any(HttpPatch.class), any(ResponseHandler.class)))
+                .thenReturn(expectedResult);
         Optional<String> actualResult = testedObject.getHttpResponse(httpRequestDetailsMock);
 
         Assertions.assertEquals(expectedResult.get(), actualResult.get());
index d26e6af..fd13f1e 100644 (file)
@@ -44,7 +44,6 @@ public class AAIHttpClientImplTest {
         when(aaiHttpClientConfigurationMock.aaiUserPassword()).thenReturn("PNF");
         when(aaiHttpClientConfigurationMock.aaiIgnoreSSLCertificateErrors()).thenReturn(true);
 
-
         testedObject  = new AAIHttpClientImpl(aaiHttpClientConfigurationMock);
     }
 
index 36105d0..563e692 100644 (file)
@@ -28,17 +28,20 @@ import org.onap.dcaegen2.services.utils.HttpRequestDetails;
 import org.onap.dcaegen2.services.utils.ImmutableHttpRequestDetails;
 import org.onap.dcaegen2.services.utils.RequestVerbs;
 
+import java.util.Optional;
+
 
 public class HttpRequestDetailsTest {
 
     private static HttpRequestDetails testObject;
 
     private static final String AAI_PATH = "aaiPathTest";
-    private static final RequestVerbs HTTP_VERB = RequestVerbs.GET;
+    private static final RequestVerbs HTTP_VERB = RequestVerbs.PATCH;
     private static final String QUERY_KEY1 = "queryKey1";
     private static final String QUERY_VALUE1 = "queryValue1";
     private static final String HEADERS_KEY1 = "headersKey1";
     private static final String HEADERS_VALUE1 = "headersValue1";
+    private static final String JSON_MESSAGE = "{\"dare_to\": \"dream_big\"}";
 
     @BeforeAll
     public static void init() {
@@ -47,6 +50,7 @@ public class HttpRequestDetailsTest {
                 .requestVerb(HTTP_VERB)
                 .putQueryParameters(QUERY_KEY1,QUERY_VALUE1)
                 .putHeaders(HEADERS_KEY1,HEADERS_VALUE1)
+                .jsonBody(JSON_MESSAGE)
                 .build();
     }
 
@@ -55,6 +59,7 @@ public class HttpRequestDetailsTest {
         Assertions.assertEquals(AAI_PATH, testObject.aaiAPIPath());
         Assertions.assertEquals(HEADERS_VALUE1, testObject.headers().get(HEADERS_KEY1));
         Assertions.assertEquals(QUERY_VALUE1, testObject.queryParameters().get(QUERY_KEY1));
-        Assertions.assertEquals(RequestVerbs.GET, testObject.requestVerb());
+        Assertions.assertEquals(RequestVerbs.PATCH, testObject.requestVerb());
+        Assertions.assertEquals(Optional.of(JSON_MESSAGE), testObject.jsonBody());
     }
 }