Merge "move to 4.1.3"
authorEddy Hautot <eh552t@intl.att.com>
Fri, 11 Oct 2019 16:19:05 +0000 (16:19 +0000)
committerGerrit Code Review <gerrit@onap.org>
Fri, 11 Oct 2019 16:19:05 +0000 (16:19 +0000)
34 files changed:
extra/bin-for-dev/start-backend.sh
src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java
src/main/java/org/onap/clamp/clds/filter/ClampCadiFilter.java
src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java
src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java
src/main/java/org/onap/clamp/util/HttpConnectionManager.java [deleted file]
src/main/resources/application-noaaf.properties
src/main/resources/application.properties
src/main/resources/clds/aaf/ssl/ca-certs.pem [new file with mode: 0644]
src/main/resources/clds/camel/routes/dcae-flows.xml
src/main/resources/clds/camel/routes/flexible-flow.xml [deleted file]
src/test/java/org/onap/clamp/clds/client/DcaeInventoryServicesTest.java [deleted file]
src/test/java/org/onap/clamp/clds/it/HttpConnectionManagerItCase.java [deleted file]
src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java
src/test/javascript/demo.test.js [deleted file]
src/test/javascript/package.json [deleted file]
src/test/javascript/propertyController.test.js [deleted file]
src/test/resources/application.properties
src/test/resources/clds/camel/rest/clamp-api-v2.xml [new file with mode: 0644]
src/test/resources/clds/camel/rest/clds-services.xml [new file with mode: 0644]
src/test/resources/clds/camel/routes/dcae-flows.xml [new file with mode: 0644]
src/test/resources/clds/camel/routes/flexible-flow.xml [deleted file]
src/test/resources/clds/camel/routes/loop-flows.xml [new file with mode: 0644]
src/test/resources/clds/camel/routes/policy-flows.xml [new file with mode: 0644]
src/test/resources/clds/camel/routes/utils-flows.xml [new file with mode: 0644]
ui-react/src/LoopUI.js
ui-react/src/api/LoopActionService.js
ui-react/src/components/dialogs/DeployLoop.js
ui-react/src/components/dialogs/DeployLoop.test.js
ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
ui-react/src/components/dialogs/PerformActions.js
ui-react/src/components/dialogs/PerformActions.test.js
ui-react/src/components/dialogs/RefreshStatus.js
ui-react/src/components/dialogs/RefreshStatus.test.js

index ab1551d..dc02ce4 100755 (executable)
@@ -24,4 +24,5 @@
 ###
 
 # Start Clamp backend in DEBUG mode
-java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9999 -jar ../../target/clamp.jar --spring.config.name=application-noaaf
\ No newline at end of file
+mkdir -p /var/log/onap
+java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9999 -jar ../../target/clamp.jar --spring.config.name=application-noaaf
index 0ebaab5..b24bc99 100644 (file)
@@ -30,6 +30,9 @@ import com.att.eelf.configuration.EELFManager;
 import java.io.IOException;\r
 import java.util.Date;\r
 \r
+import org.apache.camel.CamelContext;\r
+import org.apache.camel.Exchange;\r
+import org.apache.camel.builder.ExchangeBuilder;\r
 import org.json.simple.JSONArray;\r
 import org.json.simple.JSONObject;\r
 import org.json.simple.parser.JSONParser;\r
@@ -38,7 +41,6 @@ import org.onap.clamp.clds.config.ClampProperties;
 import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse;\r
 import org.onap.clamp.clds.util.JsonUtils;\r
 import org.onap.clamp.clds.util.LoggingUtils;\r
-import org.onap.clamp.util.HttpConnectionManager;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Component;\r
 \r
