Add unit tests for ExternalAPIUtil
[so.git] / bpmn / MSOCommonBPMN / src / main / groovy / org / onap / so / bpmn / common / scripts / ExternalAPIUtil.groovy
index f2f41ac..250cdda 100644 (file)
@@ -2,14 +2,14 @@
  * ============LICENSE_START=======================================================
  * ONAP - SO
  * ================================================================================
- * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved. 
+ * Copyright (C) 2018 Huawei Technologies Co., Ltd. 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.
  */
 
 package org.onap.so.bpmn.common.scripts
-import org.camunda.bpm.engine.delegate.BpmnError
+
+
 import org.camunda.bpm.engine.delegate.DelegateExecution
-import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor;
-import org.onap.so.rest.APIResponse
-import org.onap.so.rest.RESTClient
-import org.onap.so.rest.RESTConfig
-import org.apache.commons.lang3.StringEscapeUtils
+import org.onap.logging.ref.slf4j.ONAPLogConstants
+import org.onap.so.client.HttpClient
+import org.onap.so.client.HttpClientFactory
+import org.onap.so.logger.MsoLogger
+import org.onap.so.utils.TargetEntity
+
+import javax.ws.rs.core.MediaType
+import javax.ws.rs.core.Response
 import java.util.regex.Matcher
 import java.util.regex.Pattern
 
 class ExternalAPIUtil {
-       
+
        String Prefix="EXTAPI_"
 
-       public MsoUtils utils = new MsoUtils()
-       
-       ExceptionUtil exceptionUtil = new ExceptionUtil()
+       private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, ExternalAPIUtil.class)
+
+       private final HttpClientFactory httpClientFactory;
+       private final MsoUtils utils;
+       private final ExceptionUtil exceptionUtil;
 
-       private AbstractServiceTaskProcessor taskProcessor
-       
        public static final String PostServiceOrderRequestsTemplate =
        "{\n" +
        "\t\"externalId\": <externalId>,\n" +
