APIH should ensure valid requestId UUID 60/87460/1
authorBhatt, Prema <prema.bhatt@att.com>
Fri, 10 May 2019 13:55:00 +0000 (09:55 -0400)
committerBenjamin, Max (mb388a) <mb388a@us.att.com>
Fri, 10 May 2019 13:55:10 +0000 (09:55 -0400)
Added logic to check if the requestId sent in GET orchestrationRequest
query is a valid UUID. Updated existing unit tests and added a new test
for invalid UUID scenario.

Change-Id: I424bef8aa75dd7e47de8145603899820dfb99725
Issue-ID: SO-1865
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/OrchestrationRequests.java
mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/OrchestrationRequestsTest.java
mso-api-handlers/mso-api-handler-infra/src/test/resources/OrchestrationRequest/OrchestrationList.json

index fc407bd..ff8b5d1 100644 (file)
@@ -63,6 +63,7 @@ import org.onap.so.serviceinstancebeans.RequestDetails;
 import org.onap.so.serviceinstancebeans.RequestList;
 import org.onap.so.serviceinstancebeans.RequestStatus;
 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
+import org.onap.so.utils.UUIDChecker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -101,6 +102,15 @@ public class OrchestrationRequests {
 
         InfraActiveRequests infraActiveRequest = null;
         List<org.onap.so.db.request.beans.RequestProcessingData> requestProcessingData = null;
+
+        if (!UUIDChecker.isValidUUID(requestId)) {
+
+            ErrorLoggerInfo errorLoggerInfo =
+                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, ErrorCode.SchemaError)
+                            .errorSource(Constants.MODIFIED_BY_APIHANDLER).build();
+            throw new ValidateException.Builder("Request Id " + requestId + " is not a valid UUID",
+                    HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo).build();
+        }
         try {
             infraActiveRequest = requestsDbClient.getInfraActiveRequestbyRequestId(requestId);
             requestProcessingData = requestsDbClient.getRequestProcessingDataBySoRequestId(requestId);
index 4deaccd..f82f5ac 100644 (file)
@@ -119,7 +119,7 @@ public class OrchestrationRequestsTest extends BaseTest {
         assertEquals("0", response.getHeaders().get("X-MinorVersion").get(0));
         assertEquals("0", response.getHeaders().get("X-PatchVersion").get(0));
         assertEquals("7.0.0", response.getHeaders().get("X-LatestVersion").get(0));
-        assertEquals("00032ab7-na18-42e5-965d-8ea592502018", response.getHeaders().get("X-TransactionID").get(0));
+        assertEquals("00032ab7-1a18-42e5-965d-8ea592502018", response.getHeaders().get("X-TransactionID").get(0));
         assertNotNull(response.getBody().getRequest().getFinishTime());
     }
 
@@ -204,6 +204,29 @@ public class OrchestrationRequestsTest extends BaseTest {
         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
     }
 
+    @Test
+    public void testGetOrchestrationRequestInvalidRequestID() throws Exception {
+        setupTestGetOrchestrationRequest();
+        // TEST INVALID REQUESTID
+        GetOrchestrationResponse testResponse = new GetOrchestrationResponse();
+
+        Request request = ORCHESTRATION_LIST.getRequestList().get(1).getRequest();
+        testResponse.setRequest(request);
+        String testRequestId = "00032ab7-pfb3-42e5-965d-8ea592502016";
+        HttpHeaders headers = new HttpHeaders();
+        headers.set("Accept", MediaType.APPLICATION_JSON);
+        headers.set("Content-Type", MediaType.APPLICATION_JSON);
+        HttpEntity<Request> entity = new HttpEntity<Request>(null, headers);
+
+        UriComponentsBuilder builder = UriComponentsBuilder
+                .fromHttpUrl(createURLWithPort("/onap/so/infra/orchestrationRequests/v7/" + testRequestId));
+
+        ResponseEntity<GetOrchestrationResponse> response =
+                restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, GetOrchestrationResponse.class);
+
+        assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
+    }
+
     @Test
     public void testGetOrchestrationRequestFilter() throws Exception {
         setupTestGetOrchestrationRequestFilter();
@@ -370,14 +393,14 @@ public class OrchestrationRequestsTest extends BaseTest {
 
     public void setupTestGetOrchestrationRequest() throws Exception {
         // For testGetOrchestrationRequest
-        wireMockServer.stubFor(any(urlPathEqualTo("/infraActiveRequests/00032ab7-na18-42e5-965d-8ea592502018"))
+        wireMockServer.stubFor(any(urlPathEqualTo("/infraActiveRequests/00032ab7-1a18-42e5-965d-8ea592502018"))
                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
                         .withBody(new String(Files.readAllBytes(
                                 Paths.get("src/test/resources/OrchestrationRequest/getOrchestrationRequest.json"))))
                         .withStatus(HttpStatus.SC_OK)));
         wireMockServer
                 .stubFor(get(urlPathEqualTo("/requestProcessingData/search/findBySoRequestIdOrderByGroupingIdDesc/"))
-                        .withQueryParam("SO_REQUEST_ID", equalTo("00032ab7-na18-42e5-965d-8ea592502018"))
+                        .withQueryParam("SO_REQUEST_ID", equalTo("00032ab7-1a18-42e5-965d-8ea592502018"))
                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
                                 .withBody(new String(Files.readAllBytes(Paths
                                         .get("src/test/resources/OrchestrationRequest/getRequestProcessingData.json"))))
@@ -386,14 +409,14 @@ public class OrchestrationRequestsTest extends BaseTest {
 
     public void setupTestGetOrchestrationRequestInstanceGroup() throws Exception {
         // For testGetOrchestrationRequest
-        wireMockServer.stubFor(any(urlPathEqualTo("/infraActiveRequests/00032ab7-na18-42e5-965d-8ea592502018"))
+        wireMockServer.stubFor(any(urlPathEqualTo("/infraActiveRequests/00032ab7-1a18-42e5-965d-8ea592502018"))
                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
                         .withBody(new String(Files.readAllBytes(Paths.get(
                                 "src/test/resources/OrchestrationRequest/getOrchestrationRequestInstanceGroup.json"))))
                         .withStatus(HttpStatus.SC_OK)));
         wireMockServer
                 .stubFor(get(urlPathEqualTo("/requestProcessingData/search/findBySoRequestIdOrderByGroupingIdDesc/"))
-                        .withQueryParam("SO_REQUEST_ID", equalTo("00032ab7-na18-42e5-965d-8ea592502018"))
+                        .withQueryParam("SO_REQUEST_ID", equalTo("00032ab7-1a18-42e5-965d-8ea592502018"))
                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
                                 .withBody(new String(Files.readAllBytes(Paths
                                         .get("src/test/resources/OrchestrationRequest/getRequestProcessingData.json"))))
index 90089c0..baddb21 100644 (file)
@@ -34,7 +34,7 @@
       },
       {
          "request":{
-            "requestId":"00032ab7-na18-42e5-965d-8ea592502018",
+            "requestId":"00032ab7-1a18-42e5-965d-8ea592502018",
             "requestScope":"vfModule",
             "requestType":"deleteInstance",
             "requestDetails":{
       },
             {
          "request":{
-            "requestId":"00032ab7-na18-42e5-965d-8ea592502018",
+            "requestId":"00032ab7-1a18-42e5-965d-8ea592502018",
             "requestScope":"instanceGroup",
             "requestType":"addMembers",
             "requestDetails":{