@@ -48,6 +50,9 @@ import org.springframework.stereotype.Component;
 @Component\r
 public class DcaeInventoryServices {\r
 \r
+    @Autowired\r
+    CamelContext camelContext;\r
+\r
     protected static final EELFLogger logger = EELFManager.getInstance().getLogger(DcaeInventoryServices.class);\r
     protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();\r
     protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();\r
@@ -55,15 +60,13 @@ public class DcaeInventoryServices {
     public static final String DCAE_INVENTORY_RETRY_INTERVAL = "dcae.intentory.retry.interval";\r
     public static final String DCAE_INVENTORY_RETRY_LIMIT = "dcae.intentory.retry.limit";\r
     private final ClampProperties refProp;\r
-    private final HttpConnectionManager httpConnectionManager;\r
 \r
     /**\r
      * Constructor.\r
      */\r
     @Autowired\r
-    public DcaeInventoryServices(ClampProperties refProp, HttpConnectionManager httpConnectionManager) {\r
+    public DcaeInventoryServices(ClampProperties refProp) {\r
         this.refProp = refProp;\r
-        this.httpConnectionManager = httpConnectionManager;\r
     }\r
 \r
     private int getTotalCountFromDcaeInventoryResponse(String responseStr) throws ParseException {\r
@@ -96,19 +99,7 @@ public class DcaeInventoryServices {
     public DcaeInventoryResponse getDcaeInformation(String artifactName, String serviceUuid, String resourceUuid)\r
             throws IOException, ParseException, InterruptedException {\r
         LoggingUtils.setTargetContext("DCAE", "getDcaeInformation");\r
-        String queryString = "?asdcResourceId=" + resourceUuid + "&asdcServiceId=" + serviceUuid + "&typeName="\r
-                + artifactName;\r
-        String fullUrl = refProp.getStringValue(DCAE_INVENTORY_URL) + "/dcae-service-types" + queryString;\r
-        logger.info("Dcae Inventory Service full url - " + fullUrl);\r
-        DcaeInventoryResponse response = queryDcaeInventory(fullUrl);\r
-        LoggingUtils.setResponseContext("0", "Get Dcae Information success", this.getClass().getName());\r
-        Date startTime = new Date();\r
-        LoggingUtils.setTimeContext(startTime, new Date());\r
-        return response;\r
-    }\r
 \r
-    private DcaeInventoryResponse queryDcaeInventory(String fullUrl)\r
-            throws IOException, InterruptedException, ParseException {\r
         int retryInterval = 0;\r
         int retryLimit = 1;\r
         if (refProp.getStringValue(DCAE_INVENTORY_RETRY_LIMIT) != null) {\r
@@ -118,18 +109,31 @@ public class DcaeInventoryServices {
             retryInterval = Integer.valueOf(refProp.getStringValue(DCAE_INVENTORY_RETRY_INTERVAL));\r
         }\r
         for (int i = 0; i < retryLimit; i++) {\r
+            Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext)\r
+                    .withProperty("blueprintResourceId", resourceUuid).withProperty("blueprintServiceId", serviceUuid)\r
+                    .withProperty("blueprintName", artifactName).build();\r
             metricsLogger.info("Attempt n°" + i + " to contact DCAE inventory");\r
-            String response = httpConnectionManager.doHttpRequest(fullUrl, "GET", null, null, "DCAE", null, null);\r
-            int totalCount = getTotalCountFromDcaeInventoryResponse(response);\r
-            metricsLogger.info("getDcaeInformation complete: totalCount returned=" + totalCount);\r
-            if (totalCount > 0) {\r
-                logger.info("getDcaeInformation, answer from DCAE inventory:" + response);\r
-                return getItemsFromDcaeInventoryResponse(response);\r
+\r
+            Exchange exchangeResponse = camelContext.createProducerTemplate()\r
+                    .send("direct:get-dcae-blueprint-inventory", myCamelExchange);\r
+\r
+            if (Integer.valueOf(200).equals(exchangeResponse.getIn().getHeader("CamelHttpResponseCode"))) {\r
+                String dcaeResponse = (String) exchangeResponse.getIn().getBody();\r
+                int totalCount = getTotalCountFromDcaeInventoryResponse(dcaeResponse);\r
+                metricsLogger.info("getDcaeInformation complete: totalCount returned=" + totalCount);\r
+                if (totalCount > 0) {\r
+                    logger.info("getDcaeInformation, answer from DCAE inventory:" + dcaeResponse);\r
+                    LoggingUtils.setResponseContext("0", "Get Dcae Information success", this.getClass().getName());\r
+                    Date startTime = new Date();\r
+                    LoggingUtils.setTimeContext(startTime, new Date());\r
+                    return getItemsFromDcaeInventoryResponse(dcaeResponse);\r
+                } else {\r
+                    logger.info("Dcae inventory totalCount returned is 0, so waiting " + retryInterval\r
+                            + "ms before retrying ...");\r
+                    // wait for a while and try to connect to DCAE again\r
+                    Thread.sleep(retryInterval);\r
+                }\r
             }\r
-            logger.info(\r
-                    "Dcae inventory totalCount returned is 0, so waiting " + retryInterval + "ms before retrying ...");\r
-            // wait for a while and try to connect to DCAE again\r
-            Thread.sleep(retryInterval);\r
         }\r
         logger.warn("Dcae inventory totalCount returned is still 0, after " + retryLimit + " attempts, returning NULL");\r
         return null;\r
index 7e104c7..cd141ae 100644 (file)
@@ -144,16 +144,22 @@ public class ClampCadiFilter extends CadiFilter {
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
             throws IOException, ServletException {
         try {
-            String certHeader = URLDecoder.decode(((HttpServletRequest) request).getHeader("X-SSL-Cert"),
-                    StandardCharsets.UTF_8.toString());
+            String certHeader = ((HttpServletRequest) request).getHeader("X-SSL-Cert");
             if (certHeader != null) {
-
                 CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
                 X509Certificate cert = (X509Certificate) certificateFactory
-                        .generateCertificate(new ByteArrayInputStream(certHeader.getBytes()));
-                request.setAttribute("javax.servlet.request.X509Certificate", cert);
-
+                        .generateCertificate(new ByteArrayInputStream(
+                                URLDecoder.decode(certHeader, StandardCharsets.UTF_8.toString()).getBytes()));
+                X509Certificate[] certifArray = ((X509Certificate[]) request
+                        .getAttribute("javax.servlet.request.X509Certificate"));
+                if (certifArray == null) {
+                    certifArray = new X509Certificate[] { cert };
+                    request.setAttribute("javax.servlet.request.X509Certificate", certifArray);
+                } else {
+                    certifArray[0] = cert;
+                }
             }
+
         } catch (CertificateException e) {
             logger.error("Unable to inject the X.509 certificate", e);
         }
index f5c21c1..43dd5f4 100644 (file)
@@ -61,10 +61,12 @@ public class ToscaYamlToJsonConvertor {
     /**
      * Parses Tosca YAML string.
      *
-     * @param yamlString YAML string
+     * @param yamlString     YAML string
+     * @param modelTypeToUse The model type that must be used to obtain the Json
+     *                       Schema
      * @return JSON string
      */
-    public String parseToscaYaml(String yamlString) {
+    public String parseToscaYaml(String yamlString, String modelTypeToUse) {
 
         Yaml yaml = new Yaml();
         LinkedHashMap<String, Object> loadedYaml = yaml.load(yamlString);
@@ -76,7 +78,7 @@ public class ToscaYamlToJsonConvertor {
         JSONObject jsonParentObject = new JSONObject();
         JSONObject jsonTempObject = new JSONObject();
         parseNodeAndDataType(loadedYaml, nodeTypes, dataNodes);
-        populateJsonEditorObject(loadedYaml, nodeTypes, dataNodes, jsonParentObject, jsonTempObject);
+        populateJsonEditorObject(loadedYaml, nodeTypes, dataNodes, jsonParentObject, jsonTempObject, modelTypeToUse);
         if (jsonTempObject.length() > 0) {
             jsonParentObject = jsonTempObject;
         }
@@ -99,75 +101,68 @@ public class ToscaYamlToJsonConvertor {
             } else if (n.getKey().contains(ToscaSchemaConstants.POLICY_DATA)) {
                 dataNodes.put(n.getKey(), n.getValue());
             }
-
         });
     }
 
     @SuppressWarnings("unchecked")
     private void populateJsonEditorObject(LinkedHashMap<String, Object> map, LinkedHashMap<String, Object> nodeTypes,
-            LinkedHashMap<String, Object> dataNodes, JSONObject jsonParentObject, JSONObject jsonTempObject) {
+            LinkedHashMap<String, Object> dataNodes, JSONObject jsonParentObject, JSONObject jsonTempObject,
+            String modelTypeToUse) {
 
-        Map<String, JSONObject> jsonEntrySchema = new HashMap();
+        Map<String, JSONObject> jsonEntrySchema = new HashMap<>();
         jsonParentObject.put(JsonEditorSchemaConstants.TYPE, JsonEditorSchemaConstants.TYPE_OBJECT);
-        nodeTypes.entrySet().stream().forEach(nt -> {
-            if (nt.getValue() instanceof Map) {
-                ((LinkedHashMap<String, Object>) nt.getValue()).entrySet().forEach(ntElement -> {
-                    if (ntElement.getKey().equalsIgnoreCase(ToscaSchemaConstants.PROPERTIES)) {
-                        JSONArray rootNodeArray = new JSONArray();
-                        if (ntElement.getValue() instanceof Map) {
-                            ((LinkedHashMap<String, Object>) ntElement.getValue()).entrySet()
-                                    .forEach((ntPropertiesElement) -> {
-                                        boolean isListNode = false;
+        if (nodeTypes.get(modelTypeToUse) instanceof Map) {
+            ((LinkedHashMap<String, Object>) nodeTypes.get(modelTypeToUse)).entrySet().forEach(ntElement -> {
+                if (ntElement.getKey().equalsIgnoreCase(ToscaSchemaConstants.PROPERTIES)) {
+                    JSONArray rootNodeArray = new JSONArray();
+                    if (ntElement.getValue() instanceof Map) {
+                        ((LinkedHashMap<String, Object>) ntElement.getValue()).entrySet()
+                                .forEach((ntPropertiesElement) -> {
+                                    boolean isListNode = false;
+                                    parseDescription((LinkedHashMap<String, Object>) ntPropertiesElement.getValue(),
+                                            jsonParentObject);
+                                    LinkedHashMap<String, Object> parentPropertiesMap = (LinkedHashMap<String, Object>) ntPropertiesElement
+                                            .getValue();
+                                    if (parentPropertiesMap.containsKey(ToscaSchemaConstants.TYPE)
+                                            && ((String) parentPropertiesMap.get(ToscaSchemaConstants.TYPE))
+                                                    .contains(ToscaSchemaConstants.TYPE_MAP)
+                                            && parentPropertiesMap.containsKey(ToscaSchemaConstants.ENTRY_SCHEMA)) {
+                                        parentPropertiesMap = (LinkedHashMap<String, Object>) parentPropertiesMap
+                                                .get(ToscaSchemaConstants.ENTRY_SCHEMA);
+                                        isListNode = true;
+                                    }
+                                    if (parentPropertiesMap.containsKey(ToscaSchemaConstants.TYPE)
+                                            && ((String) parentPropertiesMap.get(ToscaSchemaConstants.TYPE))
+                                                    .contains(ToscaSchemaConstants.POLICY_DATA)) {
+                                        ((LinkedHashMap<String, Object>) dataNodes
+                                                .get(parentPropertiesMap.get(ToscaSchemaConstants.TYPE))).entrySet()
+                                                        .stream().forEach(pmap -> {
+                                                            if (pmap.getKey().equalsIgnoreCase(
+                                                                    ToscaSchemaConstants.PROPERTIES)) {
+                                                                parseToscaProperties(ToscaSchemaConstants.POLICY_NODE,
+                                                                        (LinkedHashMap<String, Object>) pmap.getValue(),
+                                                                        jsonParentObject, rootNodeArray,
+                                                                        jsonEntrySchema, dataNodes,
+                                                                        incrementSimpleTypeOrder());
+                                                            }
+                                                        });
+                                    }
+                                    if (isListNode) {
+                                        jsonTempObject.put(JsonEditorSchemaConstants.TYPE,
+                                                JsonEditorSchemaConstants.TYPE_ARRAY);
                                         parseDescription((LinkedHashMap<String, Object>) ntPropertiesElement.getValue(),
-                                                jsonParentObject);
-                                        LinkedHashMap<String, Object> parentPropertiesMap = (LinkedHashMap<String, Object>) ntPropertiesElement
-                                                .getValue();
-                                        if (parentPropertiesMap.containsKey(ToscaSchemaConstants.TYPE)
-                                                && ((String) parentPropertiesMap.get(ToscaSchemaConstants.TYPE))
-                                                        .contains(ToscaSchemaConstants.TYPE_MAP)
-                                                && parentPropertiesMap.containsKey(ToscaSchemaConstants.ENTRY_SCHEMA)) {
-                                            parentPropertiesMap = (LinkedHashMap<String, Object>) parentPropertiesMap
-                                                    .get(ToscaSchemaConstants.ENTRY_SCHEMA);
-                                            isListNode = true;
-                                        }
-                                        if (parentPropertiesMap.containsKey(ToscaSchemaConstants.TYPE)
-                                                && ((String) parentPropertiesMap.get(ToscaSchemaConstants.TYPE))
-                                                        .contains(ToscaSchemaConstants.POLICY_DATA)) {
-                                            ((LinkedHashMap<String, Object>) dataNodes
-                                                    .get(parentPropertiesMap.get(ToscaSchemaConstants.TYPE))).entrySet()
-                                                            .stream().forEach(pmap -> {
-                                                                if (pmap.getKey().equalsIgnoreCase(
-                                                                        ToscaSchemaConstants.PROPERTIES)) {
-                                                                    parseToscaProperties(
-                                                                            ToscaSchemaConstants.POLICY_NODE,
-                                                                            (LinkedHashMap<String, Object>) pmap
-                                                                                    .getValue(),
-                                                                            jsonParentObject, rootNodeArray,
-                                                                            jsonEntrySchema, dataNodes,
-                                                                            incrementSimpleTypeOrder());
-                                                                }
-
-                                                            });
-
-                                        }
-                                        if (isListNode) {
-                                            jsonTempObject.put(JsonEditorSchemaConstants.TYPE,
-                                                    JsonEditorSchemaConstants.TYPE_ARRAY);
-                                            parseDescription(
-                                                    (LinkedHashMap<String, Object>) ntPropertiesElement.getValue(),
-                                                    jsonTempObject);
-                                            jsonTempObject.put(JsonEditorSchemaConstants.ITEMS, jsonParentObject);
-                                            jsonTempObject.put(JsonEditorSchemaConstants.FORMAT,
-                                                    JsonEditorSchemaConstants.CUSTOM_KEY_FORMAT_TABS_TOP);
-                                            jsonTempObject.put(JsonEditorSchemaConstants.UNIQUE_ITEMS,
-                                                    JsonEditorSchemaConstants.TRUE);
-                                        }
-                                    });
-                        }
+                                                jsonTempObject);
+                                        jsonTempObject.put(JsonEditorSchemaConstants.ITEMS, jsonParentObject);
+                                        jsonTempObject.put(JsonEditorSchemaConstants.FORMAT,
+                                                JsonEditorSchemaConstants.CUSTOM_KEY_FORMAT_TABS_TOP);
+                                        jsonTempObject.put(JsonEditorSchemaConstants.UNIQUE_ITEMS,
+                                                JsonEditorSchemaConstants.TRUE);
+                                    }
+                                });
                     }
-                });
-            }
-        });
+                }
+            });
+        }
     }
 
     @SuppressWarnings("unchecked")
index b1cea34..2943c39 100644 (file)
@@ -117,7 +117,7 @@ public class MicroServicePolicy implements Serializable, Policy {
         this.policyTosca = policyTosca;
         this.shared = shared;
         this.jsonRepresentation = JsonUtils.GSON_JPA_MODEL
-                .fromJson(new ToscaYamlToJsonConvertor().parseToscaYaml(policyTosca), JsonObject.class);
+                .fromJson(new ToscaYamlToJsonConvertor().parseToscaYaml(policyTosca, modelType), JsonObject.class);
         this.usedByLoops = usedByLoops;
     }
 
diff --git a/src/main/java/org/onap/clamp/util/HttpConnectionManager.java b/src/main/java/org/onap/clamp/util/HttpConnectionManager.java
deleted file mode 100644 (file)
index 6459fa9..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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============================================
- * Modifications copyright (c) 2018 Nokia
- * ===================================================================
- *
- */
-
-package org.onap.clamp.util;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-
-import java.io.BufferedReader;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import java.util.Base64;
-
-import javax.net.ssl.HttpsURLConnection;
-import javax.ws.rs.BadRequestException;
-
-import org.apache.commons.io.IOUtils;
-import org.onap.clamp.clds.util.LoggingUtils;
-import org.springframework.stereotype.Component;
-
-/**
- * This class manages the HTTP and HTTPS connections.
- */
-@Component
-public class HttpConnectionManager {
-    protected static final EELFLogger logger = EELFManager.getInstance().getLogger(HttpConnectionManager.class);
-    protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
-    private static final String REQUEST_FAILED_LOG = "Request Failed - response payload=";
-
-    private String doHttpsQuery(URL url, String requestMethod, String payload, String contentType, String target,
-        String userName, String password) throws IOException {
-        LoggingUtils utils = new LoggingUtils(logger);
-        logger.info("Using HTTPS URL:" + url.toString());
-        HttpsURLConnection secureConnection = (HttpsURLConnection) url.openConnection();
-        secureConnection = utils.invokeHttps(secureConnection, target, requestMethod);
-        secureConnection.setRequestMethod(requestMethod);
-        if (userName != null && password != null) {
-            secureConnection.setRequestProperty("Authorization", "Basic "
-                + Base64.getEncoder().encodeToString((userName + ":" + password).getBytes(StandardCharsets.UTF_8)));
-        }
-        if (payload != null && contentType != null) {
-            secureConnection.setRequestProperty("Content-Type", contentType);
-            secureConnection.setDoOutput(true);
-            try (DataOutputStream wr = new DataOutputStream(secureConnection.getOutputStream())) {
-                wr.writeBytes(payload);
-                wr.flush();
-            }
-        }
-        int responseCode = secureConnection.getResponseCode();
-        logger.info("Response Code: " + responseCode);
-        if (responseCode < 400) {
-            try (BufferedReader reader = new BufferedReader(new InputStreamReader(secureConnection.getInputStream()))) {
-                String responseStr = IOUtils.toString(reader);
-                logger.info("Response Content: " + responseStr);
-                return responseStr;
-            }
-        } else {
-            // In case of connection failure just check whether there is a
-            // content or not
-            try (BufferedReader reader = new BufferedReader(new InputStreamReader(secureConnection.getErrorStream()))) {
-                String responseStr = IOUtils.toString(reader);
-                logger.error(REQUEST_FAILED_LOG + responseStr);
-                throw new BadRequestException(responseStr);
-            }
-        }
-    }
-
-    private String doHttpQuery(URL url, String requestMethod, String payload, String contentType, String target,
-        String userName, String password) throws IOException {
-        LoggingUtils utils = new LoggingUtils(logger);
-        logger.info("Using HTTP URL:" + url);
-        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
-        connection = utils.invoke(connection, target, requestMethod);
-        connection.setRequestMethod(requestMethod);
-        if (userName != null && password != null) {
-            connection.setRequestProperty("Authorization", "Basic "
-                + Base64.getEncoder().encodeToString((userName + ":" + password).getBytes(StandardCharsets.UTF_8)));
-        }
-        if (payload != null && contentType != null) {
-            connection.setRequestProperty("Content-Type", contentType);
-            connection.setDoOutput(true);
-            try (DataOutputStream wr = new DataOutputStream(connection.getOutputStream())) {
-                wr.writeBytes(payload);
-                wr.flush();
-            }
-        }
-        int responseCode = connection.getResponseCode();
-        logger.info("Response Code: " + responseCode);
-        if (responseCode < 400) {
-            try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
-                String responseStr = IOUtils.toString(reader);
-                logger.info("Response Content: " + responseStr);
-                utils.invokeReturn();
-                return responseStr;
-            }
-        } else {
-            // In case of connection failure just check whether there is a
-            // content or not
-            try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream()))) {
-                String responseStr = IOUtils.toString(reader);
-                logger.error(REQUEST_FAILED_LOG + responseStr);
-                utils.invokeReturn();
-                throw new BadRequestException(responseStr);
-            }
-        }
-    }
-
-    /**
-     * This method does a HTTP/HTTPS query with parameters specified.
-     *
-     * @param url
-     *        The string HTTP or HTTPS that mustr be used to connect
-     * @param requestMethod
-     *        The Request Method (PUT, POST, GET, DELETE, etc ...)
-     * @param payload
-     *        The payload if any, in that case an ouputstream is opened
-     * @param contentType
-     *        The "application/json or application/xml, or whatever"
-     * @return The payload of the answer
-     * @throws IOException
-     *         In case of issue with the streams
-     */
-    public String doHttpRequest(String url, String requestMethod, String payload, String contentType, String target,
-        String userName, String password) throws IOException {
-        URL urlObj = new URL(url);
-        if (url.contains("https://")) { // Support for HTTPS
-            return doHttpsQuery(urlObj, requestMethod, payload, contentType, target, userName, password);
-        } else { // Support for HTTP
-            return doHttpQuery(urlObj, requestMethod, payload, contentType, target, userName, password);
-        }
-    }
-}
index 580ec3f..79466c8 100644 (file)
@@ -208,15 +208,10 @@ clamp.config.action.insert.test.event=false
 clamp.config.clds.service.cache.invalidate.after.seconds=120
 
 #DCAE Inventory Url Properties
-clamp.config.dcae.inventory.url=http://localhost:8085
+clamp.config.dcae.inventory.url=http4://localhost:8085
 clamp.config.dcae.intentory.retry.interval=10000
 clamp.config.dcae.intentory.retry.limit=5
 
-#DCAE Dispatcher Url Properties
-clamp.config.dcae.dispatcher.url=http://localhost:8085
-clamp.config.dcae.dispatcher.retry.interval=20000
-clamp.config.dcae.dispatcher.retry.limit=30
-
 #DCAE Deployment Url Properties
 clamp.config.dcae.deployment.url=http4://localhost:8085
 clamp.config.dcae.deployment.userName=test
index dcad32e..64121c9 100644 (file)
@@ -219,15 +219,10 @@ clamp.config.action.insert.test.event=false
 clamp.config.clds.service.cache.invalidate.after.seconds=120
 
 #DCAE Inventory Url Properties
-clamp.config.dcae.inventory.url=http://dcae.api.simpledemo.onap.org:8080
+clamp.config.dcae.inventory.url=http4://dcae.api.simpledemo.onap.org:8080
 clamp.config.dcae.intentory.retry.interval=10000
 clamp.config.dcae.intentory.retry.limit=5
 
-#DCAE Dispatcher Url Properties
-clamp.config.dcae.dispatcher.url=http://dcae.api.simpledemo.onap.org:8188
-clamp.config.dcae.dispatcher.retry.interval=20000
-clamp.config.dcae.dispatcher.retry.limit=30
-
 #DCAE Deployment Url Properties
 clamp.config.dcae.deployment.url=http4://dcae.api.simpledemo.onap.org:8188
 clamp.config.dcae.deployment.userName=test
@@ -249,7 +244,7 @@ clamp.config.cadi.keyFile=classpath:/clds/aaf/org.onap.clamp.keyfile
 clamp.config.cadi.cadiLoglevel=DEBUG
 clamp.config.cadi.cadiLatitude=10
 clamp.config.cadi.cadiLongitude=10
-clamp.config.cadi.aafLocateUrl=https://aaf.api.simpledemo.onap.org:8095
+clamp.config.cadi.aafLocateUrl=https://10.0.0.106:31111
 clamp.config.cadi.cadiKeystorePassword=enc:V_kq_EwDNb4itWp_lYfDGXIWJzemHGkhkZOxAQI9IHs
 clamp.config.cadi.cadiTruststorePassword=enc:Mj0YQqNCUKbKq2lPp1kTFQWeqLxaBXKNwd5F1yB1ukf
 #clamp.config.cadi.oauthTokenUrl=https://AAF_LOCATE_URL/AAF_NS.token:2.0/token
diff --git a/src/main/resources/clds/aaf/ssl/ca-certs.pem b/src/main/resources/clds/aaf/ssl/ca-certs.pem
new file mode 100644 (file)
index 0000000..70bb844
--- /dev/null
@@ -0,0 +1,32 @@
+Bag Attributes
+    friendlyName: CN=intermediateCA_9,OU=OSAAF,O=ONAP,C=US
+subject=C = US, O = ONAP, OU = OSAAF, CN = intermediateCA_9
+
+issuer=OU = OSAAF, O = ONAP, C = US
+
+-----BEGIN CERTIFICATE-----
+MIIEdTCCAl2gAwIBAgIBBzANBgkqhkiG9w0BAQsFADAsMQ4wDAYDVQQLDAVPU0FB
+RjENMAsGA1UECgwET05BUDELMAkGA1UEBhMCVVMwHhcNMTgwODE3MTg1MTM3WhcN
+MjMwODE3MTg1MTM3WjBHMQswCQYDVQQGEwJVUzENMAsGA1UECgwET05BUDEOMAwG
+A1UECwwFT1NBQUYxGTAXBgNVBAMMEGludGVybWVkaWF0ZUNBXzkwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCv0HHUkba3uNtNI3jPKimUcd6RNwmhSCJL
+neMWpnjqp5/A+HCKyNsEaT4y177hNLmCm/aMm1u2JIfikc+8wEqLCSBBPz+P0h+d
+o+sZ7U+4oeQizdYYpEdzHJ2SieHHa8vtu80rU3nO2NEIkuYC20HcKSEtl8fFKsk3
+nqlhY+tGfYJPTXcDOQAO40BTcgat3C3uIJHkWJJ4RivunE4LEuRv9QyKgAw7rkJV
+v+f7guqpZlXy6dzAkuU7XULWcgo55MkZlssoiErMvEZJad5aWKvRY3g7qUjaQ6wO
+15wOAUoRBW96eeZZbytgn8kybcBy++Ue49gPtgm1MF/KlAsp0MD5AgMBAAGjgYYw
+gYMwHQYDVR0OBBYEFIH3mVsQuciM3vNSXupOaaBDPqzdMB8GA1UdIwQYMBaAFFNV
+M/JL69BRscF4msEoMXvv6u1JMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/
+BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0B
+AQsFAAOCAgEADxNymiCNr2e37iLReoaxKmZvwox0cTiNAaj7iafRzmwIoY3VXO8Q
+ix5IYcp4FaQ7fV1jyp/AmaSnyHf6Osl0sx8PxsQkO7ALttxKUrjfbvNSVUA2C/vl
+u5m7UVJLIUtFDZBWanzUSmkTsYLHpiANFQKd2c/cU1qXcyzgJVFEFVyyHNkF7Is+
++pjG9M1hwQHOoTnEuU013P7X1mHek+RXEfhJWwe7UsZnBKZaZKbQZu7hEtqKWYp/
+QsHgnjoLYXsh0WD5rz/mBxdTdDLGpFqWDzDqb8rsYnqBzoowvsasV8X8OSkov0Ht
+8Yka0ckFH9yf8j1Cwmbl6ttuonOhky3N/gwLEozuhy7TPcZGVyzevF70kXy7g1CX
+kpFGJyEHXoprlNi8FR4I+NFzbDe6a2cFow1JN19AJ9Z5Rk5m7M0mQPaQ4RcikjB3
+aoLsASCJTm1OpOFHfxEKiBW4Lsp3Uc5/Rb9ZNbfLrwqWZRM7buW1e3ekLqntgbky
+uKKISHqVJuw/vXHl1jNibEo9+JuQ88VNuAcm7WpGUogeCa2iAlPTckPZei+MwZ8w
+tpvxTyYlZEC8DWzY1VC29+W2N5cvh01e2E3Ql08W1zL63dqrgdEZ3VWjzooYi4ep
+BmMXTvouW+Flyvcw/0oTcfN0biDIt0mCkZ5CQVjfGL9DTOYteR5hw+k=
+-----END CERTIFICATE-----
index 4693581..fb3bc90 100644 (file)
                                <to uri="direct:dump-loop-log-http-response" />
                        </doFinally>
                </doTry>
+       </route>
+       <route id="get-dcae-blueprint-inventory">
+               <from uri="direct:get-dcae-blueprint-inventory" />
+               <log loggingLevel="INFO"
+                       message="Getting DCAE blueprint id in inventory" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Getting blueprint id in inventory')" />
+               <doTry>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>GET</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to query Dcae inventory Loop status: {{clamp.config.dcae.inventory.url}}/dcae-service-types?${header[CamelHttpQuery]}"></log>
+                       <toD
+                               uri="{{clamp.config.dcae.inventory.url}}/dcae-service-types?asdcResourceId=${exchangeProperty[blueprintResourceId]}&amp;asdcServiceId=${exchangeProperty[blueprintServiceId]}&amp;typeName=${exchangeProperty[blueprintName]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=30000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <convertBodyTo type="java.lang.String" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                       </doFinally>
+               </doTry>
 
        </route>
 </routes>
\ No newline at end of file
diff --git a/src/main/resources/clds/camel/routes/flexible-flow.xml b/src/main/resources/clds/camel/routes/flexible-flow.xml
deleted file mode 100644 (file)
index bc79fc2..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<routes xmlns="http://camel.apache.org/schema/spring">
-       <route id="submit">
-               <from uri="direct:processSubmit" />
-               <choice>
-                       <when>
-                               <simple> ${exchangeProperty.actionCd} == 'SUBMIT' ||
-                                       ${exchangeProperty.actionCd} == 'RESUBMIT'
-                               </simple>
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-                               <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" />
-                               <to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" />
-                               <delay>
-                                       <constant>30000</constant>
-                               </delay>
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
-                               <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-                       </when>
-                       <when>
-                               <simple> ${exchangeProperty.actionCd} == 'DELETE'</simple>
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-                               <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDeleteDelegate" />
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.HolmesPolicyDeleteDelegate" />
-                               <delay>
-                                       <constant>30000</constant>
-                               </delay>
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" />
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" />
-                               <to uri="bean:org.onap.clamp.clds.client.ModelDeleteDelegate" />
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-                       </when>
-                       <when>
-                               <simple> ${exchangeProperty.actionCd} == 'UPDATE'</simple>
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-                               <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" />
-                               <to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" />
-                               <delay>
-                                       <constant>30000</constant>
-                               </delay>
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
-                               <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-                       </when>
-                       <when>
-                               <simple> ${exchangeProperty.actionCd} == 'STOP'</simple>
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" />
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" />
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-                       </when>
-                       <when>
-                               <simple> ${exchangeProperty.actionCd} == 'RESTART'</simple>
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-                               <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
-                               <to
-                                       uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-                       </when>
-               </choice>
-       </route>
-</routes>
\ No newline at end of file
diff --git a/src/test/java/org/onap/clamp/clds/client/DcaeInventoryServicesTest.java b/src/test/java/org/onap/clamp/clds/client/DcaeInventoryServicesTest.java
deleted file mode 100644 (file)
index a66694c..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 Huawei Technologies Co., Ltd.
- * ================================================================================
- * 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=========================================================
- * ================================================================================
- *
- */
-
-package org.onap.clamp.clds.client;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsNull.nullValue;
-import static org.onap.clamp.clds.client.DcaeInventoryServices.DCAE_INVENTORY_RETRY_INTERVAL;
-import static org.onap.clamp.clds.client.DcaeInventoryServices.DCAE_INVENTORY_RETRY_LIMIT;
-import static org.onap.clamp.clds.client.DcaeInventoryServices.DCAE_INVENTORY_URL;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-import java.io.IOException;
-
-import org.json.simple.parser.ParseException;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.onap.clamp.clds.config.ClampProperties;
-import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse;
-import org.onap.clamp.clds.model.dcae.DcaeLinks;
-import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse;
-import org.onap.clamp.util.HttpConnectionManager;
-
-
-@RunWith(MockitoJUnitRunner.class)
-public class DcaeInventoryServicesTest {
-
-    @Mock
-    private HttpConnectionManager httpConnectionManager;
-
-    @Mock
-    private ClampProperties properties;
-
-    private static final String resourceUuid = "023a3f0d-1161-45ff-b4cf-8918a8ccf3ad";
-    private static final String serviceUuid = "4cc5b45a-1f63-4194-8100-cd8e14248c92";
-    private static final String artifactName = "tca_2.yaml";
-    private static final String queryString = "?asdcResourceId=" + resourceUuid + "&asdcServiceId=" + serviceUuid
-            + "&typeName=" + artifactName;
-    private static final String url = "http://localhost:8085" + "/dcae-service-types" + queryString;
-
-    @Test
-    public void testDcaeInventoryResponse() throws ParseException, InterruptedException, IOException {
-        when(properties.getStringValue(DCAE_INVENTORY_URL)).thenReturn("http://localhost:8085");
-        when(properties.getStringValue(DCAE_INVENTORY_RETRY_LIMIT)).thenReturn("1");
-        when(properties.getStringValue(DCAE_INVENTORY_RETRY_INTERVAL)).thenReturn("100");
-        String responseStr = "{\"totalCount\":1, "
-                + "\"items\":[{\"typeId\":\"typeId-32147723-d323-48f9-a325-bcea8d728025\","
-                + " \"typeName\":\"typeName-32147723-d323-48f9-a325-bcea8d728025\"}]}";
-        when(httpConnectionManager.doHttpRequest(url, "GET", null, null,
-                                                 "DCAE", null, null))
-                .thenReturn(responseStr);
-
-        DcaeInventoryServices services = new DcaeInventoryServices(properties,
-                                                                   httpConnectionManager);
-        DcaeInventoryResponse response = services.getDcaeInformation(artifactName, serviceUuid, resourceUuid);
-        assertThat(response.getTypeId(),is("typeId-32147723-d323-48f9-a325-bcea8d728025"));
-        assertThat(response.getTypeName(),is("typeName-32147723-d323-48f9-a325-bcea8d728025"));
-    }
-
-    @Test
-    public void testDcaeInventoryResponseWithZeroCount() throws ParseException, InterruptedException, IOException {
-        when(properties.getStringValue(DCAE_INVENTORY_URL)).thenReturn("http://localhost:8085");
-        when(properties.getStringValue(DCAE_INVENTORY_RETRY_LIMIT)).thenReturn("1");
-        when(properties.getStringValue(DCAE_INVENTORY_RETRY_INTERVAL)).thenReturn("100");
-        when(httpConnectionManager.doHttpRequest(url, "GET", null, null,
-                                                 "DCAE", null, null))
-                .thenReturn("{\"totalCount\":0}\"}]}");
-        DcaeInventoryServices services = new DcaeInventoryServices(properties,
-                                                                   httpConnectionManager);
-        DcaeInventoryResponse response = services.getDcaeInformation(artifactName, serviceUuid, resourceUuid);
-        assertThat(response, nullValue());
-    }
-
-    @Test
-    public void testDcaeInventoryResponsePojo() {
-        DcaeInventoryResponse response = new DcaeInventoryResponse();
-        response.setTypeId("typeId-32147723-d323-48f9-a325-bcea8d728025");
-        response.setTypeName("typeName-32147723-d323-48f9-a325-bcea8d728025");
-        assertThat(response.getTypeId(),is("typeId-32147723-d323-48f9-a325-bcea8d728025"));
-        assertThat(response.getTypeName(),is("typeName-32147723-d323-48f9-a325-bcea8d728025"));
-    }
-
-    @Test
-    public void testDcaeOperationStatusResponsePojo() {
-        DcaeLinks links = new DcaeLinks();
-        links.setSelf("selfUrl");
-        links.setStatus("state");
-        links.setUninstall("uninstallUrl");
-        DcaeOperationStatusResponse response = new DcaeOperationStatusResponse();
-        response.setRequestId("testId");
-        response.setError("errorMessage");
-        response.setLinks(links);
-        response.setOperationType("install");
-        response.setStatus("state");
-        assertThat(response.getRequestId(),is("testId"));
-        assertThat(response.getError(),is("errorMessage"));
-        assertThat(response.getOperationType(),is("install"));
-        assertThat(response.getStatus(),is("state"));
-        assertThat(response.getLinks().getSelf(),is("selfUrl"));
-        assertThat(response.getLinks().getStatus(),is("state"));
-        assertThat(response.getLinks().getUninstall(),is("uninstallUrl"));
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/org/onap/clamp/clds/it/HttpConnectionManagerItCase.java b/src/test/java/org/onap/clamp/clds/it/HttpConnectionManagerItCase.java
deleted file mode 100644 (file)
index beb0750..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2017-2018 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============================================
- * Modifications copyright (c) 2018 Nokia
- * ===================================================================
- * 
- */
-
-package org.onap.clamp.clds.it;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.IOException;
-import java.security.KeyManagementException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import javax.ws.rs.BadRequestException;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.onap.clamp.util.HttpConnectionManager;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
-import org.springframework.test.context.TestPropertySource;
-import org.springframework.test.context.junit4.SpringRunner;
-
-/**
- * Test HTTP and HTTPS settings + redirection of HTTP to HTTPS.
- */
-@RunWith(SpringRunner.class)
-@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT)
-@TestPropertySource(locations = "classpath:https/https-test.properties")
-public class HttpConnectionManagerItCase {
-
-    @Value("${server.port}")
-    private String httpsPort;
-    @Value("${server.http-to-https-redirection.port}")
-    private String httpPort;
-
-    @Autowired
-    HttpConnectionManager httpConnectionManager;
-
-    private static TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
-
-        @Override
-        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
-            return null;
-        }
-
-        @Override
-        public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
-        }
-
-        @Override
-        public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
-        }
-    } };
-
-    private void enableSslNoCheck() throws NoSuchAlgorithmException, KeyManagementException {
-        SSLContext sc = SSLContext.getInstance("SSL");
-        sc.init(null, trustAllCerts, new java.security.SecureRandom());
-        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
-        HostnameVerifier allHostsValid = new HostnameVerifier() {
-
-            @Override
-            public boolean verify(String hostname, SSLSession session) {
-                return true;
-            }
-        };
-        // set the allTrusting verifier
-        HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
-    }
-
-    @Before
-    public void setupEnvBeforeTest() throws KeyManagementException, NoSuchAlgorithmException {
-        enableSslNoCheck();
-    }
-
-    @Test
-    public void testHttpGet() throws Exception {
-        String response = httpConnectionManager.doHttpRequest("http://localhost:" + this.httpPort + "/swagger.html",
-                "GET", null, null, "DCAE", null, null);
-        assertNotNull(response);
-        // Should be a redirection so 302, so empty
-        assertTrue(response.isEmpty());
-    }
-
-    @Test
-    public void testHttpsGet() throws Exception {
-        String response = httpConnectionManager.doHttpRequest("https://localhost:" + this.httpsPort + "/swagger.html",
-                "GET", null, null, "DCAE", null, null);
-        assertNotNull(response);
-        // Should contain something
-        assertTrue(!response.isEmpty());
-    }
-
-    @Test(expected = BadRequestException.class)
-    public void testHttpsGet404() throws IOException {
-        httpConnectionManager.doHttpRequest("https://localhost:" + this.httpsPort + "/swaggerx.html", "GET", null, null,
-                "DCAE", null, null);
-        fail("Should have raised an BadRequestException");
-    }
-
-    @Test(expected = BadRequestException.class)
-    public void testHttpsPost404() throws IOException {
-        httpConnectionManager.doHttpRequest("https://localhost:" + this.httpsPort + "/swaggerx.html", "POST", "",
-                "application/json", "DCAE", null, null);
-        fail("Should have raised an BadRequestException");
-    }
-
-    @Test(expected = BadRequestException.class)
-    public void testHttpException() throws IOException {
-        httpConnectionManager.doHttpRequest("http://localhost:" + this.httpsPort + "/swagger.html", "GET", null, null,
-                "DCAE", null, null);
-        fail("Should have raised an BadRequestException");
-    }
-}
index 00c9b7d..18f77cb 100644 (file)
@@ -45,7 +45,8 @@ public class ToscaYamlToJsonConvertorTest {
         String toscaModelYaml = ResourceFileUtil.getResourceAsString("tosca/tosca_example.yaml");
         ToscaYamlToJsonConvertor convertor = new ToscaYamlToJsonConvertor();
 
-        String parsedJsonSchema = convertor.parseToscaYaml(toscaModelYaml);
+        String parsedJsonSchema = convertor.parseToscaYaml(toscaModelYaml,
+                "onap.policies.monitoring.cdap.tca.hi.lo.app");
         assertNotNull(parsedJsonSchema);
         JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json.json"),
                 parsedJsonSchema, true);
@@ -62,7 +63,7 @@ public class ToscaYamlToJsonConvertorTest {
         String toscaModelYaml = ResourceFileUtil.getResourceAsString("tosca/tosca-with-constraints.yaml");
         ToscaYamlToJsonConvertor convertor = new ToscaYamlToJsonConvertor();
 
-        String parsedJsonSchema = convertor.parseToscaYaml(toscaModelYaml);
+        String parsedJsonSchema = convertor.parseToscaYaml(toscaModelYaml,"onap.policies.monitoring.example.app");
         assertNotNull(parsedJsonSchema);
         JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json-with-constraints" +
                                                                              ".json"),
@@ -80,7 +81,7 @@ public class ToscaYamlToJsonConvertorTest {
         String toscaModelYaml = ResourceFileUtil.getResourceAsString("tosca/tosca-with-datatypes.yaml");
         ToscaYamlToJsonConvertor convertor = new ToscaYamlToJsonConvertor();
 
-        String parsedJsonSchema = convertor.parseToscaYaml(toscaModelYaml);
+        String parsedJsonSchema = convertor.parseToscaYaml(toscaModelYaml,"onap.policies.monitoring.example.app");
         assertNotNull(parsedJsonSchema);
         JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/policy-yaml-to-json-with-datatypes.json"),
                                 parsedJsonSchema, true);
diff --git a/src/test/javascript/demo.test.js b/src/test/javascript/demo.test.js
deleted file mode 100644 (file)
index c088957..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-require('jquery/dist/jquery.min.js');
-require('angular/angular.min.js');
-require('angular-mocks/angular-mocks.js');
-require('angular-route/angular-route.min.js');
-require('angular-resource/angular-resource.min.js');
-require('angular-cookies/angular-cookies.min.js');
-require('angular-animate/angular-animate.min.js');
-require('angular-sanitize/angular-sanitize.min.js');
-require('angular-touch/angular-touch.min.js');
-require('popper.js/dist/umd/popper.min.js');
-require('bootstrap/dist/js/bootstrap.min.js');
-require('angular-ui-bootstrap/dist/ui-bootstrap-tpls.js');
-require('angular-loading-bar/src/loading-bar.js');
-require('angular-dialog-service/dist/dialogs.js');
-require('scripts/app.js');
-require('scripts/DashboardCtrl.js');
-
-
-describe('Dashboard ctrl tests', function() {
-
-       beforeEach(angular.mock.module('clds-app'));
-
-       var $controllerService;
-       
-       beforeEach(angular.mock.inject(function(_$controller_) {
-               $controllerService = _$controller_;
-       }));
-
-       describe('$scope.showPalette', function() {
-
-               it('test showPalette', function() {
-
-                       var $scopeTest = {};
-                       var $rootScopeTest = {};
-                       var $resourceTest = {};
-                       var $httpTest = {};
-                       var $timeoutTest = {};
-                       var $locationTest = {};
-                       var $intervalTest = function(){};
-                       var $controllerDashboard = $controllerService('DashboardCtrl', {
-                           '$scope' : $scopeTest,
-                           '$rootScope' : $rootScopeTest,
-                           '$resource' : $resourceTest,
-                           '$http' : $httpTest,
-                           '$timeout' : $timeoutTest,
-                           '$location' : $locationTest,
-                           '$interval' : $intervalTest
-                       });
-                       $scopeTest.showPalette();
-                       expect($rootScopeTest.isModel).toEqual(true);
-               });
-       });
-});
\ No newline at end of file
diff --git a/src/test/javascript/package.json b/src/test/javascript/package.json
deleted file mode 100644 (file)
index a2f0cd2..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-       "scripts": {
-               "test": "jest",
-               "test:watch": "jest --watch",
-               "test:coverage": "jest --coverage"
-       },
-       "jest": {
-               "verbose": true,
-               "coverageDirectory": "${project.build.directory}/clamp-ui/coverage",
-               "collectCoverageFrom": [
-                       "**/designer/**/*.{js,jsx}",
-                       "!**/designer/lib/**"
-               ],
-               "rootDir": "${project.build.directory}/clamp-ui",
-               "roots": [
-                       "${project.basedir}/src/test/javascript/",
-                       "<rootDir>/designer/"
-               ],
-               "moduleDirectories": [
-                       "${project.build.directory}/clamp-ui/node/node_modules",
-                       "${project.build.directory}/clamp-ui/node_modules",
-                       "<rootDir>/designer"
-               ],
-               "coverageReporters": [
-                       "lcov"
-               ]
-       },
-       "devDependencies": {
-               "angular": "1.3.2",
-               "angular-resource": "1.3.2",
-               "angular-cookies": "1.3.2",
-               "angular-route": "1.3.2",
-               "angular-mocks": "1.3.2",
-               "angular-animate": "1.3.2",
-               "angular-sanitize": "1.3.2",
-               "angular-touch": "1.3.2",
-               "angular-dialog-service": "5.3.0",
-               "angular-loading-bar": "0.9.0",
-               "jquery": "3.3.1",
-               "popper.js": "1.14.4",
-               "bootstrap": "4.1.1",
-               "angular-ui-bootstrap": "2.5.6",
-               "jest": "^23.6.0",
-               "jest-cli": "^21.2.1"
-       }
-}
diff --git a/src/test/javascript/propertyController.test.js b/src/test/javascript/propertyController.test.js
deleted file mode 100644 (file)
index e719996..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-
-describe('Property controller tests', function() {
-       var clModel = '{"name": "ClosedLoopTest","dcaeDeploymentId":"testId","dcaeDeploymentStatusUrl":"testUrl","lastComputedState":"DESIGN","svgRepresentation": "representation","globalPropertiesJson": [{"name":"deployParameters","value":{"location_id":"","service_id":"","policy_id":"AUTO_GENERATED_POLICY_ID_AT_SUBMIT"}}], "blueprint": "yaml","lastComputedState": "DESIGN","operationalPolicies": [ {"name": "OpPolicyTest", "configurationsJson": { "policy1": [{"name": "pname","value": "policy1"}]}}],"microServicePolicies": [{"name": "tca","properties": "", "shared": true,"policyTosca": "tosca","jsonRepresentation": {"schema":{"title":"DCAE TCA Config","type":"object","required":["name"],"properties":{"name":{"propertyOrder":101,"title":"Name","type":"string"}}}}}],"loopLogs": [{ } ] }';
-       cl_props = JSON.parse(clModel);
-       var propertyController = require('scripts/propertyController.js');
-       
-       test('getOperationalPolicyProperty', () => {
-               var policyProp = '{"policy1": [{"name": "pname","value": "policy1"}]}';
-               expect(propertyController.getOperationalPolicyProperty()).toEqual(JSON.parse(policyProp));
-       });
-
-       test('getGlobalProperty', () => {
-               var globalProp = '[{"name":"deployParameters","value":{"location_id":"","service_id":"","policy_id":"AUTO_GENERATED_POLICY_ID_AT_SUBMIT"}}]';
-               expect(propertyController.getGlobalProperty()).toEqual(JSON.parse(globalProp));
-       });
-
-       test('getMsPropertyTca', () => {
-               expect(propertyController.getMsProperty("tca")).toEqual('');
-       });
-
-       test('getMsUITca', () => {
-               var msUI = '{"schema":{"title":"DCAE TCA Config","type":"object","required":["name"],"properties":{"name":{"propertyOrder":101,"title":"Name","type":"string"}}}}';
-               expect(propertyController.getMsUI("tca")).toEqual(JSON.parse(msUI));
-       });
-
-       test('getMsPropertyNotExist', () => {
-                 expect(propertyController.getMsProperty("test")).toEqual(null);
-       });
-
-       test('getMsUINotExist', () => {
-                 expect(propertyController.getMsUI("test")).toEqual(null);
-       });
-});
\ No newline at end of file
index b23f77a..bbade74 100644 (file)
@@ -208,15 +208,10 @@ clamp.config.action.insert.test.event=false
 clamp.config.clds.service.cache.invalidate.after.seconds=120
 
 #DCAE Inventory Url Properties
-clamp.config.dcae.inventory.url=http://localhost:${docker.http-cache.port.host}
+clamp.config.dcae.inventory.url=http4://localhost:${docker.http-cache.port.host}
 clamp.config.dcae.intentory.retry.interval=100
 clamp.config.dcae.intentory.retry.limit=1
 
-#DCAE Dispatcher Url Properties
-clamp.config.dcae.dispatcher.url=http://localhost:${docker.http-cache.port.host}
-clamp.config.dcae.dispatcher.retry.interval=100
-clamp.config.dcae.dispatcher.retry.limit=1
-
 #DCAE Deployment Url Properties
 clamp.config.dcae.deployment.url=http4://localhost:${docker.http-cache.port.host}
 clamp.config.dcae.deployment.userName=test
diff --git a/src/test/resources/clds/camel/rest/clamp-api-v2.xml b/src/test/resources/clds/camel/rest/clamp-api-v2.xml
new file mode 100644 (file)
index 0000000..cf99625
--- /dev/null
@@ -0,0 +1,617 @@
+<rests xmlns="http://camel.apache.org/schema/spring">
+       <rest>
+               <get
+                       uri="/v2/loop/getAllNames"
+                       outType="java.lang.String[]"
+                       produces="application/json">
+                       <route>
+                               <removeHeaders pattern="*" />
+                               <doTry>
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET ALL Loop')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=getLoopNames()" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                       </doCatch>
+                               </doTry>
+                       </route>
+               </get>
+               <get
+                       uri="/v2/loop/{loopName}"
+                       outType="org.onap.clamp.loop.Loop"
+                       produces="application/json">
+                       <route>
+                               <removeHeaders
+                                       pattern="*"
+                                       excludePattern="loopName" />
+                               <doTry>
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET Loop')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                       </doCatch>
+                               </doTry>
+                       </route>
+               </get>
+               <get
+                       uri="/v2/loop/svgRepresentation/{loopName}"
+                       outType="java.lang.String"
+                       produces="application/xml">
+                       <route>
+                               <removeHeaders
+                                       pattern="*"
+                                       excludePattern="loopName" />
+                               <doTry>
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Get SVG Representation')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=getSvgRepresentation(${header.loopName})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                       </doCatch>
+                               </doTry>
+                       </route>
+               </get>
+
+               <post
+                       uri="/v2/loop/updateGlobalProperties/{loopName}"
+                       type="com.google.gson.JsonObject"
+                       consumes="application/json"
+                       outType="org.onap.clamp.loop.Loop"
+                       produces="application/json">
+                       <route>
+                               <removeHeaders
+                                       pattern="*"
+                                       excludePattern="loopName" />
+                               <doTry>
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Update the global properties')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <setHeader headerName="GlobalPropertiesJson">
+                                               <simple>${body}</simple>
+                                       </setHeader>
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=updateGlobalPropertiesJson(${header.loopName},${header.GlobalPropertiesJson})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Global Properties UPDATED','INFO',${exchangeProperty[loopObject]})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                       </doCatch>
+                               </doTry>
+                       </route>
+               </post>
+               <post
+                       uri="/v2/loop/updateOperationalPolicies/{loopName}"
+                       type="com.google.gson.JsonArray"
+                       consumes="application/json"
+                       outType="org.onap.clamp.loop.Loop"
+                       produces="application/json">
+                       <route>
+                               <removeHeaders
+                                       pattern="*"
+                                       excludePattern="loopName" />
+                               <doTry>
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Update operational policies')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <setHeader headerName="OperationalPoliciesArray">
+                                               <simple>${body}</simple>
+                                       </setHeader>
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=updateOperationalPolicies(${header.loopName},${header.OperationalPoliciesArray})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Operational and Guard policies UPDATED','INFO',${exchangeProperty[loopObject]})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                       </doCatch>
+                               </doTry>
+                       </route>
+               </post>
+               <post
+                       uri="/v2/loop/updateMicroservicePolicy/{loopName}"
+                       type="org.onap.clamp.policy.microservice.MicroServicePolicy"
+                       consumes="application/json"
+                       outType="org.onap.clamp.policy.microservice.MicroServicePolicy"
+                       produces="application/json">
+                       <route>
+                               <removeHeaders
+                                       pattern="*"
+                                       excludePattern="loopName" />
+                               <doTry>
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Update Microservice policies')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <setProperty propertyName="MicroServicePolicyObject">
+                                               <simple>${body}</simple>
+                                       </setProperty>
+
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=updateMicroservicePolicy(${header.loopName},${exchangeProperty[MicroServicePolicyObject]})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Micro Service policies UPDATED','INFO',${exchangeProperty[loopObject]})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                       </doCatch>
+                               </doTry>
+                       </route>
+               </post>
+               <put
+                       uri="/v2/loop/deploy/{loopName}"
+                       outType="org.onap.clamp.loop.Loop"
+                       produces="application/json">
+                       <route>
+                               <removeHeaders
+                                       pattern="*"
+                                       excludePattern="loopName" />
+                               <doTry>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="DCAE DEPLOY request for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'DCAE DEPLOY request')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DCAE DEPLOY request','INFO',${exchangeProperty[loopObject]})" />
+
+                                       <to uri="direct:deploy-loop" />
+
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="DEPLOY request successfully executed for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DEPLOY request successfully executed','INFO',${exchangeProperty[loopObject]})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                               <log
+                                                       loggingLevel="ERROR"
+                                                       message="DEPLOY request failed for loop: ${header.loopName}" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DEPLOY request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
+                                       </doCatch>
+                               </doTry>
+                       </route>
+               </put>
+               <put
+                       uri="/v2/loop/undeploy/{loopName}"
+                       outType="org.onap.clamp.loop.Loop"
+                       produces="application/json">
+                       <route>
+                               <removeHeaders
+                                       pattern="*"
+                                       excludePattern="loopName" />
+                               <doTry>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="DCAE UNDEPLOY request for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'DCAE UNDEPLOY request')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DCAE UNDEPLOY request','INFO',${exchangeProperty[loopObject]})" />
+                                       <to uri="direct:undeploy-loop" />
+
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="UNDEPLOY request successfully executed for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('UNDEPLOY request successfully executed','INFO',${exchangeProperty[loopObject]})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                               <log
+                                                       loggingLevel="ERROR"
+                                                       message="UNDEPLOY request failed for loop: ${header.loopName}" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('UNDEPLOY request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
+                                       </doCatch>
+                               </doTry>
+                       </route>
+               </put>
+               <put
+                       uri="/v2/loop/stop/{loopName}"
+                       outType="org.onap.clamp.loop.Loop"
+                       produces="application/json">
+                       <route>
+                               <removeHeaders
+                                       pattern="*"
+                                       excludePattern="loopName" />
+                               <doTry>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="STOP request for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*,'STOP request')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('STOP request','INFO',${exchangeProperty[loopObject]})" />
+
+                                       <to uri="direct:remove-all-policy-from-active-pdp-group" />
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="STOP request successfully executed for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('STOP request successfully executed','INFO',${exchangeProperty[loopObject]})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                               <log
+                                                       loggingLevel="ERROR"
+                                                       message="STOP request failed for loop: $${header.loopName}" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('STOP request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
+                                       </doCatch>
+                               </doTry>
+                       </route>
+               </put>
+               <put
+                       uri="/v2/loop/restart/{loopName}"
+                       outType="org.onap.clamp.loop.Loop"
+                       produces="application/json">
+                       <route>
+                               <removeHeaders
+                                       pattern="*"
+                                       excludePattern="loopName" />
+                               <doTry>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="RESTART request for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*,'RESTART request')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <to uri="direct:load-loop" />
+
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('RESTART request','INFO',${exchangeProperty[loopObject]})" />
+
+                                       <to uri="direct:add-all-to-active-pdp-group" />
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="RESTART request successfully executed for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('RESTART request successfully executed','INFO',${exchangeProperty[loopObject]})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                               <log
+                                                       loggingLevel="ERROR"
+                                                       message="RESTART request failed for loop: ${header.loopName}" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('RESTART request failed, Error reported: ${exception} - Body: ${exception.responseBody}','INFO',${exchangeProperty[loopObject]})" />
+                                       </doCatch>
+                               </doTry>
+                       </route>
+               </put>
+               <put
+                       uri="/v2/loop/submit/{loopName}"
+                       outType="org.onap.clamp.loop.Loop"
+                       produces="application/json">
+                       <route>
+                               <removeHeaders
+                                       pattern="*"
+                                       excludePattern="loopName" />
+                               <doTry>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="POLICY SUBMIT request for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'POLICY SUBMIT request')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('POLICY SUBMIT request','INFO',${exchangeProperty[loopObject]})" />
+                                       <setProperty propertyName="raiseHttpExceptionFlag">
+                                               <simple resultType="java.lang.Boolean">false</simple>
+                                       </setProperty>
+                                       <to uri="direct:remove-all-policy-from-active-pdp-group" />
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="Processing all MICRO-SERVICES policies defined in loop ${exchangeProperty[loopObject].getName()}" />
+                                       <split>
+                                               <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
+                                               </simple>
+                                               <setProperty propertyName="microServicePolicy">
+                                                       <simple>${body}</simple>
+                                               </setProperty>
+                                               <log
+                                                       loggingLevel="INFO"
+                                                       message="Processing Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}" />
+                                               <setProperty propertyName="raiseHttpExceptionFlag">
+                                                       <simple resultType="java.lang.Boolean">false</simple>
+                                               </setProperty>
+                                               <to uri="direct:delete-micro-service-policy" />
+                                               <to uri="direct:create-micro-service-policy" />
+                                       </split>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="Processing all OPERATIONAL policies defined in loop ${exchangeProperty[loopObject].getName()}" />
+                                       <split>
+                                               <simple>${exchangeProperty[loopObject].getOperationalPolicies()}
+                                               </simple>
+                                               <setProperty propertyName="operationalPolicy">
+                                                       <simple>${body}</simple>
+                                               </setProperty>
+                                               <log
+                                                       loggingLevel="INFO"
+                                                       message="Processing Operational Policy: ${exchangeProperty[operationalPolicy].getName()}" />
+                                               <setProperty propertyName="raiseHttpExceptionFlag">
+                                                       <simple resultType="java.lang.Boolean">false</simple>
+                                               </setProperty>
+
+                                               <to uri="direct:delete-operational-policy" />
+                                               <to uri="direct:create-operational-policy" />
+
+                                               <log
+                                                       loggingLevel="INFO"
+                                                       message="Processing all GUARD policies defined in loop ${exchangeProperty[loopObject].getName()}" />
+                                               <split>
+                                                       <simple>${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()}
+                                                       </simple>
+                                                       <setProperty propertyName="guardPolicy">
+                                                               <simple>${body}</simple>
+                                                       </setProperty>
+                                                       <log
+                                                               loggingLevel="INFO"
+                                                               message="Processing Guard Policy: ${exchangeProperty[guardPolicy].getKey()}" />
+
+                                                       <setProperty propertyName="raiseHttpExceptionFlag">
+                                                               <simple resultType="java.lang.Boolean">false</simple>
+                                                       </setProperty>
+                                                       <to uri="direct:delete-guard-policy" />
+                                                       <to uri="direct:create-guard-policy" />
+                                               </split>
+                                       </split>
+
+                                       <delay>
+                                               <constant>3000</constant>
+                                       </delay>
+
+                                       <to uri="direct:add-all-to-active-pdp-group" />
+
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="SUBMIT request successfully executed for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('SUBMIT request successfully executed','INFO',${exchangeProperty[loopObject]})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                               <log
+                                                       loggingLevel="ERROR"
+                                                       message="SUBMIT request failed for loop: ${header.loopName}" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('SUBMIT request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
+                                       </doCatch>
+                               </doTry>
+                       </route>
+               </put>
+               <put uri="/v2/loop/delete/{loopName}">
+                       <route>
+                               <removeHeaders
+                                       pattern="*"
+                                       excludePattern="loopName" />
+                               <doTry>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="DELETE request for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*,'DELETE request')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DELETE request','INFO',${exchangeProperty[loopObject]})" />
+                                       <to uri="direct:undeploy-loop" />
+                                       <to uri="direct:remove-all-policy-from-active-pdp-group" />
+                                       <split>
+                                               <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
+                                               </simple>
+                                               <setProperty propertyName="microServicePolicy">
+                                                       <simple>${body}</simple>
+                                               </setProperty>
+                                               <log
+                                                       loggingLevel="INFO"
+                                                       message="Processing Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}" />
+                                               <to uri="direct:delete-micro-service-policy" />
+                                       </split>
+
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="Processing all OPERATIONAL policies defined in loop ${exchangeProperty[loopObject].getName()}" />
+                                       <split>
+                                               <simple>${exchangeProperty[loopObject].getOperationalPolicies()}
+                                               </simple>
+                                               <setProperty propertyName="operationalPolicy">
+                                                       <simple>${body}</simple>
+                                               </setProperty>
+                                               <log
+                                                       loggingLevel="INFO"
+                                                       message="Processing Operational Policy: ${exchangeProperty[operationalPolicy].getName()}" />
+                                               <to uri="direct:delete-operational-policy" />
+                                               <log
+                                                       loggingLevel="INFO"
+                                                       message="Processing all GUARD policies defined in loop ${exchangeProperty[loopObject].getName()}" />
+                                               <split>
+                                                       <simple>${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()}
+                                                       </simple>
+                                                       <setProperty propertyName="guardPolicy">
+                                                               <simple>${body}</simple>
+                                                       </setProperty>
+                                                       <log
+                                                               loggingLevel="INFO"
+                                                               message="Processing Guard Policy: ${exchangeProperty[guardPolicy].getKey()}" />
+                                                       <to uri="direct:delete-guard-policy" />
+                                               </split>
+                                       </split>
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopService?method=deleteLoop(${header.loopName})" />
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="DELETE request successfully executed for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DELETE request successfully executed','INFO',${exchangeProperty[loopObject]})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                               <log
+                                                       loggingLevel="ERROR"
+                                                       message="DELETE request failed for loop: ${header.loopName}" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DELETE request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
+                                       </doCatch>
+                               </doTry>
+                       </route>
+               </put>
+               <get
+                       uri="/v2/loop/getstatus/{loopName}"
+                       outType="org.onap.clamp.loop.Loop"
+                       produces="application/json">
+                       <route>
+                               <removeHeaders
+                                       pattern="*"
+                                       excludePattern="loopName" />
+                               <doTry>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="GET STATUS request for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'GET STATUS request')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('GET STATUS request','INFO',${exchangeProperty[loopObject]})" />
+                                       <doTry>
+                                               <to uri="direct:update-policy-status-for-loop" />
+                                               <to uri="direct:update-dcae-status-for-loop" />
+                                               <to uri="direct:update-loop-state" />
+
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Get Status request successfully executed','INFO',${exchangeProperty[loopObject]})" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       </doTry>
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                               <log
+                                                       loggingLevel="ERROR"
+                                                       message="Get Status request failed for loop: ${header.loopName}" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Get Status request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
+                                       </doCatch>
+                                       <doFinally>
+                                               <setBody>
+                                                       <simple>${exchangeProperty[loopObject]}</simple>
+                                               </setBody>
+                                       </doFinally>
+                               </doTry>
+                       </route>
+               </get>
+       </rest>
+</rests>
diff --git a/src/test/resources/clds/camel/rest/clds-services.xml b/src/test/resources/clds/camel/rest/clds-services.xml
new file mode 100644 (file)
index 0000000..dd3a4bf
--- /dev/null
@@ -0,0 +1,29 @@
+<rests xmlns="http://camel.apache.org/schema/spring">
+       <rest>
+               <get uri="/v1/clds/cldsInfo" outType="org.onap.clamp.clds.model.CldsInfo"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getCldsInfo()" />
+               </get>
+               <get uri="/v1/healthcheck" produces="application/json"
+                       outType="org.onap.clamp.clds.model.CldsHealthCheck">
+                       <route>
+                               <setBody>
+                                       <method ref="org.onap.clamp.clds.service.CldsHealthcheckService"
+                                               method="gethealthcheck()" />
+                               </setBody>
+                               <when>
+                                       <simple> ${body} == 'NOT-OK'</simple>
+                                       <setHeader headerName="CamelHttpResponseCode">
+                                               <constant>404</constant>
+                                       </setHeader>
+                                       <log loggingLevel="ERROR" message="HealthCheck failed" />
+                               </when>
+                       </route>
+               </get>
+
+               <get uri="/v1/user/getUser" produces="text/plain">
+                       <to uri="bean:org.onap.clamp.clds.service.UserService?method=getUser()" />
+               </get>
+       </rest>
+</rests>
diff --git a/src/test/resources/clds/camel/routes/dcae-flows.xml b/src/test/resources/clds/camel/routes/dcae-flows.xml
new file mode 100644 (file)
index 0000000..fb3bc90
--- /dev/null
@@ -0,0 +1,216 @@
+<routes xmlns="http://camel.apache.org/schema/spring">
+       <route id="deploy-loop">
+               <from uri="direct:deploy-loop" />
+               <doTry>
+                       <log loggingLevel="INFO"
+                               message="Deploying the loop: ${exchangeProperty[loopObject].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Deploying the loop')" />
+                       <setBody>
+                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                       method="getDeployPayload(${exchangeProperty[loopObject]})" />
+                       </setBody>
+                       <setProperty propertyName="dcaeDeploymentId">
+                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                       method="generateDeploymentId()" />
+                       </setProperty>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>PUT</constant>
+                       </setHeader>
+                       <setHeader headerName="Content-Type">
+                               <constant>application/json</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to deploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}"></log>
+                       <toD
+                               uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=300000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <convertBodyTo type="java.lang.String" />
+                       <setProperty propertyName="dcaeResponse">
+                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                       method="convertDcaeResponse(${body})" />
+                       </setProperty>
+                       <setProperty propertyName="dcaeStatusUrl">
+                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                       method="getStatusUrl(${exchangeProperty[dcaeResponse]})" />
+                       </setProperty>
+                       <to
+                               uri="bean:org.onap.clamp.loop.LoopService?method=updateDcaeDeploymentFields(${exchangeProperty[loopObject]},${exchangeProperty[dcaeDeploymentId]},${exchangeProperty[dcaeStatusUrl]})" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>DEPLOY loop status
+                                               (Dep-id:${exchangeProperty[dcaeDeploymentId]},
+                                               StatusUrl:${exchangeProperty[dcaeStatusUrl]})
+                                       </simple>
+                               </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>DCAE</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="undeploy-loop">
+               <from uri="direct:undeploy-loop" />
+               <log loggingLevel="INFO"
+                       message="Undeploying the loop: ${exchangeProperty[loopObject].getName()} : ${exchangeProperty[loopObject].getDcaeDeploymentId()}" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Undeploying the loop')" />
+               <choice>
+                       <when>
+                               <simple>${exchangeProperty[loopObject].getDcaeDeploymentId()}
+                                       != null
+                               </simple>
+                               <doTry>
+                                       <setBody>
+                                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                                       method="getUndeployPayload(${exchangeProperty[loopObject]})" />
+                                       </setBody>
+                                       <setHeader headerName="CamelHttpMethod">
+                                               <constant>DELETE</constant>
+                                       </setHeader>
+                                       <setHeader headerName="Content-Type">
+                                               <constant>application/json</constant>
+                                       </setHeader>
+
+                                       <setHeader headerName="X-ONAP-RequestID">
+                                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                                               </simple>
+                                       </setHeader>
+                                       <setHeader headerName="X-ONAP-InvocationID">
+                                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                                               </simple>
+                                       </setHeader>
+                                       <setHeader headerName="X-ONAP-PartnerName">
+                                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                                               </simple>
+                                       </setHeader>
+                                       <log loggingLevel="INFO"
+                                               message="Endpoint to undeploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[loopObject].getDcaeDeploymentId()}"></log>
+                                       <toD
+                                               uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[loopObject].getDcaeDeploymentId()}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=300000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                                       <convertBodyTo type="java.lang.String" />
+                                       <setProperty propertyName="dcaeResponse">
+                                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                                       method="convertDcaeResponse(${body})" />
+                                       </setProperty>
+                                       <setProperty propertyName="dcaeStatusUrl">
+                                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                                       method="getStatusUrl(${exchangeProperty[dcaeResponse]})" />
+                                       </setProperty>
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopService?method=updateDcaeDeploymentFields(${exchangeProperty[loopObject]},${exchangeProperty[loopObject].getDcaeDeploymentId()},${exchangeProperty[dcaeStatusUrl]})" />
+                                       <doFinally>
+                                               <to uri="direct:reset-raise-http-exception-flag" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                               <setProperty propertyName="logMessage">
+                                                       <simple>UNDEPLOY loop status</simple>
+                                               </setProperty>
+                                               <setProperty propertyName="logComponent">
+                                                       <simple>DCAE</simple>
+                                               </setProperty>
+                                               <to uri="direct:dump-loop-log-http-response" />
+                                       </doFinally>
+                               </doTry>
+                       </when>
+                       <otherwise>
+                               <log loggingLevel="WARNING"
+                                       message="Cannot Undeploy for the loop: ${exchangeProperty[loopObject].getName()}, the Deployment ID does not exist !" />
+                               <to
+                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Cannot Undeploy for the loop: ${exchangeProperty[loopObject].getName()}, the Deployment ID does not exist !','WARNING',${exchangeProperty[loopObject]})" />
+
+                       </otherwise>
+               </choice>
+       </route>
+       <route id="get-dcae-deployment-status">
+               <from uri="direct:get-dcae-deployment-status" />
+               <log loggingLevel="INFO"
+                       message="Getting DCAE deployment status for loop: ${exchangeProperty[loopObject].getName()}" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Getting Deployment status')" />
+               <doTry>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>GET</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to query Closed Loop status: ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()}"></log>
+                       <toD
+                               uri="${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=30000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>DCAE deployment status</simple>
+                               </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>DCAE</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+       <route id="get-dcae-blueprint-inventory">
+               <from uri="direct:get-dcae-blueprint-inventory" />
+               <log loggingLevel="INFO"
+                       message="Getting DCAE blueprint id in inventory" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Getting blueprint id in inventory')" />
+               <doTry>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>GET</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to query Dcae inventory Loop status: {{clamp.config.dcae.inventory.url}}/dcae-service-types?${header[CamelHttpQuery]}"></log>
+                       <toD
+                               uri="{{clamp.config.dcae.inventory.url}}/dcae-service-types?asdcResourceId=${exchangeProperty[blueprintResourceId]}&amp;asdcServiceId=${exchangeProperty[blueprintServiceId]}&amp;typeName=${exchangeProperty[blueprintName]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=30000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <convertBodyTo type="java.lang.String" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                       </doFinally>
+               </doTry>
+
+       </route>
+</routes>
\ No newline at end of file
diff --git a/src/test/resources/clds/camel/routes/flexible-flow.xml b/src/test/resources/clds/camel/routes/flexible-flow.xml
deleted file mode 100644 (file)
index 2103b4a..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<routes xmlns="http://camel.apache.org/schema/spring">
-               <route id="submit">
-                               <from uri="direct:processSubmit" />
-                               <choice>
-                                               <when>
-                                                               <simple> ${exchangeProperty.actionCd} == 'SUBMIT' || ${exchangeProperty.actionCd} == 'RESUBMIT'</simple>
-                                                               <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" />
-                                                               <delay>
-                                                                               <constant>30000</constant>
-                                                               </delay>
-                                                               <to uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-                                               </when>
-                                               <when>
-                                                               <simple> ${exchangeProperty.actionCd} == 'DELETE'</simple>
-                                                               <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDeleteDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDeleteDelegate" />
-                                                               <delay>
-                                                                               <constant>30000</constant>
-                                                               </delay>
-                                                               <to
-                                                                               uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.ModelDeleteDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-                                               </when>
-                                               <when>
-                                                               <simple> ${exchangeProperty.actionCd} == 'UPDATE'</simple>
-                                                               <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" />
-                                                               <delay>
-                                                                               <constant>30000</constant>
-                                                               </delay>
-                                                               <to uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-                                               </when>
-                                               <when>
-                                                               <simple> ${exchangeProperty.actionCd} == 'STOP'</simple>
-                                                               <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-                                                               <to
-                                                                               uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-                                               </when>
-                                               <when>
-                                                               <simple> ${exchangeProperty.actionCd} == 'RESTART'</simple>
-                                                               <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
-                                                               <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
-                                               </when>
-                               </choice>
-               </route>
-
-</routes>
\ No newline at end of file
diff --git a/src/test/resources/clds/camel/routes/loop-flows.xml b/src/test/resources/clds/camel/routes/loop-flows.xml
new file mode 100644 (file)
index 0000000..036e8ef
--- /dev/null
@@ -0,0 +1,222 @@
+<routes xmlns="http://camel.apache.org/schema/spring">
+       <route id="load-loop">
+               <from uri="direct:load-loop" />
+               <setBody>
+                       <simple>${header.loopName}</simple>
+               </setBody>
+               <setProperty propertyName="loopObject">
+                       <method ref="org.onap.clamp.loop.LoopService" method="getLoop" />
+               </setProperty>
+
+               <when>
+                       <simple>${exchangeProperty[loopObject]} == null</simple>
+                       <setHeader headerName="CamelHttpResponseCode">
+                               <constant>404</constant>
+                       </setHeader>
+                       <log loggingLevel="WARN" message="Loop not found in database: ${body}" />
+                       <stop />
+               </when>
+       </route>
+
+       <route id="update-policy-status-for-loop">
+               <from uri="direct:update-policy-status-for-loop" />
+               <setProperty propertyName="policyComponent">
+                       <simple>${exchangeProperty[loopObject].getComponent('POLICY')}
+                       </simple>
+               </setProperty>
+               <setProperty propertyName="policyFound">
+                       <simple resultType="java.lang.Boolean">true</simple>
+               </setProperty>
+               <setProperty propertyName="policyDeployed">
+                       <simple resultType="java.lang.Boolean">true</simple>
+               </setProperty>
+               <log loggingLevel="INFO"
+                       message="Processing all MICRO-SERVICES policies defined in loop ${exchangeProperty[loopObject].getName()}" />
+               <split>
+                       <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
+                       </simple>
+                       <setProperty propertyName="policyName">
+                               <simple>${body.getName()}</simple>
+                       </setProperty>
+                       <setProperty propertyName="policyType">
+                               <simple>${body.getModelType()}</simple>
+                       </setProperty>
+                       <setProperty propertyName="policyVersion">
+                               <simple>1.0.0</simple>
+                       </setProperty>
+                       <setBody>
+                               <constant>null</constant>
+                       </setBody>
+                       <log loggingLevel="INFO"
+                               message="Processing Micro Service Policy: ${exchangeProperty[policyName]} of type ${exchangeProperty[policyType]}" />
+                       <to uri="direct:verify-one-policy" />
+               </split>
+               <log loggingLevel="INFO"
+                       message="Processing all OPERATIONAL policies defined in loop ${exchangeProperty[loopObject].getName()}" />
+               <split>
+                       <simple>${exchangeProperty[loopObject].getOperationalPolicies()}
+                       </simple>
+                       <setProperty propertyName="policyName">
+                               <simple>${body.getName()}</simple>
+                       </setProperty>
+                       <setProperty propertyName="policyType">
+                               <simple>onap.policies.controlloop.Operational</simple>
+                       </setProperty>
+                       <setProperty propertyName="policyVersion">
+                               <simple>1</simple>
+                       </setProperty>
+                       <setProperty propertyName="operationalPolicy">
+                               <simple>${body}</simple>
+                       </setProperty>
+                       <setBody>
+                               <constant>null</constant>
+                       </setBody>
+                       <log loggingLevel="INFO"
+                               message="Processing Micro Service Policy: ${exchangeProperty[policyName]} of type ${exchangeProperty[policyType]}" />
+                       <to uri="direct:verify-one-policy" />
+                       <log loggingLevel="INFO"
+                               message="Processing all GUARD policies defined in loop ${exchangeProperty[loopObject].getName()}" />
+                       <split>
+                               <simple>${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()}
+                               </simple>
+                               <setProperty propertyName="policyName">
+                                       <simple>${body.getKey()}</simple>
+                               </setProperty>
+                               <setProperty propertyName="policyType">
+                                       <simple>onap.policies.controlloop.Guard</simple>
+                               </setProperty>
+                               <setProperty propertyName="policyVersion">
+                                       <simple>1</simple>
+                               </setProperty>
+                               <setBody>
+                                       <constant>null</constant>
+                               </setBody>
+                               <log loggingLevel="INFO"
+                                       message="Processing Guard Policy: ${exchangeProperty[policyName]} of type ${exchangeProperty[policyType]}" />
+                               <to uri="direct:verify-one-policy" />
+                       </split>
+               </split>
+               <setProperty propertyName="policyState">
+                       <simple> ${exchangeProperty[policyComponent].getState()}
+                       </simple>
+               </setProperty>
+               <log loggingLevel="INFO"
+                       message="Policy state set to: ${exchangeProperty[policyState].getStateName()}" />
+               <to
+                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLogForComponent('Policy state set to: ${exchangeProperty[policyState].getStateName()}','INFO','POLICY',${exchangeProperty[loopObject]})" />
+       </route>
+       <route id="update-dcae-status-for-loop">
+               <from uri="direct:update-dcae-status-for-loop" />
+               <log loggingLevel="INFO"
+                       message="Updating DCAE status for loop: ${exchangeProperty[loopObject].getName()}" />
+               <setProperty propertyName="dcaeComponent">
+                       <simple>${exchangeProperty[loopObject].getComponent('DCAE')}</simple>
+               </setProperty>
+               <when>
+                       <simple>${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()}
+                               != null
+                       </simple>
+                       <setProperty propertyName="raiseHttpExceptionFlag">
+                               <simple resultType="java.lang.Boolean">false</simple>
+                       </setProperty>
+                       <to uri="direct:get-dcae-deployment-status" />
+                       <when>
+                               <simple> ${header.CamelHttpResponseCode} == 200 </simple>
+                               <convertBodyTo type="java.lang.String" />
+                               <setProperty propertyName="dcaeResponse">
+                                       <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                               method="convertDcaeResponse(${body})" />
+                               </setProperty>
+                       </when>
+               </when>
+
+               <setProperty propertyName="dcaeState">
+                       <simple> ${exchangeProperty[dcaeComponent].computeState(*)}
+                       </simple>
+               </setProperty>
+               <log loggingLevel="INFO"
+                       message="DCAE state set to: ${exchangeProperty[dcaeState].getStateName()} - DCAE message: ${exchangeProperty[dcaeResponse].getError()}" />
+               <to
+                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLogForComponent('DCAE state set to: ${exchangeProperty[dcaeState].getStateName()} - message: ${exchangeProperty[dcaeResponse].getError()}','INFO','DCAE',${exchangeProperty[loopObject]})" />
+
+       </route>
+       <route id="direct:update-loop-state">
+               <from uri="direct:update-loop-state" />
+               <log loggingLevel="INFO"
+                       message="Updating status for loop: ${exchangeProperty[loopObject].getName()}" />
+               <choice>
+                       <when>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'BLUEPRINT_DEPLOYED' and ${exchangeProperty['policyState'].getStateName()}
+                                       == 'NOT_SENT'
+                               </simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'DESIGN')" />
+                       </when>
+                       <when>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} == 'IN_ERROR' or
+                                       ${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'MICROSERVICE_INSTALLATION_FAILED'
+                               </simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'IN_ERROR')" />
+                       </when>
+                       <when>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'MICROSERVICE_UNINSTALLATION_FAILED' or
+                                       ${exchangeProperty['policyState'].getStateName()} == 'IN_ERROR'
+                               </simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'IN_ERROR')" />
+                       </when>
+                       <when>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'MICROSERVICE_INSTALLED_SUCCESSFULLY' and
+                                       ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'
+                               </simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'RUNNING')" />
+                       </when>
+                       <when>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'MICROSERVICE_INSTALLED_SUCCESSFULLY' and
+                                       ${exchangeProperty['policyState'].getStateName()} == 'SENT'
+                               </simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'STOPPED')" />
+                       </when>
+                       <when>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'BLUEPRINT_DEPLOYED' or ${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'MICROSERVICE_UNINSTALLED_SUCCESSFULLY' and
+                                       ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'
+                               </simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'SUBMITTED')" />
+                       </when>
+                       <when>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'PROCESSING_MICROSERVICE_INSTALLATION' or
+                                       ${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'PROCESSING_MICROSERVICE_UNINSTALLATION' and
+                                       ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'
+                               </simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'WAITING')" />
+                       </when>
+                       <when>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'MICROSERVICE_INSTALLED_SUCCESSFULLY' and
+                                       ${exchangeProperty['policyState'].getStateName()} != 'NOT_SENT'
+                               </simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'DEPLOYED')" />
+                       </when>
+               </choice>
+               <log loggingLevel="INFO"
+                       message="New loop state is: ${exchangeProperty[loopObject].getLastComputedState().toString()}" />
+               <to
+                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('New loop state is: ${exchangeProperty[loopObject].getLastComputedState().toString()}','INFO',${exchangeProperty[loopObject]})" />
+
+       </route>
+</routes>
\ No newline at end of file
diff --git a/src/test/resources/clds/camel/routes/policy-flows.xml b/src/test/resources/clds/camel/routes/policy-flows.xml
new file mode 100644 (file)
index 0000000..75ac66c
--- /dev/null
@@ -0,0 +1,520 @@
+
+<routes xmlns="http://camel.apache.org/schema/spring">
+       <route id="verify-one-policy">
+               <from uri="direct:verify-one-policy" />
+               <setProperty propertyName="raiseHttpExceptionFlag">
+                       <simple resultType="java.lang.Boolean">false</simple>
+               </setProperty>
+               <to uri="direct:get-policy" />
+               <when>
+                       <simple> ${header.CamelHttpResponseCode} != 200 </simple>
+                       <setProperty propertyName="policyFound">
+                               <simple resultType="java.lang.Boolean">false</simple>
+                       </setProperty>
+                       <log loggingLevel="WARN"
+                               message="At least one policy has not been found on policy engine: ${exchangeProperty[policyName]}" />
+               </when>
+               <setProperty propertyName="raiseHttpExceptionFlag">
+                       <simple resultType="java.lang.Boolean">false</simple>
+               </setProperty>
+               <to uri="direct:get-deployment-policy" />
+               <when>
+                       <simple> ${header.CamelHttpResponseCode} != 200 </simple>
+                       <setProperty propertyName="policyDeployed">
+                               <simple resultType="java.lang.Boolean">false</simple>
+                       </setProperty>
+                       <log loggingLevel="WARN"
+                               message="At least one policy has not been deployed on policy engine: ${exchangeProperty[policyName]}" />
+               </when>
+               <setProperty propertyName="newPolicyState">
+                       <simple>${exchangeProperty[policyComponent].computeState(*)}</simple>
+               </setProperty>
+       </route>
+
+       <route id="get-policy">
+               <from uri="direct:get-policy" />
+               <doTry>
+                       <log loggingLevel="INFO"
+                               message="Getting Policy: ${exchangeProperty[policyName]}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Get Policy')" />
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>GET</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to get policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[policyName]} GET
+                                               Policy status
+                                       </simple>
+                               </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="get-deployment-policy">
+               <from uri="direct:get-deployment-policy" />
+               <doTry>
+                       <log loggingLevel="INFO"
+                               message="Getting the policy deployment in PDP: ${exchangeProperty[policyName]}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Getting the policy deployment in PDP')" />
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>GET</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to get policy deployment status: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/deployed"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/deployed?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[policyName]} GET Policy deployment
+                                               status
+                                       </simple>
+                               </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+       <route id="create-micro-service-policy">
+               <from uri="direct:create-micro-service-policy" />
+               <doTry>
+                       <log loggingLevel="INFO"
+                               message="Creating Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Micro Service Policy')" />
+                       <setBody>
+                               <simple>${exchangeProperty[microServicePolicy].createPolicyPayload()}
+                               </simple>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>POST</constant>
+                       </setHeader>
+                       <setHeader headerName="Content-Type">
+                               <constant>application/json</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to create microservice policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[microServicePolicy].getName()} creation
+                                               status
+                                       </simple>
+                               </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="delete-micro-service-policy">
+               <from uri="direct:delete-micro-service-policy" />
+               <doTry>
+                       <log loggingLevel="INFO"
+                               message="Deleting Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Micro Service Policy')" />
+                       <setBody>
+                               <constant>null</constant>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>DELETE</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to delete microservice policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies/${exchangeProperty[microServicePolicy].getName()}/versions/1.0.0"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies/${exchangeProperty[microServicePolicy].getName()}/versions/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[microServicePolicy].getName()} removal
+                                               status
+                                       </simple>
+                               </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="create-operational-policy">
+               <from uri="direct:create-operational-policy" />
+               <doTry>
+                       <log loggingLevel="INFO"
+                               message="Creating Operational Policy: ${exchangeProperty[operationalPolicy].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Operational Policy')" />
+                       <setBody>
+                               <simple>${exchangeProperty[operationalPolicy].createPolicyPayload()}
+                               </simple>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>POST</constant>
+                       </setHeader>
+                       <setHeader headerName="Content-Type">
+                               <constant>application/json</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to create operational policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[operationalPolicy].getName()} creation
+                                               status
+                                       </simple>
+                               </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="delete-operational-policy">
+               <from uri="direct:delete-operational-policy" />
+               <doTry>
+                       <log loggingLevel="INFO"
+                               message="Deleting Operational Policy: ${exchangeProperty[operationalPolicy].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Operational Policy')" />
+                       <setBody>
+                               <constant>null</constant>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>DELETE</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to delete operational policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicy].getName()}/versions/1"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicy].getName()}/versions/1?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[operationalPolicy].getName()} removal
+                                               status
+                                       </simple>
+                               </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="create-guard-policy">
+               <from uri="direct:create-guard-policy" />
+               <doTry>
+                       <log loggingLevel="INFO"
+                               message="Creating Guard Policy: ${exchangeProperty[guardPolicy].getKey()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Guard Policy')" />
+                       <setBody>
+                               <simple>${exchangeProperty[guardPolicy].getValue()}
+                               </simple>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>POST</constant>
+                       </setHeader>
+                       <setHeader headerName="Content-Type">
+                               <constant>application/json</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to create guard policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[guardPolicy].getKey()} creation status
+                                       </simple>
+                               </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="delete-guard-policy">
+               <from uri="direct:delete-guard-policy" />
+               <doTry>
+                       <log loggingLevel="INFO"
+                               message="Deleting Guard Policy: ${exchangeProperty[guardPolicy].getKey()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Guard Policy')" />
+                       <setBody>
+                               <constant>null</constant>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>DELETE</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to delete guard policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/${exchangeProperty[guardPolicy].getKey()}/versions/1"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/${exchangeProperty[guardPolicy].getKey()}/versions/1?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[guardPolicy].getKey()} removal status
+                                       </simple>
+                               </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="add-all-to-active-pdp-group">
+               <from uri="direct:add-all-to-active-pdp-group" />
+               <doTry>
+                       <log loggingLevel="INFO"
+                               message="Adding loop policies to PDP Group: ${exchangeProperty[loopObject].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Add policies to PDP group')" />
+                       <setBody>
+                               <simple>${exchangeProperty[loopObject].getComponent("POLICY").createPoliciesPayloadPdpGroup(exchangeProperty[loopObject])}
+                               </simple>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>POST</constant>
+                       </setHeader>
+                       <setHeader headerName="Content-Type">
+                               <constant>application/json</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to add policies to PDP Group: {{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies"></log>
+                       <toD
+                               uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies?bridgeEndpoint=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;useSystemProperties=true&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>PDP Group push ALL status</simple>
+                               </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="remove-all-policy-from-active-pdp-group">
+               <from uri="direct:remove-all-policy-from-active-pdp-group" />
+               <doTry>
+                       <log loggingLevel="INFO"
+                               message="Removing policies from active PDP group for loop: ${exchangeProperty[loopObject].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Removing policies PDP group')" />
+                       <split>
+                               <simple>${exchangeProperty[loopObject].getComponent("POLICY").listPolicyNamesPdpGroup(exchangeProperty[loopObject])}
+                               </simple>
+                               <setProperty propertyName="policyName">
+                                       <simple>${body}</simple>
+                               </setProperty>
+                               <setBody>
+                                       <constant>null</constant>
+                               </setBody>
+                               <setHeader headerName="CamelHttpMethod">
+                                       <constant>DELETE</constant>
+                               </setHeader>
+                               <setHeader headerName="X-ONAP-RequestID">
+                                       <simple>${exchangeProperty[X-ONAP-RequestID]}
+                                       </simple>
+                               </setHeader>
+                               <setHeader headerName="X-ONAP-InvocationID">
+                                       <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                                       </simple>
+                               </setHeader>
+                               <setHeader headerName="X-ONAP-PartnerName">
+                                       <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                                       </simple>
+                               </setHeader>
+                               <log loggingLevel="INFO"
+                                       message="Endpoint to delete policy from PDP Group: {{clamp.config.policy.pap.url}}/pdps/policies/${exchangeProperty[policyName]}/versions/1.0.0"></log>
+                               <toD
+                                       uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies/${exchangeProperty[policyName]}/versions/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[policyName]} PDP Group removal status
+                                       </simple>
+                               </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </split>
+                       <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <setProperty propertyName="logMessage">
+                                       <simple>PDP Group removal, Error reported: ${exception}</simple>
+                               </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doCatch>
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                       </doFinally>
+               </doTry>
+       </route>
+</routes>
\ No newline at end of file
diff --git a/src/test/resources/clds/camel/routes/utils-flows.xml b/src/test/resources/clds/camel/routes/utils-flows.xml
new file mode 100644 (file)
index 0000000..bbbc46a
--- /dev/null
@@ -0,0 +1,28 @@
+<routes xmlns="http://camel.apache.org/schema/spring">
+       <route id="reset-raise-http-exception-flag">
+               <from uri="direct:reset-raise-http-exception-flag" />
+               <setProperty propertyName="raiseHttpExceptionFlag">
+                       <simple resultType="java.lang.Boolean">true</simple>
+               </setProperty>
+       </route>
+
+       <route id="dump-loop-log-http-response">
+               <from uri="direct:dump-loop-log-http-response" />
+               <log loggingLevel="INFO"
+                       message="${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}" />
+               <choice>
+                       <when>
+                               <simple>${exchangeProperty[logComponent]} == null</simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}','INFO',${exchangeProperty[loopObject]})" />
+                       </when>
+                       <otherwise>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLogForComponent('${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}','INFO','${exchangeProperty[logComponent]}',${exchangeProperty[loopObject]})" />
+                               <setProperty propertyName="logComponent">
+                                       <constant>null</constant>
+                               </setProperty>
+                       </otherwise>
+               </choice>
+       </route>
+</routes>
\ No newline at end of file
index fb595de..ff3c444 100644 (file)
@@ -33,6 +33,7 @@ import LoopLogs from './components/loop_viewer/logs/LoopLogs';
 import LoopStatus from './components/loop_viewer/status/LoopStatus';
 import UserService from './api/UserService';
 import LoopCache from './api/LoopCache';