@@ -62,58 +66,59 @@ class ExternalAPIUtil {
         "\t\t\"action\": <action>,\n" +
         "\t\t\"service\": {\n" +
             "\t\t\t\"serviceState\": <serviceState>,\n" +
+                       "\t\t\t\"id\": <serviceId>,\n" +
             "\t\t\t\"name\": <serviceName>,\n" +
-            "\t\t\t\"serviceType\": <serviceType>,\n" +
             "\t\t\t\"serviceSpecification\": { \n" +
                 "\t\t\t\t\"id\": <serviceUuId> \n" +
             "\t\t\t},\n" +
             "\t\t\t\"serviceCharacteristic\": [ \n" +
             "<_requestInputs_> \n" +
             "\t\t\t]  \n" +
-        "\t\t}\n" +   
+        "\t\t}\n" +
     "\t}]\n" +
        "}"
-       
+
        public static final String RequestInputsTemplate =
        "{ \n" +
     "\t\"name\": <inputName>, \n" +
     "\t\"value\": { \n" +
         "\t\t\"serviceCharacteristicValue\": <inputValue> \n" +
-    "\t} \n" + 
+    "\t} \n" +
     "}"
 
-       public ExternalAPIUtil(AbstractServiceTaskProcessor taskProcessor) {
-               this.taskProcessor = taskProcessor
+       ExternalAPIUtil(HttpClientFactory httpClientFactory, MsoUtils utils, ExceptionUtil exceptionUtil) {
+               this.httpClientFactory = httpClientFactory
+               this.utils = utils
+               this.exceptionUtil = exceptionUtil
        }
 
 //     public String getUri(DelegateExecution execution, resourceName) {
 //
-//             def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
 //             def uri = execution.getVariable("ExternalAPIURi")
 //             if(uri) {
-//                     taskProcessor.logDebug("ExternalAPIUtil.getUri: " + uri, isDebugLogEnabled)
+//                     msoLogger.debug("ExternalAPIUtil.getUri: " + uri)
 //                     return uri
 //             }
-//             
+//
 //             exceptionUtil.buildAndThrowWorkflowException(execution, 9999, 'ExternalAPI URI not find')
 //     }
-       
-       public String setTemplate(String template, Map<String, String> valueMap) {              
-               taskProcessor.logDebug("ExternalAPIUtil setTemplate", true);
+
+       public String setTemplate(String template, Map<String, String> valueMap) {
+               msoLogger.debug("ExternalAPIUtil setTemplate", true);
                StringBuffer result = new StringBuffer();
 
                String pattern = "<.*>";
                Pattern r = Pattern.compile(pattern);
                Matcher m = r.matcher(template);
 
-               taskProcessor.logDebug("ExternalAPIUtil template:" + template, true);
+               msoLogger.debug("ExternalAPIUtil template:" + template, true);
                while (m.find()) {
                        String key = template.substring(m.start() + 1, m.end() - 1);
-                       taskProcessor.logDebug("ExternalAPIUtil key:" + key + " contains key? " + valueMap.containsKey(key), true);
+                       msoLogger.debug("ExternalAPIUtil key:" + key + " contains key? " + valueMap.containsKey(key), true);
                        m.appendReplacement(result, valueMap.getOrDefault(key, "\"TBD\""));
                }
                m.appendTail(result);
-               taskProcessor.logDebug("ExternalAPIUtil return:" + result.toString(), true);
+               msoLogger.debug("ExternalAPIUtil return:" + result.toString(), true);
                return result.toString();
        }
 
@@ -128,28 +133,25 @@ class ExternalAPIUtil {
         * @return APIResponse
         *
         */
-       public APIResponse executeExternalAPIGetCall(DelegateExecution execution, String url){
-               def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-               taskProcessor.logDebug(" ======== STARTED Execute ExternalAPI Get Process ======== ", isDebugEnabled)
-               APIResponse apiResponse = null
+       public Response executeExternalAPIGetCall(DelegateExecution execution, String url){
+               msoLogger.debug(" ======== STARTED Execute ExternalAPI Get Process ======== ")
+               Response apiResponse = null
                try{
                        String uuid = utils.getRequestID()
-                       taskProcessor.logDebug( "Generated uuid is: " + uuid, isDebugEnabled)
-                       taskProcessor.logDebug( "URL to be used is: " + url, isDebugEnabled)
-
-                       String basicAuthCred = utils.getBasicAuth(execution.getVariable("URN_externalapi_auth"),execution.getVariable("URN_mso_msoKey"))
+                       msoLogger.debug( "Generated uuid is: " + uuid)
+                       msoLogger.debug( "URL to be used is: " + url)
 
-                       RESTConfig config = new RESTConfig(url);
-                       RESTClient client = new RESTClient(config).addHeader("X-FromAppId", "MSO").addHeader("X-TransactionId", uuid).addHeader("Accept","application/json");
+                       HttpClient client = httpClientFactory.create(new URL(url), MediaType.APPLICATION_JSON, TargetEntity.EXTERNAL)
+                       client.addBasicAuthHeader(execution.getVariable("URN_externalapi_auth"), execution.getVariable("URN_mso_msoKey"))
+                       client.addAdditionalHeader("X-FromAppId", "MSO")
+                       client.addAdditionalHeader(ONAPLogConstants.Headers.REQUEST_ID, uuid)
+                       client.addAdditionalHeader("Accept", MediaType.APPLICATION_JSON)
 
-                       if (basicAuthCred != null && !"".equals(basicAuthCred)) {
-                               client.addAuthorizationHeader(basicAuthCred)
-                       }
                        apiResponse = client.get()
 
-                       taskProcessor.logDebug( "======== COMPLETED Execute ExternalAPI Get Process ======== ", isDebugEnabled)
+                       msoLogger.debug( "======== COMPLETED Execute ExternalAPI Get Process ======== ")
                }catch(Exception e){
-                       taskProcessor.logDebug("Exception occured while executing ExternalAPI Get Call. Exception is: \n" + e, isDebugEnabled)
+                       msoLogger.debug("Exception occured while executing ExternalAPI Get Call. Exception is: \n" + e)
                        exceptionUtil.buildAndThrowWorkflowException(execution, 9999, e.getMessage())
                }
                return apiResponse
@@ -164,72 +166,32 @@ class ExternalAPIUtil {
         * @param url
         * @param payload
         *
-        * @return APIResponse
+        * @return Response
         *
         */
-       public APIResponse executeExternalAPIPostCall(DelegateExecution execution, String url, String payload){
-               def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-               taskProcessor.logDebug( " ======== Started Execute ExternalAPI Post Process ======== ", isDebugEnabled)
-               APIResponse apiResponse = null
+       public Response executeExternalAPIPostCall(DelegateExecution execution, String url, String payload){
+               msoLogger.debug( " ======== Started Execute ExternalAPI Post Process ======== ")
+               Response apiResponse = null
                try{
                        String uuid = utils.getRequestID()
-                       taskProcessor.logDebug( "Generated uuid is: " + uuid, isDebugEnabled)
-                       taskProcessor.logDebug( "URL to be used is: " + url, isDebugEnabled)
+                       msoLogger.debug( "Generated uuid is: " + uuid)
+                       msoLogger.debug( "URL to be used is: " + url)
 
-                       String basicAuthCred = utils.getBasicAuth(execution.getVariable("URN_externalapi_auth"),execution.getVariable("URN_mso_msoKey"))
-                       RESTConfig config = new RESTConfig(url);
-                       RESTClient client = new RESTClient(config).addHeader("X-FromAppId", "MSO").addHeader("X-TransactionId", uuid).addHeader("Content-Type", "application/json").addHeader("Accept","application/json");
+                       HttpClient httpClient = httpClientFactory.create(new URL(url), MediaType.APPLICATION_JSON, TargetEntity.AAI)
+                       httpClient.addBasicAuthHeader(execution.getVariable("URN_externalapi_auth"), execution.getVariable("URN_mso_msoKey"))
+                       httpClient.addAdditionalHeader("X-FromAppId", "MSO")
+                       httpClient.addAdditionalHeader("X-TransactionId", uuid)
 
-                       if (basicAuthCred != null && !"".equals(basicAuthCred)) {
-                               client.addAuthorizationHeader(basicAuthCred)
-                       }
-                       apiResponse = client.httpPost(payload)
+                       apiResponse = httpClient.post(payload)
 
-                       taskProcessor.logDebug( "======== Completed Execute ExternalAPI Post Process ======== ", isDebugEnabled)
+                       msoLogger.debug( "======== Completed Execute ExternalAPI Post Process ======== ")
                }catch(Exception e){
-                       taskProcessor.utils.log("ERROR", "Exception occured while executing ExternalAPI Post Call. Exception is: \n" + e, isDebugEnabled)
+                       msoLogger.error("Exception occured while executing ExternalAPI Post Call. Exception is: \n" + e)
                        exceptionUtil.buildAndThrowWorkflowException(execution, 9999, e.getMessage())
                }
                return apiResponse
        }
 
-       /**
-        * This reusable method can be used for making ExternalAPI Post Calls. The url
-        * and payload should be passed as a parameters along with the execution.
-        * The method will return an APIResponse.
-        *
-        * @param execution
-        * @param url
-        * @param payload
-        * @param authenticationHeader - addAuthenticationHeader value
-        * @param headerName - name of header you want to add, i.e. addHeader(headerName, headerValue)
-        * @param headerValue - the header's value, i.e. addHeader(headerName, headerValue)
-        *
-        * @return APIResponse
-        *
-        */
-       public APIResponse executeExternalAPIPostCall(DelegateExecution execution, String url, String payload, String authenticationHeaderValue, String headerName, String headerValue){
-               def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-               taskProcessor.logDebug( " ======== Started Execute ExternalAPI Post Process ======== ", isDebugEnabled)
-               APIResponse apiResponse = null
-               try{
-                       taskProcessor.logDebug( "URL to be used is: " + url, isDebugEnabled)
 
-                       String basicAuthCred = utils.getBasicAuth(execution.getVariable("URN_externalapi_auth"),execution.getVariable("URN_mso_msoKey"))
-
-                       RESTConfig config = new RESTConfig(url);
-                       RESTClient client = new RESTClient(config).addAuthorizationHeader(authenticationHeaderValue).addHeader(headerName, headerValue)
-                       if (basicAuthCred != null && !"".equals(basicAuthCred)) {
-                               client.addAuthorizationHeader(basicAuthCred)
-                       }
-                       apiResponse = client.httpPost(payload)
-
-                       taskProcessor.logDebug( "======== Completed Execute ExternalAPI Post Process ======== ", isDebugEnabled)
-               }catch(Exception e){
-                       taskProcessor.utils.log("ERROR", "Exception occured while executing ExternalAPI Post Call. Exception is: \n" + e, isDebugEnabled)
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 9999, e.getMessage())
-               }
-               return apiResponse
-       }
 
 }
\ No newline at end of file