+import LoopActionService from './api/LoopActionService';
 
 import { Route } from 'react-router-dom'
 import OpenLoopModal from './components/dialogs/OpenLoop/OpenLoopModal';
@@ -44,6 +45,7 @@ import LoopService from './api/LoopService';
 import PerformAction from './components/dialogs/PerformActions';
 import RefreshStatus from './components/dialogs/RefreshStatus';
 import DeployLoop from './components/dialogs/DeployLoop';
+import Alert from 'react-bootstrap/Alert';
 
 import { Link } from 'react-router-dom';
 
@@ -100,7 +102,8 @@ export default class LoopUI extends React.Component {
        state = {
                userName: null,
                loopName: LoopUI.defaultLoopName,
-               loopCache: new LoopCache({})
+               loopCache: new LoopCache({}),
+               showAlert: false
        };
 
        constructor() {
@@ -110,6 +113,8 @@ export default class LoopUI extends React.Component {
                this.updateLoopCache = this.updateLoopCache.bind(this);
                this.loadLoop = this.loadLoop.bind(this);
                this.closeLoop = this.closeLoop.bind(this);
+               this.showAlert =  this.showAlert.bind(this);
+               this.disableAlert =  this.disableAlert.bind(this);
        }
 
        componentWillMount() {
@@ -155,6 +160,14 @@ export default class LoopUI extends React.Component {
                );
        }
 
+       renderAlertBar() {
+               return (
+                               <Alert variant="danger" show={this.state.showAlert} onClose={this.disableAlert} dismissible>
+                                       {this.state.showMessage}
+                               </Alert>
+               );
+       }
+
        renderNavBar() {
                return (
                        <Navbar >
@@ -199,14 +212,30 @@ export default class LoopUI extends React.Component {
        }
 
        updateLoopCache(loopJson) {
-               this.setState({ loopCache: new LoopCache(loopJson), loopName: this.state.loopCache.getLoopName() });
+               this.setState({ loopCache: new LoopCache(loopJson) });
+               this.setState({ loopName: this.state.loopCache.getLoopName() });
                console.info(this.state.loopName+" loop loaded successfully");
        }
 
+       showAlert(message) {
+               this.setState ({ showAlert: true, showMessage:message });
+       }
+
+       disableAlert() {
+               this.setState ({ showAlert: false });
+       }
+
        loadLoop(loopName) {
                LoopService.getLoop(loopName).then(loop => {
                        console.debug("Updating loopCache");
-                       this.updateLoopCache(loop);
+                       LoopActionService.refreshStatus(loopName).then(data => {
+                               this.updateLoopCache(data);
+                               this.props.history.push('/');
+                       })
+                       .catch(error => {
+                               this.updateLoopCache(loop);
+                               this.props.history.push('/');
+                       });
                });
        }
 
@@ -219,21 +248,22 @@ export default class LoopUI extends React.Component {
                return (
                                <StyledMainDiv id="main_div">
                                <Route path="/operationalPolicyModal"
-                                       render={(routeProps) => (<OperationalPolicyModal {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop}/>)} />
+                                       render={(routeProps) => (<OperationalPolicyModal {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop} showAlert={this.showAlert}/>)} />
                                <Route path="/configurationPolicyModal/:componentName" render={(routeProps) => (<ConfigurationPolicyModal {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop}/>)} />
                                <Route path="/openLoop" render={(routeProps) => (<OpenLoopModal {...routeProps} loadLoopFunction={this.loadLoop} />)} />
                                <Route path="/loopProperties" render={(routeProps) => (<LoopProperties {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop}/>)} />
                                <Route path="/userInfo" render={(routeProps) => (<UserInfo {...routeProps} />)} />
                                <Route path="/closeLoop" render={this.closeLoop} />
-                               <Route path="/submit" render={(routeProps) => (<PerformAction {...routeProps} loopAction="submit" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
-                               <Route path="/stop" render={(routeProps) => (<PerformAction {...routeProps} loopAction="stop" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
-                               <Route path="/restart" render={(routeProps) => (<PerformAction {...routeProps} loopAction="restart" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
-                               <Route path="/delete" render={(routeProps) => (<PerformAction {...routeProps} loopAction="delete" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
-                               <Route path="/undeploy" render={(routeProps) => (<PerformAction {...routeProps} loopAction="undeploy" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
-                               <Route path="/deploy" render={(routeProps) => (<DeployLoop {...routeProps} loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
-                               <Route path="/refreshStatus" render={(routeProps) => (<RefreshStatus {...routeProps} loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
+                               <Route path="/submit" render={(routeProps) => (<PerformAction {...routeProps} loopAction="submit" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache} showAlert={this.showAlert}/>)} />
+                               <Route path="/stop" render={(routeProps) => (<PerformAction {...routeProps} loopAction="stop" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache} showAlert={this.showAlert}/>)} />
+                               <Route path="/restart" render={(routeProps) => (<PerformAction {...routeProps} loopAction="restart" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache} showAlert={this.showAlert}/>)} />
+                               <Route path="/delete" render={(routeProps) => (<PerformAction {...routeProps} loopAction="delete" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache} showAlert={this.showAlert}/>)} />
+                               <Route path="/undeploy" render={(routeProps) => (<PerformAction {...routeProps} loopAction="undeploy" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache} showAlert={this.showAlert}/>)} />
+                               <Route path="/deploy" render={(routeProps) => (<DeployLoop {...routeProps} loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache} showAlert={this.showAlert}/>)} />
+                               <Route path="/refreshStatus" render={(routeProps) => (<RefreshStatus {...routeProps} loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache} showAlert={this.showAlert}/>)} />
                                <Route path="/logout" render={this.logout} />
                                <GlobalClampStyle />
+                                       {this.renderAlertBar()}
                                        {this.renderNavBar()}
                                        {this.renderLoopViewer()}
                                </StyledMainDiv>
index 7e20e2f..7cea3ff 100644 (file)
@@ -24,7 +24,7 @@
 export default class LoopActionService{
 
        static performAction(cl_name, uiAction) {
-               console.log("LoopActionService perform action: " + uiAction + " closedloopName=" + cl_name);
+               console.info("LoopActionService perform action: " + uiAction + " closedloopName=" + cl_name);
                const svcAction = uiAction.toLowerCase();
                return fetch("/restservices/clds/v2/loop/" + svcAction + "/" + cl_name, {
                                method: 'PUT',
@@ -38,18 +38,18 @@ export default class LoopActionService{
                        }
                })
                .then(function (data) {
-                       alert("Action Successful: " + uiAction);
+                       console.info("Action Successful: " + uiAction);
                        return data;
                })
                .catch(function(error) {
-                       console.log("Action Failure: " + uiAction);
+                       console.info("Action Failure: " + uiAction);
                        return Promise.reject(error);
                });
        }
 
 
        static refreshStatus(cl_name) {
-               console.log("Refresh the status for closedloopName=" + cl_name);
+               console.info("Refresh the status for closedloopName=" + cl_name);
 
                return fetch("/restservices/clds/v2/loop/getstatus/" + cl_name, {
                        method: 'GET',
index 805f0f2..d71af92 100644 (file)
@@ -64,14 +64,13 @@ export default class DeployLoop extends React.Component {
                LoopService.updateGlobalProperties(loopName, this.state.temporaryPropertiesJson).then(resp => {
                        this.setState({ show: false });
 
-                       console.log("Perform action: deploy");
                        LoopActionService.performAction(loopName, "deploy").then(pars => {
-                               alert("Action deploy successfully performed");
+                               this.props.showAlert("Action deploy successfully performed");
                                // refresh status and update loop logs
                                this.refreshStatus(loopName);
                        })
                        .catch(error => {
-                               alert("Action deploy failed");
+                               this.props.showAlert("Action deploy failed");
                                // refresh status and update loop logs
                                this.refreshStatus(loopName);
                        });
@@ -84,7 +83,7 @@ export default class DeployLoop extends React.Component {
                        this.props.history.push('/');
                })
                .catch(error => {
-                       alert("Refresh status failed");
+                       this.props.showAlert("Refresh status failed");
                        this.props.history.push('/');
                });
        }
index 2959ed6..44bc783 100644 (file)
@@ -61,6 +61,7 @@ describe('Verify DeployLoop', () => {
                const flushPromises = () => new Promise(setImmediate);
                const historyMock = { push: jest.fn() };
                const updateLoopFunction = jest.fn();
+               const showAlert = jest.fn();
                const handleSave = jest.spyOn(DeployLoop.prototype,'handleSave');
                LoopService.updateGlobalProperties = jest.fn().mockImplementation(() => {
                        return Promise.resolve({
@@ -83,10 +84,9 @@ describe('Verify DeployLoop', () => {
                                json: () => {}
                        });
                });
-               const jsdomAlert = window.alert;
-               window.alert = () => {};
+
                const component = shallow(<DeployLoop history={historyMock} 
-                                               loopCache={loopCache} updateLoopFunction={updateLoopFunction} />)
+                                               loopCache={loopCache} updateLoopFunction={updateLoopFunction} showAlert={showAlert} />)
 
                component.find('[variant="primary"]').prop('onClick')();
                await flushPromises();
@@ -95,7 +95,6 @@ describe('Verify DeployLoop', () => {
                expect(handleSave).toHaveBeenCalledTimes(1);
                expect(component.state('show')).toEqual(false);
                expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
-               window.alert = jsdomAlert;
                handleSave.mockClear();
        });
 
index 4dc1f90..5c5f024 100644 (file)
@@ -54,7 +54,7 @@ export default class OperationalPolicyModal extends React.Component {
 
                if (errors.length !== 0) {
                        console.error("Errors detected during config policy data validation ", errors);
-                       alert(errors);
+                       this.props.showAlert(errors);
                }
                else {
                        console.info("NO validation errors found in config policy data");
index 9c34e14..66b1928 100644 (file)
@@ -50,14 +50,14 @@ export default class PerformActions extends React.Component {
        componentDidMount() {
                const action = this.state.loopAction;
                const loopName = this.state.loopName;
-               console.log("Perform action:" + action);
+
                LoopActionService.performAction(loopName, action).then(pars => {
-                       alert("Action " + action + " successfully performed");
+                       this.props.showAlert("Action " + action + " successfully performed");
                        // refresh status and update loop logs
                        this.refreshStatus(loopName);
                })
                .catch(error => {
-                       alert("Action " + action + " failed");
+                       this.props.showAlert("Action " + action + " failed");
                        // refresh status and update loop logs
                        this.refreshStatus(loopName);
                });
index 56fdcf3..0b07862 100644 (file)
@@ -36,6 +36,7 @@ describe('Verify PerformActions', () => {
                const flushPromises = () => new Promise(setImmediate);
                const historyMock = { push: jest.fn() };
                const updateLoopFunction = jest.fn();
+               const showAlert = jest.fn();
                
                LoopActionService.refreshStatus = jest.fn().mockImplementation(() => {
                        return Promise.resolve({
@@ -44,21 +45,19 @@ describe('Verify PerformActions', () => {
                                json: () => {}
                        });
                });
-               const jsdomAlert = window.alert;
-               window.alert = () => {};
                const component = shallow(<PerformActions loopCache={loopCache} 
-                                       loopAction="submit" history={historyMock} updateLoopFunction={updateLoopFunction} />)
+                                       loopAction="submit" history={historyMock} updateLoopFunction={updateLoopFunction} showAlert={showAlert} />)
                await flushPromises();
                component.update();
 
                expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
-               window.alert = jsdomAlert;
        });
 
        it('Test the render method action successful', async () => {
                const flushPromises = () => new Promise(setImmediate);
                const historyMock = { push: jest.fn() };
                const updateLoopFunction = jest.fn();
+               const showAlert = jest.fn();
 
                LoopActionService.performAction = jest.fn().mockImplementation(() => {
                        return Promise.resolve({
@@ -74,15 +73,12 @@ describe('Verify PerformActions', () => {
                                json: () => {}
                        });
                });
-               const jsdomAlert = window.alert;
-               window.alert = () => {};
                const component = shallow(<PerformActions loopCache={loopCache} 
-                                               loopAction="submit" history={historyMock} updateLoopFunction={updateLoopFunction} />)
+                                               loopAction="submit" history={historyMock} updateLoopFunction={updateLoopFunction} showAlert={showAlert} />)
                await flushPromises();
                component.update();
 
                expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
-               window.alert = jsdomAlert;
        });
 
 });
index cf08655..64b35d9 100644 (file)
@@ -22,7 +22,7 @@
  */
 import React from 'react';
 import LoopActionService from '../../api/LoopActionService';
-import Spinner from 'react-bootstrap/Spinner'
+import Spinner from 'react-bootstrap/Spinner';
 import styled from 'styled-components';
 
 const StyledSpinnerDiv = styled.div`
@@ -42,15 +42,14 @@ export default class RefreshStatus extends React.Component {
        }
 
        componentDidMount() {
-               console.log("Refresh status for: " + this.state.loopName);
                // refresh status and update loop logs
                LoopActionService.refreshStatus(this.state.loopName).then(data => {
-                       alert("Status successfully refreshed")
+                       this.props.showAlert("Status successfully refreshed");
                        this.props.updateLoopFunction(data);
                        this.props.history.push('/');
                })
                .catch(error => {
-                       alert("Status refreshing failed");
+                       this.props.showAlert("Status refreshing failed");
                        this.props.history.push('/');
                });
        }
index cb782ad..3038eb3 100644 (file)
@@ -35,21 +35,20 @@ describe('Verify RefreshStatus', () => {
        it('Test refresh status failed', async () => {
                const flushPromises = () => new Promise(setImmediate);
                const historyMock = { push: jest.fn() };
+               const showAlert = jest.fn();
 
-               const jsdomAlert = window.alert;
-               window.alert = () => {};
-               const component = shallow(<RefreshStatus loopCache={loopCache} history={historyMock} />)
+               const component = shallow(<RefreshStatus loopCache={loopCache} history={historyMock} showAlert={showAlert} />)
                await flushPromises();
                component.update();
 
                expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
-               window.alert = jsdomAlert;
        });
 
        it('Test refresh status successful', async () => {
                const flushPromises = () => new Promise(setImmediate);
                const historyMock = { push: jest.fn() };
                const updateLoopFunction = jest.fn();
+               const showAlert = jest.fn();
 
                LoopActionService.refreshStatus = jest.fn().mockImplementation(() => {
                        return Promise.resolve({
@@ -58,15 +57,13 @@ describe('Verify RefreshStatus', () => {
                                json: () => {}
                        });
                });
-               const jsdomAlert = window.alert;
-               window.alert = () => {};
+
                const component = shallow(<RefreshStatus loopCache={loopCache} 
-                                               loopAction="submit" history={historyMock} updateLoopFunction={updateLoopFunction} />)
+                                               loopAction="submit" history={historyMock} updateLoopFunction={updateLoopFunction} showAlert={showAlert} />)
                await flushPromises();
                component.update();
 
                expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
-               window.alert = jsdomAlert;
        });
 
 });