Merge "add ELK note"
diff --git a/extra/bin-for-dev/start-backend.sh b/extra/bin-for-dev/start-backend.sh
index ab1551d..dc02ce4 100755
--- a/extra/bin-for-dev/start-backend.sh
+++ b/extra/bin-for-dev/start-backend.sh
@@ -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
diff --git a/pom.xml b/pom.xml
index c0f31e9..62cdee9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>org.onap.clamp</groupId>
 	<artifactId>clds</artifactId>
-	<version>4.1.3-SNAPSHOT</version>
+	<version>4.2.0-SNAPSHOT</version>
 	<name>clamp</name>
 
 
@@ -97,7 +97,7 @@
 		<sonar.javascript.lcov.reportPaths>${project.build.directory}/${ui.react.src}/coverage/lcov.info</sonar.javascript.lcov.reportPaths>
 
 		<sonar.exclusions>src/main/resources/**</sonar.exclusions>
-
+		<sonar.coverage.exclusions>src/main/resources/**,target/ui-react/src/**/*.test.js,target/ui-react/src/setupTests.js,src/main/docker/kibana/*.py</sonar.coverage.exclusions>
 		<docker.push.registry>localhost:5000</docker.push.registry>
 		<docker.pull.registry>nexus3.onap.org:10001</docker.pull.registry>
 		<docker.skip.build>true</docker.skip.build>
@@ -397,7 +397,7 @@
 		<dependency>
 			<groupId>org.onap.aaf.authz</groupId>
 			<artifactId>aaf-cadi-aaf</artifactId>
-			<version>2.1.10</version>
+			<version>2.1.15</version>
 			<exclusions>
 				<exclusion>
 					<groupId>javax.servlet</groupId>
@@ -1102,7 +1102,7 @@
 						</goals>
 						<phase>compile</phase>
 						<configuration>
-							<arguments>install --registry https://registry.npmjs.com/</arguments>
+							<arguments>install</arguments>
 						</configuration>
 					</execution>
 					<execution>
@@ -1122,7 +1122,6 @@
 						</goals>
 						<phase>deploy</phase>
 						<configuration>
-							<skip>true</skip>
 							<arguments>publish --registry ${npm.publish.url}</arguments>
 						</configuration>
 					</execution>
diff --git a/releases/4.1.3-container.yaml b/releases/4.1.3-container.yaml
new file mode 100644
index 0000000..3c8e333
--- /dev/null
+++ b/releases/4.1.3-container.yaml
@@ -0,0 +1,14 @@
+distribution_type: 'container'
+container_release_tag: '4.1.3'
+project: 'clamp'
+log_dir: 'clamp-maven-docker-stage-master/156/'
+ref: 13ab11a844d840025d153f7eac9109fbbe1c6b08
+containers:
+    - name: 'clamp-backend'
+      version: '4.1-STAGING-20191011T120231Z'
+    - name: 'clamp-frontend'
+      version: '4.1-STAGING-20191011T120231Z'
+    - name: 'clamp-dashboard-logstash'
+      version: '4.1-STAGING-20191011T120231Z'
+    - name: 'clamp-dashboard-kibana'
+      version: '4.1-STAGING-20191011T120231Z'
\ No newline at end of file
diff --git a/releases/4.1.3.yaml b/releases/4.1.3.yaml
new file mode 100644
index 0000000..e7295a1
--- /dev/null
+++ b/releases/4.1.3.yaml
@@ -0,0 +1,5 @@
+---
+distribution_type: 'maven'
+version: '4.1.3'
+project: 'clamp'
+log_dir: 'clamp-maven-stage-master/168/'
diff --git a/src/main/docker/frontend/nginx/nginx.conf b/src/main/docker/frontend/nginx/nginx.conf
index 5bcac5c..e18c1e8 100644
--- a/src/main/docker/frontend/nginx/nginx.conf
+++ b/src/main/docker/frontend/nginx/nginx.conf
@@ -4,8 +4,10 @@
   ssl_protocols TLSv1.2;
   ssl_certificate /etc/ssl/clamp.pem;
   ssl_certificate_key /etc/ssl/clamp.key;
+  ssl_verify_client optional_no_ca;
     location /restservices/clds/ {
         proxy_pass https://clamp-backend:8443;
+        proxy_set_header X-SSL-Cert $ssl_client_escaped_cert;
     }
   
   location / {
diff --git a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java
index 0ebaab5..b24bc99 100644
--- a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java
+++ b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java
@@ -30,6 +30,9 @@
 import java.io.IOException;

 import java.util.Date;

 

+import org.apache.camel.CamelContext;

+import org.apache.camel.Exchange;

+import org.apache.camel.builder.ExchangeBuilder;

 import org.json.simple.JSONArray;

 import org.json.simple.JSONObject;

 import org.json.simple.parser.JSONParser;

@@ -38,7 +41,6 @@
 import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse;

 import org.onap.clamp.clds.util.JsonUtils;

 import org.onap.clamp.clds.util.LoggingUtils;

-import org.onap.clamp.util.HttpConnectionManager;

 import org.springframework.beans.factory.annotation.Autowired;

 import org.springframework.stereotype.Component;

 

@@ -48,6 +50,9 @@
 @Component

 public class DcaeInventoryServices {

 

+    @Autowired

+    CamelContext camelContext;

+

     protected static final EELFLogger logger = EELFManager.getInstance().getLogger(DcaeInventoryServices.class);

     protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();

     protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();

@@ -55,15 +60,13 @@
     public static final String DCAE_INVENTORY_RETRY_INTERVAL = "dcae.intentory.retry.interval";

     public static final String DCAE_INVENTORY_RETRY_LIMIT = "dcae.intentory.retry.limit";

     private final ClampProperties refProp;

-    private final HttpConnectionManager httpConnectionManager;

 

     /**

      * Constructor.

      */

     @Autowired

-    public DcaeInventoryServices(ClampProperties refProp, HttpConnectionManager httpConnectionManager) {

+    public DcaeInventoryServices(ClampProperties refProp) {

         this.refProp = refProp;

-        this.httpConnectionManager = httpConnectionManager;

     }

 

     private int getTotalCountFromDcaeInventoryResponse(String responseStr) throws ParseException {

@@ -96,19 +99,7 @@
     public DcaeInventoryResponse getDcaeInformation(String artifactName, String serviceUuid, String resourceUuid)

             throws IOException, ParseException, InterruptedException {

         LoggingUtils.setTargetContext("DCAE", "getDcaeInformation");

-        String queryString = "?asdcResourceId=" + resourceUuid + "&asdcServiceId=" + serviceUuid + "&typeName="

-                + artifactName;

-        String fullUrl = refProp.getStringValue(DCAE_INVENTORY_URL) + "/dcae-service-types" + queryString;

-        logger.info("Dcae Inventory Service full url - " + fullUrl);

-        DcaeInventoryResponse response = queryDcaeInventory(fullUrl);

-        LoggingUtils.setResponseContext("0", "Get Dcae Information success", this.getClass().getName());

-        Date startTime = new Date();

-        LoggingUtils.setTimeContext(startTime, new Date());

-        return response;

-    }

 

-    private DcaeInventoryResponse queryDcaeInventory(String fullUrl)

-            throws IOException, InterruptedException, ParseException {

         int retryInterval = 0;

         int retryLimit = 1;

         if (refProp.getStringValue(DCAE_INVENTORY_RETRY_LIMIT) != null) {

@@ -118,18 +109,31 @@
             retryInterval = Integer.valueOf(refProp.getStringValue(DCAE_INVENTORY_RETRY_INTERVAL));

         }

         for (int i = 0; i < retryLimit; i++) {

+            Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext)

+                    .withProperty("blueprintResourceId", resourceUuid).withProperty("blueprintServiceId", serviceUuid)

+                    .withProperty("blueprintName", artifactName).build();

             metricsLogger.info("Attempt n°" + i + " to contact DCAE inventory");

-            String response = httpConnectionManager.doHttpRequest(fullUrl, "GET", null, null, "DCAE", null, null);

-            int totalCount = getTotalCountFromDcaeInventoryResponse(response);

-            metricsLogger.info("getDcaeInformation complete: totalCount returned=" + totalCount);

-            if (totalCount > 0) {

-                logger.info("getDcaeInformation, answer from DCAE inventory:" + response);

-                return getItemsFromDcaeInventoryResponse(response);

+

+            Exchange exchangeResponse = camelContext.createProducerTemplate()

+                    .send("direct:get-dcae-blueprint-inventory", myCamelExchange);

+

+            if (Integer.valueOf(200).equals(exchangeResponse.getIn().getHeader("CamelHttpResponseCode"))) {

+                String dcaeResponse = (String) exchangeResponse.getIn().getBody();

+                int totalCount = getTotalCountFromDcaeInventoryResponse(dcaeResponse);

+                metricsLogger.info("getDcaeInformation complete: totalCount returned=" + totalCount);

+                if (totalCount > 0) {

+                    logger.info("getDcaeInformation, answer from DCAE inventory:" + dcaeResponse);

+                    LoggingUtils.setResponseContext("0", "Get Dcae Information success", this.getClass().getName());

+                    Date startTime = new Date();

+                    LoggingUtils.setTimeContext(startTime, new Date());

+                    return getItemsFromDcaeInventoryResponse(dcaeResponse);

+                } else {

+                    logger.info("Dcae inventory totalCount returned is 0, so waiting " + retryInterval

+                            + "ms before retrying ...");

+                    // wait for a while and try to connect to DCAE again

+                    Thread.sleep(retryInterval);

+                }

             }

-            logger.info(

-                    "Dcae inventory totalCount returned is 0, so waiting " + retryInterval + "ms before retrying ...");

-            // wait for a while and try to connect to DCAE again

-            Thread.sleep(retryInterval);

         }

         logger.warn("Dcae inventory totalCount returned is still 0, after " + retryLimit + " attempts, returning NULL");

         return null;

diff --git a/src/main/java/org/onap/clamp/clds/filter/ClampCadiFilter.java b/src/main/java/org/onap/clamp/clds/filter/ClampCadiFilter.java
index 7e104c7..68544de 100644
--- a/src/main/java/org/onap/clamp/clds/filter/ClampCadiFilter.java
+++ b/src/main/java/org/onap/clamp/clds/filter/ClampCadiFilter.java
@@ -46,6 +46,7 @@
 
 import org.onap.aaf.cadi.config.Config;
 import org.onap.aaf.cadi.filter.CadiFilter;
+import org.onap.clamp.clds.util.ResourceFileUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationContext;
@@ -144,16 +145,26 @@
     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 caCert = (X509Certificate) certificateFactory
+                        .generateCertificate(new ByteArrayInputStream(ResourceFileUtil.getResourceAsString("clds/aaf/ssl/ca-certs.pem").getBytes()));
 
+                X509Certificate[] certifArray = ((X509Certificate[]) request
+                        .getAttribute("javax.servlet.request.X509Certificate"));
+                if (certifArray == null) {
+                    certifArray = new X509Certificate[] { cert, caCert };
+                    request.setAttribute("javax.servlet.request.X509Certificate", certifArray);
+                } else {
+                    certifArray[0] = cert;
+                    certifArray[1] = caCert;
+                }
             }
+
         } catch (CertificateException e) {
             logger.error("Unable to inject the X.509 certificate", e);
         }
diff --git a/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java b/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java
index f5c21c1..43dd5f4 100644
--- a/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java
+++ b/src/main/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertor.java
@@ -61,10 +61,12 @@
     /**
      * 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 @@
         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 @@
             } 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")
diff --git a/src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java b/src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java
index 9321423..44ee522 100644
--- a/src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java
+++ b/src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java
@@ -52,6 +52,8 @@
             "The policies defined have been created but NOT deployed on the policy engine", 50);
     public static final ExternalComponentState SENT_AND_DEPLOYED = new ExternalComponentState("SENT_AND_DEPLOYED",
             "The policies defined have been created and deployed on the policy engine", 10);
+    public static final ExternalComponentState UNKNOWN = new ExternalComponentState("UNKNOWN",
+            "The current status is not clear. Need to regresh the status to get the current status.", 0);
 
     /**
      * Default constructor.
@@ -62,7 +64,7 @@
          * on by one, each time we increase the level we can't decrease it anymore.
          * That's why it starts with the lowest one SENT_AND_DEPLOYED.
          */
-        super(SENT_AND_DEPLOYED);
+        super(UNKNOWN);
     }
 
     @Override
diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java
index b1cea34..2943c39 100644
--- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java
+++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java
@@ -117,7 +117,7 @@
         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
index 6459fa9..0000000
--- a/src/main/java/org/onap/clamp/util/HttpConnectionManager.java
+++ /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);
-        }
-    }
-}
diff --git a/src/main/resources/application-noaaf.properties b/src/main/resources/application-noaaf.properties
index 580ec3f..79466c8 100644
--- a/src/main/resources/application-noaaf.properties
+++ b/src/main/resources/application-noaaf.properties
@@ -208,15 +208,10 @@
 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
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index dcad32e..3ac6fa2 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -219,15 +219,10 @@
 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,11 +244,11 @@
 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.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
-#clamp.config.cadi.oauthIntrospectUrll=https://AAF_LOCATE_URL/AAF_NS.introspect:2.0/introspect
+clamp.config.cadi.aafLocateUrl=https://aaf-locate:8095
+clamp.config.cadi.cadiKeystorePassword=enc:WWCxchk4WGBNSvuzLq3MLjMs5ObRybJtts5AI0XD1Vc
+clamp.config.cadi.cadiTruststorePassword=enc:iDnPBBLq_EMidXlMa1FEuBR8TZzYxrCg66vq_XfLHdJ
+clamp.config.cadi.oauthTokenUrl= https://AAF_LOCATE_URL/locate/onap.org.osaaf.aaf.token:2.1/token
+clamp.config.cadi.oauthIntrospectUrll=https://AAF_LOCATE_URL/locate/onap.org.osaaf.aaf.introspect:2.1/introspect
 clamp.config.cadi.aafEnv=DEV
 clamp.config.cadi.aafUrl=https://AAF_LOCATE_URL/onap.org.osaaf.aaf.service:2.1
-clamp.config.cadi.cadiX509Issuers=CN=intermediateCA_9, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US
+clamp.config.cadi.cadiX509Issuers=CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_7, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_9, OU=OSAAF, O=ONAP, C=US
diff --git a/src/main/resources/clds/aaf/org.onap.clamp.keyfile b/src/main/resources/clds/aaf/org.onap.clamp.keyfile
index 45cdcb6..c2521fc 100644
--- a/src/main/resources/clds/aaf/org.onap.clamp.keyfile
+++ b/src/main/resources/clds/aaf/org.onap.clamp.keyfile
@@ -1,27 +1,27 @@
-HTQLJHUg5Du0VM7wHY5cBMTgupk6ujhSoAgx5BTHp9wt9CoWvD72ScIciyldEH9R2QZIL9ZvpVo0
-h2o-hSQueaVjPcIFUhVIl4HWmNC6I2YAlNkwy3VMl1g9otKaOTgo3ChsFUVq7ACIrcr2977wo4B_
-FeHa0lInuaLoEjHMP1fszTWYBBx9oY3K9s-9MQQyCo6bFV-4L733sPeE60j20FWoygUwvIqxp3Pc
-Bmnm1AtcrhGH0elqDg9qNjmnmC3gxZaGpGiclaEds_lVu57RIXwtTHgYyMbJzfP-Ziq3T7i8d-h3
-JZThj1l9JvDLYm2z0BEXuQ3Owvn4m98cWB9P5esJOKYEvsfIGK_Fd6uT04fzkeDT1wNV4-Swuorr
-ymZQxnvHbUAp91NJEa3EtWTuBxNeoqV0cw97WkAYn95pgjH4ZVhBdczclS-EStFJyYOHtTRAs1A_
-8i36GiuUPHn3KolkRF2GvtZfwNj5AYfcUKhqULJ-T_is2KKYnGwQ2iaItX2852o4zlzkMXFMkt5C
-qbsDmrU7F5zxn4HG6yShW5sIXgAcS9cyIs8IFgHtkYauDJlKZWynhzqibh3-bzPyfFmreTHxQ-Av
-Lgp5sAtf1B9_1feVyE78bmQ3IMtxE-YkV8RYPDJzKw0nIdjce7j89azNq_as5JMfCCHSlYcKRs8O
-Nrh8gXYun28iUL_kwEUWK0WohPgwQBb46_Hkc6a0aSYbuFA_7qgprPB9wmAlHtuqnCAb2vk8GT-h
-07DB6yPGgzE-OgXUzLIWHXVzPO6SjOg3ifYpCRigOsNqkV1paBBOzje7dn2RnpgaRJS3zupTMnqF
-g5N9qCgubxRlII626-Dc_i5X1OAWPzJK8UZPuxRAg3YVJNHluB3O0Q2Uo14RkO3a2Tn_Ce9XoTUJ
-Jqi_qZWytIB9sHMNM7KvcRxGedLqd_230O3zV7rTa4Up0BFoMyHmnf2SZu96x_Yz_n_AWhiaALvE
-ON_nTxPEOHfEfrNzo7pCwIaI5gM6eu_S24aZTf4L-5tekqH7l1PEbKr2QP4XfTZBN4FgNExgGpzG
-the3zv4k7hJeWe7GbtMmnZXIQUJkZVTHBwqvHkqtN9cBWpihCNVmI3zKq6Bsy6Us0SDZ686kpeVS
-s9eyrzj6uLPE65mQxCpoMt6G4HSjzMqA3HOX_7ixBBhtdVi5-X7NeTigr-uaZg67yP3cSikfFf9w
-dyFuMjg29jtlaTNzOov8HFrcLq01N3fpwDkSU_2TmLndU-FMat78CMCLW5QuS1KF3hC9T8wzKWS_
-WHK2oMA3SqWyqnj_cE_T4Ql_VKL3nkvf_bzTvLso_BWodUw2A-eO-1qjtCHp3nnTdSVH06E3_eRH
-BuKWEt0MLyNpm88OD0tgOC3fn7casioynQLoFatta5nlQfj4nsAXj2bD6CrohtDhjOKXqHxDU6s7
-adtNoBGyEK5FKy3HtHMC7KXsK_6wbYUluz93nCNMok696HIHojNUydGFqfr2HluQTi0S3uHnD_pS
--QM8DbsFi8oIztn6Er4CFFJQ-tUuDyX6ahfY5gWLqCgRM7RzrkoHY7b4vkHxZTBLZlPGWfRtG0vc
-GTSqIRNI2Z_Zte5-wW7T9vfFVBsArF0SJWOrlUqf7fGN1_2H9B9aIpLEMaHF7EEp1OP6_SNnfuhB
-K31EFy0VW0eGnLezpd3HT540kznub7h_m6phZaqeZJxsle9jHEOS7qDc3T6s1hZ7DLK2Ej5RFuq8
-5LA9Cj5VrdejKMZKZJwmyWylLe224RyY4gDa0MB_lDAeC-YFdY2ClymYRJmclFFSWf7X1j5beQve
-xGbsXJaWZcJpahpFu4RR-kOOyZBLPsdiyOZ7PGXz83l35NiXabmRapgjve1t7NFSuRluafihc0Lg
-GKoz_-3YAFJmh4Z3bcCsz1WhCUYqzWyDsnZiD7sMQT7Oyje7RqzoxBZs5Ke1_0jtpgFrc7BcqHG7
-WpwJr6hg53o3BpWcUEopBomhbdxiDSLxZmDrePy9LDC7YNk_7-gVKIc7dZDMgw6kSRR330p0
\ No newline at end of file
+kzJMxgphAoBxJz1_vYjxx-V87fahDQdYUqBIyWhZp8ojXdNpmB-96T9CvgJScJynbLcqw2Cj2CYx
+wd97vFOYhlyz5zK3tSyIuydOkVGJsJ1S4PviTtjhiJvNourJNDHgtas1Y1y2fQ5_8aVxj-s4W72N
+MNYhkeTinaQx_d_5hkBPABJlgCxKLnmxHo2jAJktnZYa5t5h48m7KiUx_RVEkQVtEvux-7vgXaC4
+ymTXj6zI9XoMTVxM0OAl4y7kBiUoOUaxS4tVKV34RJYNNqBjiUTQa_ag-KeUacRABk1ozfwzpvE5
+Sjz8WCy0L-LtCQnapkhKLt04ndCZtw8LDJ-Zz0ZgR2PVIPpTgs9VnVuOi5jf4LzTrtUatvOWkKB9
+drXKzp6cNXnZ0jkD3vV1BzqzhynKnZR2o_ilZv5CTTdpGUt906N_DwZuX6LfcV_7yvjX42bTfeIR
+ycPtodFPXlqqn9VUyh5nOauJlnOHAQmSDzjMEgjy17nQX3Ad7s4BfvujzUl-d0MqB_HCKbaW32UT
+xcY-0JfI1Y-2IdYfIkUdhVmxop6sSg0jAobWzgCRoRQkP3a2iIlKdfMyskshoWKIDVtlr-3fkDEb
+x_b_o1rRoUfzUzxEdphaUAq80Sc0i77ZLT3KF9vJOhyU_pBnApYFxVk7Hkk3VRxJKS7jyL4H7k1x
+2m5-2G8fB9XbYZT82xmAquNx4oBdpwj3_ncGF9YRF94K6NZgqemT5iWhpXMoelSU1blASgT3qlTm
+B6YgbD5owExNHwRVd8KeRsYrOnBWUiktsIhXFhNZmDUNWMFGQ2KxEcOt1tJwsQDehJFgY_l1JQ0d
+643wJ7rTJkGkYX309cydRQUX4Z0ckSQS9LhMd9stxF5XOHlvHdbW0pXNS7SaLbzKCVldUgncvI6z
+KWkwrWbftrZK2RT1UZKNngQDMGOk9OhbHAs7YzhFNFARZoRNobIv5tZVDomy-YgJb9-mD1UTkRBL
+WXOyoryDlgKrgFsgHclGDI1UFO5N-JfebPKxbP505f4924hxF2r8bspvVW8ZtHQo_SJmhauOX8n_
+eN_LK43LB9k53WAHZ_utvs0s6wGf7I73oj_N7DIFaHTDSm_MhDsFDLVG_wUzCpZ5FP2uL3nnqMkF
+Ob-l1fywfmfOmrz1BY6g4sRPPeWXuclYTnRnDRu5VQyc7_aBEVkyt3zw0JEex0vJNFUJl3pYjS55
+GplAB6p7VbS9ceZEtc5Z3qFIVHEzKWZxT190E23t_LlMuEoQ1zaqdHynNaMs61-q_A2aHRiTqlRm
+7FahVB3RX4AVLl23mu4u3A9ZDXc40nzjs9mwOVsuKlPvQ2rteDUG1njr2R1_V_MyQuoJjdfbIkPG
+4eF0QzlSMdbkeprdQxSfV5YT-yPpkBxSsCMMM43sKm4Hy7_CUdvp4Iayrp3vtK3oYMuCGi6qTadz
+KzxfTf8meKan3eMZW4RLByyniH5nQnX_KGfBly05AmFyVH_j0fyOg-48kDhtEKeqmDnP4C01jOID
+Ip_AKaB6e0GwsHzVTLZOklHwu_qzsaTzchBOG_dJJju7bxY7qv78Pa92wZIP311gSCVbc-gxxbsR
+qI555twmYEoasFm4xz10OYDOkvM1E1Rtxu3ymRLZpe6AoyFBVzEW7Dncdw7O98dKcgrp8ZlQ_8Wg
+5zZH0Cic7xnIZ0bNZyQXw56CSUiXVWuwVY3e0djXP3F-FO5gP8VTxbpW4C0t6McXAOlvSEfFKxN7
+u6OBeOKwjrtHaJk2ghF8MUcpDXanhbAgHez9larGlscCkgvoRLNaRH9GIdSVgY3HtNhJRaJIq01S
+OGeBjC5J4o-nTrqRFkwyDAYcPL373eYX1dBFFVHR-4q50H9m_zMxZHXETafxzV4DT3Qi8Sxh3uaS
+ZX7mRaNaOE0uC1n87_IZ9WhrwIQaZng2lnd9yZ-4rx8fB8WA8KQzifzvHAcMb_HV10JWGaz5A2Rm
+EXDsfexQC6CqYg5rdzzlNWDPNlHy5ubyz7fRXZ99uIwBY9aJcvCXCiEXJkC6utj3NcXQrJmk
\ No newline at end of file
diff --git a/src/main/resources/clds/aaf/org.onap.clamp.p12 b/src/main/resources/clds/aaf/org.onap.clamp.p12
index b3c69ef..dc24567 100644
--- a/src/main/resources/clds/aaf/org.onap.clamp.p12
+++ b/src/main/resources/clds/aaf/org.onap.clamp.p12
Binary files differ
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
index 0000000..70bb844
--- /dev/null
+++ b/src/main/resources/clds/aaf/ssl/ca-certs.pem
@@ -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-----
diff --git a/src/main/resources/clds/aaf/ssl/clamp.key b/src/main/resources/clds/aaf/ssl/clamp.key
index fcf68bf..af847d5 100644
--- a/src/main/resources/clds/aaf/ssl/clamp.key
+++ b/src/main/resources/clds/aaf/ssl/clamp.key
@@ -1,32 +1,32 @@
 Bag Attributes
     friendlyName: clamp@clamp.onap.org
-    localKeyID: 54 69 6D 65 20 31 35 35 33 37 38 37 35 31 38 33 30 33 
+    localKeyID: 54 69 6D 65 20 31 35 37 31 30 36 38 34 31 31 38 30 37 
 Key Attributes: <No Attributes>
 -----BEGIN PRIVATE KEY-----
-MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC4nLg3HAYzgJTr
-C9WdZypwz0UzcQcCFXwEUUA8StwtMwx0OahJiEJRdFY6fmydq4MzFgZ6HQt/M7dY
-0l8phLHpGTVdrFMgW8yZer8bwNcSSiPVRy8j0s8lBHdR+KofG+yA19xg6lCYDX78
-yfeA2jZ52FhVWavyGHS4whWlw8T1EGbZZqXZCFgc7zHjUXuG1mo2ropppJkouf9g
-WEH2Vx16YiosgZzftRW1N3KJ7JozcEtS/j4w/pNyS7HOQDWWGTDk6Us4bt8Zg4gd
-1FeID0FmnEEGRKP+XscsGNwMd06MBsCAOutHkpFtS+UT3cr8xIKewL7uPq24X3ke
-W148togFAgMBAAECggEATncV+R5pKFS7dteV2IvzxvTh1cZxkxoslu0t3zJ2OKPc
-5D1pYK+QeGx5Be2cHru6TOlMoXRc4ZjKke8AUXY74/Y573GB91vtL0KznYkuIHDw
-oALcb153eqVWTbniHMzSjcSxv2N4E9iQo8L39oVI6CrjCIvPgFuSqMCdUNJPkVTI
-4nsarTfLK4fzi7IbWzi9JdE1QRNIxcCMcYJRnLZMdneMLBleR0UL82Xc2KOy5SEt
-zyKYCQ8zS247FKolnOrDkhKxXI5fzdDpRK5AQSsAykUPWlYq7pzKjY/dU9rMRohx
-YSltFjPZ3sQ3UKqqIqhZS+GoVuZoc925WyhViPsqtQKBgQDsL4LFfPWN8nnsusQp
-VR3T7HvvwXuEVAydlaJMwZU0cRYN+L7RHHjDoXZZrNJDIDzNoWnBLKRGx3mtLmgJ
-9Pa6SxN6Oc8oo6jzv2D59g1PVjNOMOYTCTb/2Xum4LMLaeeF57HkWxzeA3Ws47++
-gXwzQpbE90tp1Ys4uXD3JoivvwKBgQDIGZTwLGhLSegdAjG83WEgmdtzT1kjvx0Q
-A8IR2jkgkTJHdKiuslJ8Z3/XufHEwWMWwfs1XLwxYluoo1y9eNvNeHZXjLqjL62c
-I3034F9IvvTUqFcxam2WdoklXbAiSvLUo/9exPgOuVxok6Zv1imRgGb/vYV9vyG7
-86MRuQu5OwKBgQC9E3fcA6JMpY3H3uhEsngzfMDm+fyYvfRvfyezzNFWbyWZv8V6
-gBGJg0vMlFarGDa044BW/hbw9qXI5zqwpeOS1aFdGsRlo0cRAuduk/Spy7c85FZ7
-bMgT4BZmTMHo5DpNb2NxDSO59AkThCuvJde47ZjnS5WavzI6EfKGWNnZ3wKBgQCF
-QiwjCp/mS/DtqLFxAsmVSYGROG231aXILYiIFRloa+ndFn7j4NP4D4FfLHErRFL2
-K/ddIUYfaU57b1fqwts26ht90LXWyYDH9AaHOMCcFLe+C+INgcA7rPNG1C7hl6JC
-JHmEJo7AV4eICZSU9D44rRdrB08oYCpaHjYiLmb1UwKBgQCWCDJ4p2DrNL9hzj3K
-kzvM5saXrfI4aVBXVt9rw9s1d/WG8JOpnmHcnLPb6Tj59rDktrLCLv0sVstMwNVJ
-sOO+qsgn1VoZalcVhhjdONm5YvhJQgz0F7Y2xkr6g/AuMPz2YigGfm7fe/z7rc+L
-q9Ua2HmUS8DDBy7W89MNZJNkDQ==
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCsuvJ9pjBqjrxI
++5TG2PTVRUob9Cx1uO3cUMzR01mxNodsSRdI3sq6Q2Nr+PenoT7edo8ujru8G79H
+BfyUWBkNe3hJikCXzDV62cwavWtGjWIsOZHczJfj8ZrtObJ/uRpeGmbosY38zUwN
+cGzT1vm2K67MPe2BazTI4JLxyGcJ0bZEZ0XGBMOup3Hqo2QOy7BaQMOTs20Ww3aB
+64h7KAqaqNnblqUOtkLCUBdp6Lxa9oBXqS4Fg+C1eZqzuixLQgmWZs2ED+wl4FZD
+DaIkN4gw4YTXhpxr82gauW3ro2sAYrJX63FqIzaj0rj/vqxYSy7fjzbsE1VPBxCH
+yUuaHxUTAgMBAAECggEABaPlHy06D4CxrUBpz0RuWjh0/wyuFvn+6l7JEWDxYNQD
+AAoy9HIx9HsW2AO9MoAVaXY9nquSfcX6LPuJD98AkmwhtWUKTuqgJG7QN19QDXG4
+bvFCTg9wNkVBZdWoens03TXHfnmtxT9+6EFvjEtMxCIRByJOixdRFe4fXj3I/40H
+p6KjzscPhRqmapB5U/lWwteONoq1A4VBoqj1Qbe1NjmNGMhhXqj/d9f6B0DPGqIA
+nIDubb1B3YNdbxE8LbY1YiQZEtjjA2uIyW0tRjZyhVVtNwSm814fyjVPp2oRpK43
+2OVBLbHZlxY5sFZwU71lWSyEAHhOL5yY1HORKUyCIQKBgQDwR8POilccu1fczDX7
+7jTHvknrtc5Pm689hOz+iZz8oib5MNHM57YMQJNauAHcUUDc8PEBrU44kJda7zVU
+8jVgeV0kvZcmDM4AGrmbBSGLhcmyqJC4wKF20K3rVFFo5exlpTDU7dwnPkMbHeGQ
+LmPzk+5BKQa81Mq+cObdJs/LpwKBgQC4B9kf+cex77OluKN9mz8D3MOEWycztDpd
+XVeM+RV4cjIMaQl91GovtQDwdy9TbKCsq+sFvqWsmQNkUlDGP2c0y4PFnJt7ahzW
+wqZ8bZgNcTNE+KqHUMEOcDGRVoQf65XRWZhjq0mJyCewPMOrdFgHTzva2QYOrZTK
+jBIWx84otQKBgQCDjidM7D1pw8EFaOGdv/wx6KO8ZFxDBfBadG71pg7H21gPU4Vq
+9OqdprWHE/wgznP/BARQcLzFB5V2+kVu7vX+jjRLK2qYMKaRNBCvKY4GQAgAw34J
+SZ6d2P+AOzgfgNN/i4RC8MB61AIV1LRtJpkfAb2O+5Fuzer7fgFI0DkxPQKBgAdq
+gYxxU2PPRg0KmMQKCosMTXC6/6RsweFbTpjmvL/C0lN/tBs3ASR1Bdmq4+RXv03W
+C72KhkCjVeioDItAqNcO0HuZKQbbKthYtb7T58m64xcHck/LqEv9p3G069QheUMb
+ejGiCG+d+kN232e8Y4O/5KiYEE9tHU7gQCZc3Oj1AoGBAI2QyoAJlM0jREsEft7c
+L+5kcV+VulyMYEFycSy6KziUKxVh+VMk5Eo6UhXo6m4x37tg/D8uK/tkeJdWw00N
+dXLsUcDEacZyF8UfRsrscmiBURu0+9S/5+ncSX6s18HHGL7n2io+PX/ie2neO7q1
+fj50Aj03dg1TrgMTx2g6e85Y
 -----END PRIVATE KEY-----
diff --git a/src/main/resources/clds/aaf/ssl/clamp.pem b/src/main/resources/clds/aaf/ssl/clamp.pem
index ccb0097..22f4541 100644
--- a/src/main/resources/clds/aaf/ssl/clamp.pem
+++ b/src/main/resources/clds/aaf/ssl/clamp.pem
@@ -1,64 +1,32 @@
 Bag Attributes
     friendlyName: clamp@clamp.onap.org
-    localKeyID: 54 69 6D 65 20 31 35 35 33 37 38 37 35 31 38 33 30 33 
-subject=CN = clamp, emailAddress = , OU = clamp@clamp.onap.org, OU = OSAAF, O = ONAP, C = US
+    localKeyID: 54 69 6D 65 20 31 35 37 31 30 36 38 34 31 31 38 30 37 
+subject=CN = clamp, emailAddress = mark.d.manager@people.osaaf.com, OU = clamp@clamp.onap.org:DEV, OU = OSAAF, O = ONAP, C = US
 
 issuer=C = US, O = ONAP, OU = OSAAF, CN = intermediateCA_9
 
 -----BEGIN CERTIFICATE-----
-MIIEKDCCAxCgAwIBAgIIWY+5kgf/UG4wDQYJKoZIhvcNAQELBQAwRzELMAkGA1UE
+MIIETDCCAzSgAwIBAgIIGF6ukzqwlGIwDQYJKoZIhvcNAQELBQAwRzELMAkGA1UE
 BhMCVVMxDTALBgNVBAoMBE9OQVAxDjAMBgNVBAsMBU9TQUFGMRkwFwYDVQQDDBBp
-bnRlcm1lZGlhdGVDQV85MB4XDTE5MDMyMTE2MTY1OFoXDTIwMDMyMTE2MTY1OFow
-bDEOMAwGA1UEAwwFY2xhbXAxDzANBgkqhkiG9w0BCQEWADEdMBsGA1UECwwUY2xh
-bXBAY2xhbXAub25hcC5vcmcxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQ
-MQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALic
-uDccBjOAlOsL1Z1nKnDPRTNxBwIVfARRQDxK3C0zDHQ5qEmIQlF0Vjp+bJ2rgzMW
-BnodC38zt1jSXymEsekZNV2sUyBbzJl6vxvA1xJKI9VHLyPSzyUEd1H4qh8b7IDX
-3GDqUJgNfvzJ94DaNnnYWFVZq/IYdLjCFaXDxPUQZtlmpdkIWBzvMeNRe4bWajau
-immkmSi5/2BYQfZXHXpiKiyBnN+1FbU3consmjNwS1L+PjD+k3JLsc5ANZYZMOTp
-Szhu3xmDiB3UV4gPQWacQQZEo/5exywY3Ax3TowGwIA660eSkW1L5RPdyvzEgp7A
-vu4+rbhfeR5bXjy2iAUCAwEAAaOB8jCB7zAJBgNVHRMEAjAAMA4GA1UdDwEB/wQE
-AwIF4DAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwVAYDVR0jBE0w
-S4AUgfeZWxC5yIze81Je6k5poEM+rN2hMKQuMCwxDjAMBgNVBAsMBU9TQUFGMQ0w
-CwYDVQQKDARPTkFQMQswCQYDVQQGEwJVU4IBBzAdBgNVHQ4EFgQU+GZ6wmWDPrmq
-Wd1/NtMYiCQ8Dg4wOwYDVR0RBDQwMoIFY2xhbXCCHWNsYW1wLmFwaS5zaW1wbGVk
-ZW1vLm9uYXAub3JnggpjbGFtcC5vbmFwMA0GCSqGSIb3DQEBCwUAA4IBAQCFZdhB
-U6xm6l0vj4q89onLx4opTPvwGNRc0n402lifkPYXseFtphZSHIf2Sg0mFTH4KHb4
-FdMyBzq1+f5WLU+xRC1nT4eGJ0FvRR6204/fGVrzJTS67phnRnxr2WZzLPW0wPJe
-K8SzN6tkUgE7/a/s0T/htE/blDxWh75+tA2jQlgj1Ri0y9A1J8wx++REKjGlHjFN
-53aiipsB+wC/oEMzYL4qEPiYPI0Lr3Lsay1F7f6cvDT4+EYzBLMFuwCvpcnHgSMS
-4fFj2ROmUG2+CC23B88Q0WNxjLPq/CrmHZZBsqwruPJ0cSuCQxfshTQ6uZhcjtu8
-6TRYkIcL0x9r/AHP
------END CERTIFICATE-----
-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=
+bnRlcm1lZGlhdGVDQV85MB4XDTE5MTAxNDE1NTM0MVoXDTIwMTAxNDE1NTM0MVow
+gY8xDjAMBgNVBAMMBWNsYW1wMS4wLAYJKoZIhvcNAQkBFh9tYXJrLmQubWFuYWdl
+ckBwZW9wbGUub3NhYWYuY29tMSEwHwYDVQQLDBhjbGFtcEBjbGFtcC5vbmFwLm9y
+ZzpERVYxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQMQswCQYDVQQGEwJV
+UzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKy68n2mMGqOvEj7lMbY
+9NVFShv0LHW47dxQzNHTWbE2h2xJF0jeyrpDY2v496ehPt52jy6Ou7wbv0cF/JRY
+GQ17eEmKQJfMNXrZzBq9a0aNYiw5kdzMl+Pxmu05sn+5Gl4aZuixjfzNTA1wbNPW
++bYrrsw97YFrNMjgkvHIZwnRtkRnRcYEw66nceqjZA7LsFpAw5OzbRbDdoHriHso
+Cpqo2duWpQ62QsJQF2novFr2gFepLgWD4LV5mrO6LEtCCZZmzYQP7CXgVkMNoiQ3
+iDDhhNeGnGvzaBq5beujawBislfrcWojNqPSuP++rFhLLt+PNuwTVU8HEIfJS5of
+FRMCAwEAAaOB8jCB7zAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIF4DAgBgNVHSUB
+Af8EFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwVAYDVR0jBE0wS4AUgfeZWxC5yIze
+81Je6k5poEM+rN2hMKQuMCwxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQ
+MQswCQYDVQQGEwJVU4IBBzAdBgNVHQ4EFgQUicMoQoxguo6qFb7YZ2gZn8X0BV4w
+OwYDVR0RBDQwMoIFY2xhbXCCHWNsYW1wLmFwaS5zaW1wbGVkZW1vLm9uYXAub3Jn
+ggpjbGFtcC5vbmFwMA0GCSqGSIb3DQEBCwUAA4IBAQCMDZrqzL/orHH3WoLKj/JJ
++QOt89CTYJqX5rS2TbQgX/JdjXJzJsmY21dTHxg0+AdRmAUATHBFAOg/nLEfDUOh
+NX0+OshoaTYjrI2ZH4j24UsoXzGffpjqPbLMZJ1uzxy4qTTvzeJJM1NsfKD4Er0B
+KDgN66pzywJrxOXkTQZpmkgGeB9FwmBoLFKP2XJjXXT9c9Wol8ttrSqu/sy5e6/Y
+SZLco8lXx0isxGgG5PfF9WSuikFRlC5LCmcSn9EfxQIOeGjzJQpuB8yqN/ojE8wY
+ZBhaUM/+NETQNzsh4dZxq7ErSknND60NYit8rz9lWDDrNNKVF+8iFpoTb17V8e3C
 -----END CERTIFICATE-----
diff --git a/src/main/resources/clds/camel/routes/dcae-flows.xml b/src/main/resources/clds/camel/routes/dcae-flows.xml
index 4693581..fb3bc90 100644
--- a/src/main/resources/clds/camel/routes/dcae-flows.xml
+++ b/src/main/resources/clds/camel/routes/dcae-flows.xml
@@ -177,6 +177,40 @@
 				<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
index bc79fc2..0000000
--- a/src/main/resources/clds/camel/routes/flexible-flow.xml
+++ /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
index a66694c..0000000
--- a/src/test/java/org/onap/clamp/clds/client/DcaeInventoryServicesTest.java
+++ /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/CldsServiceItCase.java b/src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java
index 8745cc5..072d577 100644
--- a/src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java
+++ b/src/test/java/org/onap/clamp/clds/it/CldsServiceItCase.java
@@ -23,10 +23,13 @@
 
 package org.onap.clamp.clds.it;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -35,6 +38,7 @@
 import java.util.Properties;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.NotAuthorizedException;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -44,7 +48,6 @@
 import org.onap.clamp.clds.model.CldsInfo;
 import org.onap.clamp.clds.service.CldsService;
 import org.onap.clamp.clds.util.LoggingUtils;
-import org.onap.clamp.clds.util.ResourceFileUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
@@ -66,15 +69,12 @@
 
     @Autowired
     private CldsService cldsService;
-    private String bpmnText;
-    private String imageText;
-    private String bpmnPropText;
-    private String docText;
 
-    private Authentication authentication;
-    private List<GrantedAuthority> authList = new LinkedList<GrantedAuthority>();
     private LoggingUtils util;
-
+    private SecurityContext securityContext = mock(SecurityContext.class);
+    private Authentication auth = Mockito.mock(Authentication.class);
+    private UserDetails userDetails = Mockito.mock(UserDetails.class);
+    private List<GrantedAuthority> authorityList = new LinkedList<GrantedAuthority>();
     /**
      * Setup the variable before the tests execution.
      *
@@ -82,20 +82,6 @@
      */
     @Before
     public void setupBefore() throws IOException {
-        bpmnText = ResourceFileUtil.getResourceAsString("example/model-properties/tca_new/tca-template.xml");
-        imageText = ResourceFileUtil.getResourceAsString("example/model-properties/tca_new/tca-img.xml");
-        bpmnPropText = ResourceFileUtil.getResourceAsString("example/model-properties/tca_new/model-properties.json");
-        docText = ResourceFileUtil.getResourceAsString("example/model-properties/tca_new/doc-text.yaml");
-
-        authList.add(new SimpleGrantedAuthority("permission-type-cl-manage|dev|*"));
-        authList.add(new SimpleGrantedAuthority("permission-type-cl|dev|read"));
-        authList.add(new SimpleGrantedAuthority("permission-type-cl|dev|update"));
-        authList.add(new SimpleGrantedAuthority("permission-type-template|dev|read"));
-        authList.add(new SimpleGrantedAuthority("permission-type-template|dev|update"));
-        authList.add(new SimpleGrantedAuthority("permission-type-filter-vf|dev|*"));
-        authList.add(new SimpleGrantedAuthority("permission-type-cl-event|dev|*"));
-        authentication = new UsernamePasswordAuthenticationToken(new User("admin", "", authList), "", authList);
-
         util = Mockito.mock(LoggingUtils.class);
         Mockito.doNothing().when(util).entering(Matchers.any(HttpServletRequest.class), Matchers.any(String.class));
         cldsService.setLoggingUtil(util);
@@ -104,12 +90,9 @@
 
     @Test
     public void testCldsInfoNotAuthorized() {
-        SecurityContext securityContext = Mockito.mock(SecurityContext.class);
-        Authentication localAuth = Mockito.mock(Authentication.class);
-        UserDetails userDetails = Mockito.mock(UserDetails.class);
         Mockito.when(userDetails.getUsername()).thenReturn("admin");
-        Mockito.when(securityContext.getAuthentication()).thenReturn(localAuth);
-        Mockito.when(localAuth.getPrincipal()).thenReturn(userDetails);
+        Mockito.when(securityContext.getAuthentication()).thenReturn(auth);
+        Mockito.when(auth.getPrincipal()).thenReturn(userDetails);
 
         cldsService.setSecurityContext(securityContext);
         CldsInfo cldsInfo = cldsService.getCldsInfo();
@@ -121,7 +104,17 @@
 
     @Test
     public void testCldsInfoAuthorized() throws Exception {
-        SecurityContext securityContext = Mockito.mock(SecurityContext.class);
+        Authentication authentication;
+        List<GrantedAuthority> authList = new LinkedList<GrantedAuthority>();
+        authList.add(new SimpleGrantedAuthority("permission-type-cl-manage|dev|*"));
+        authList.add(new SimpleGrantedAuthority("permission-type-cl|dev|read"));
+        authList.add(new SimpleGrantedAuthority("permission-type-cl|dev|update"));
+        authList.add(new SimpleGrantedAuthority("permission-type-template|dev|read"));
+        authList.add(new SimpleGrantedAuthority("permission-type-template|dev|update"));
+        authList.add(new SimpleGrantedAuthority("permission-type-filter-vf|dev|*"));
+        authList.add(new SimpleGrantedAuthority("permission-type-cl-event|dev|*"));
+        authentication = new UsernamePasswordAuthenticationToken(new User("admin", "", authList), "", authList);
+
         Mockito.when(securityContext.getAuthentication()).thenReturn(authentication);
 
         cldsService.setSecurityContext(securityContext);
@@ -138,4 +131,110 @@
         assertEquals(cldsInfo.getCldsVersion(), prop.getProperty("clds.version"));
         assertEquals(cldsInfo.getUserName(), "admin");
     }
+
+    @Test(expected = NotAuthorizedException.class)
+    public void isAuthorizedForVfTestNotAuthorized1() throws Exception {
+        when(userDetails.getUsername()).thenReturn("testName");
+        when(auth.getPrincipal()).thenReturn(userDetails);
+        when(securityContext.getAuthentication()).thenReturn(auth);
+        cldsService.setSecurityContext(securityContext);
+        boolean res = cldsService.isAuthorizedForVf("testId");
+        assertThat(res).isTrue();
+    }
+
+    @Test(expected = NotAuthorizedException.class)
+    public void isAuthorizedForVfTestNotAuthorized2() throws Exception {
+        when(userDetails.getUsername()).thenReturn("testName");
+        when(auth.getPrincipal()).thenReturn(userDetails);
+        authorityList.add(new SimpleGrantedAuthority("permission-type-filter-vf|prod|*"));
+        when((List<GrantedAuthority>)auth.getAuthorities()).thenReturn(authorityList);
+        when(securityContext.getAuthentication()).thenReturn(auth);
+        cldsService.setSecurityContext(securityContext);
+        boolean res = cldsService.isAuthorizedForVf("testId");
+        assertThat(res).isTrue();
+    }
+
+    @Test(expected = NotAuthorizedException.class)
+    public void isAuthorizedForVfTestNotAuthorized3() throws Exception {
+        when(userDetails.getUsername()).thenReturn("testName");
+        when(auth.getPrincipal()).thenReturn(userDetails);
+        authorityList.add(new SimpleGrantedAuthority("permission-type-filter-vf|dev|testId2"));
+        when((List<GrantedAuthority>)auth.getAuthorities()).thenReturn(authorityList);
+        when(securityContext.getAuthentication()).thenReturn(auth);
+        cldsService.setSecurityContext(securityContext);
+        boolean res = cldsService.isAuthorizedForVf("testId");
+        assertThat(res).isTrue();
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void isAuthorizedForVfTestNotAuthorized4() throws Exception {
+        when(userDetails.getUsername()).thenReturn("testName");
+        when(auth.getPrincipal()).thenReturn(userDetails);
+        when(securityContext.getAuthentication()).thenReturn(null);
+        cldsService.setSecurityContext(securityContext);
+        boolean res = cldsService.isAuthorizedForVf("testId");
+        assertThat(res).isTrue();
+    }
+
+    @Test
+    public void isAuthorizedForVfTest1() throws Exception {
+        when(userDetails.getUsername()).thenReturn("testName");
+        when(auth.getPrincipal()).thenReturn(userDetails);
+        authorityList.add(new SimpleGrantedAuthority("permission-type-filter-vf|*|*"));
+        when((List<GrantedAuthority>)auth.getAuthorities()).thenReturn(authorityList);
+        when(securityContext.getAuthentication()).thenReturn(auth);
+
+        cldsService.setSecurityContext(securityContext);
+        boolean res = cldsService.isAuthorizedForVf("testId");
+        assertThat(res).isTrue();
+    }
+
+    @Test
+    public void isAuthorizedForVfTest2() throws Exception {
+        when(userDetails.getUsername()).thenReturn("testName");
+        when(auth.getPrincipal()).thenReturn(userDetails);
+        authorityList.add(new SimpleGrantedAuthority("permission-type-filter-vf|dev|*"));
+        when((List<GrantedAuthority>)auth.getAuthorities()).thenReturn(authorityList);
+        when(securityContext.getAuthentication()).thenReturn(auth);
+
+        cldsService.setSecurityContext(securityContext);
+        boolean res = cldsService.isAuthorizedForVf("testId");
+        assertThat(res).isTrue();
+    }
+
+    @Test
+    public void isAuthorizedForVfTest3() throws Exception {
+        when(userDetails.getUsername()).thenReturn("testName");
+        when(auth.getPrincipal()).thenReturn(userDetails);
+        authorityList.add(new SimpleGrantedAuthority("permission-type-filter-vf|dev|testId"));
+        when((List<GrantedAuthority>)auth.getAuthorities()).thenReturn(authorityList);
+        when(securityContext.getAuthentication()).thenReturn(auth);
+
+        cldsService.setSecurityContext(securityContext);
+        boolean res = cldsService.isAuthorizedForVf("testId");
+        assertThat(res).isTrue();
+    }
+
+    @Test
+    public void isAuthorizedForVfTest4() throws Exception {
+        when(userDetails.getUsername()).thenReturn("testName");
+        when(auth.getPrincipal()).thenReturn(userDetails);
+        authorityList.add(new SimpleGrantedAuthority("permission-type-filter-vf|*|testId"));
+        when((List<GrantedAuthority>)auth.getAuthorities()).thenReturn(authorityList);
+        when(securityContext.getAuthentication()).thenReturn(auth);
+
+        cldsService.setSecurityContext(securityContext);
+        boolean res = cldsService.isAuthorizedForVf("testId");
+        assertThat(res).isTrue();
+    }
+
+    @Test
+    public void getUserIdTest() throws Exception {
+        when(userDetails.getUsername()).thenReturn("testName");
+        when(auth.getPrincipal()).thenReturn(userDetails);
+        when(securityContext.getAuthentication()).thenReturn(auth);
+
+        cldsService.setSecurityContext(securityContext);
+        assertThat(cldsService.getUserId()).isEqualTo("testName");
+    }
 }
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
index beb0750..0000000
--- a/src/test/java/org/onap/clamp/clds/it/HttpConnectionManagerItCase.java
+++ /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");
-    }
-}
diff --git a/src/test/java/org/onap/clamp/clds/model/jsontype/JsonTypeDescriptorTest.java b/src/test/java/org/onap/clamp/clds/model/jsontype/JsonTypeDescriptorTest.java
new file mode 100644
index 0000000..560f54c
--- /dev/null
+++ b/src/test/java/org/onap/clamp/clds/model/jsontype/JsonTypeDescriptorTest.java
@@ -0,0 +1,96 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 Samsung. 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.model.jsontype;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.google.gson.JsonObject;
+
+import org.hibernate.HibernateException;
+import org.junit.Test;
+import org.onap.clamp.dao.model.jsontype.JsonTypeDescriptor;
+
+public class JsonTypeDescriptorTest {
+
+    private JsonTypeDescriptor descriptor = new JsonTypeDescriptor();
+
+    @Test
+    public void testFromString() {
+        JsonObject object = new JsonObject();
+        object.addProperty("one","oneValue");
+        JsonObject child = new JsonObject();
+        child.addProperty("two","twoValue");
+        object.add("child",child);
+
+        JsonObject jsonResult = descriptor.fromString("{\"one\":\"oneValue\",\"child\":{\"two\":\"twoValue\"}}");
+
+        assertThat(jsonResult).isEqualTo(object);
+    }
+
+    @Test
+    public void testUnwrap() {
+        JsonObject res1 = descriptor.unwrap(null, null, null);
+        assertThat(res1).isNull();
+
+        JsonObject object = new JsonObject();
+        object.addProperty("one","oneValue");
+        JsonObject child = new JsonObject();
+        child.addProperty("two","twoValue");
+        object.add("child",child);
+        String res2 = descriptor.unwrap(object, String.class, null);
+        assertThat(res2.replace("\n", "").replace(" ", ""))
+                .isEqualTo("{\"one\":\"oneValue\",\"child\":{\"two\":\"twoValue\"}}");
+
+        Object res3 = descriptor.unwrap(object, JsonObject.class, null);
+        String res3Str = ((String) res3).replace(" ", "").replace("\\n", "").replace("\\", "")
+                .replace("\"{", "{").replace("}\"", "}");
+        assertThat(res3Str).isEqualTo("{\"one\":\"oneValue\",\"child\":{\"two\":\"twoValue\"}}");
+    }
+
+    @Test(expected = HibernateException.class)
+    public void testUnwrapExpectationThrown() {
+        JsonObject object = new JsonObject();
+        object.addProperty("one","oneValue");
+
+        descriptor.unwrap(object, Integer.class, null);
+    }
+
+    @Test
+    public void testWrap() {
+        JsonObject res1 = descriptor.wrap(null, null);
+        assertThat(res1).isNull();
+
+        JsonObject object = new JsonObject();
+        object.addProperty("one","oneValue");
+        JsonObject child = new JsonObject();
+        child.addProperty("two","twoValue");
+        object.add("child",child);
+        JsonObject res2 = descriptor.wrap("{\"one\":\"oneValue\",\"child\":{\"two\":\"twoValue\"}}", null);
+        assertThat(res2).isEqualTo(object);
+    }
+
+    @Test(expected = HibernateException.class)
+    public void testWrapExpectationThrown() {
+        descriptor.wrap(1, null);
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java b/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java
index 00c9b7d..18f77cb 100644
--- a/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java
+++ b/src/test/java/org/onap/clamp/clds/tosca/ToscaYamlToJsonConvertorTest.java
@@ -45,7 +45,8 @@
         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 @@
         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 @@
         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/java/org/onap/clamp/loop/DcaeComponentTest.java b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java
index 0a3c1e1..557fdce 100644
--- a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java
+++ b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java
@@ -31,9 +31,13 @@
 import java.io.IOException;
 import java.util.HashSet;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
 import org.junit.Test;
+import org.mockito.Mockito;
 import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse;
 import org.onap.clamp.loop.components.external.DcaeComponent;
+import org.onap.clamp.loop.components.external.ExternalComponentState;
 import org.onap.clamp.policy.microservice.MicroServicePolicy;
 
 public class DcaeComponentTest {
@@ -90,4 +94,61 @@
         assertThat(unDeploymentPayload).isEqualTo(expectedPayload);
     }
 
+    @Test
+    public void computeStateTest() throws IOException {
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+        Exchange exchange2 = Mockito.mock(Exchange.class);
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(message.getExchange()).thenReturn(exchange2);
+        Mockito.when(exchange2.getProperty("dcaeResponse")).thenReturn(null);
+
+        DcaeComponent dcae = new DcaeComponent();
+
+        // initial state
+        ExternalComponentState state = dcae.computeState(exchange);
+        assertThat(state.getStateName()).isEqualTo("BLUEPRINT_DEPLOYED");
+
+        // OperationalType = install
+        DcaeOperationStatusResponse dcaeResponse = Mockito.mock(DcaeOperationStatusResponse.class); 
+        Mockito.when(dcaeResponse.getOperationType()).thenReturn("install");
+
+        Mockito.when(dcaeResponse.getStatus()).thenReturn("succeeded");
+        Mockito.when(exchange2.getProperty("dcaeResponse")).thenReturn(dcaeResponse);
+        ExternalComponentState state2 = dcae.computeState(exchange);
+        assertThat(state2.getStateName()).isEqualTo("MICROSERVICE_INSTALLED_SUCCESSFULLY");
+        Mockito.when(dcaeResponse.getStatus()).thenReturn("processing");
+        ExternalComponentState state3 = dcae.computeState(exchange);
+        assertThat(state3.getStateName()).isEqualTo("PROCESSING_MICROSERVICE_INSTALLATION");
+
+        Mockito.when(dcaeResponse.getStatus()).thenReturn("failed");
+        ExternalComponentState state4 = dcae.computeState(exchange);
+        assertThat(state4.getStateName()).isEqualTo("MICROSERVICE_INSTALLATION_FAILED");
+
+        // OperationalType = uninstall
+        Mockito.when(dcaeResponse.getOperationType()).thenReturn("uninstall");
+
+        Mockito.when(dcaeResponse.getStatus()).thenReturn("succeeded");
+        Mockito.when(exchange2.getProperty("dcaeResponse")).thenReturn(dcaeResponse);
+        ExternalComponentState state5 = dcae.computeState(exchange);
+        assertThat(state5.getStateName()).isEqualTo("MICROSERVICE_UNINSTALLED_SUCCESSFULLY");
+
+        Mockito.when(dcaeResponse.getStatus()).thenReturn("processing");
+        ExternalComponentState state6 = dcae.computeState(exchange);
+        assertThat(state6.getStateName()).isEqualTo("PROCESSING_MICROSERVICE_UNINSTALLATION");
+
+        Mockito.when(dcaeResponse.getStatus()).thenReturn("failed");
+        ExternalComponentState state7 = dcae.computeState(exchange);
+        assertThat(state7.getStateName()).isEqualTo("MICROSERVICE_UNINSTALLATION_FAILED");
+
+        // error cases
+        Mockito.when(dcaeResponse.getOperationType()).thenReturn("whatever");
+        ExternalComponentState state8 = dcae.computeState(exchange);
+        assertThat(state8.getStateName()).isEqualTo("IN_ERROR");
+
+        Mockito.when(dcaeResponse.getOperationType()).thenReturn("install");
+        Mockito.when(dcaeResponse.getStatus()).thenReturn("anythingelse");
+        ExternalComponentState state9 = dcae.computeState(exchange);
+        assertThat(state9.getStateName()).isEqualTo("IN_ERROR");
+    }
 }
diff --git a/src/test/java/org/onap/clamp/loop/ExternalComponentStateTest.java b/src/test/java/org/onap/clamp/loop/ExternalComponentStateTest.java
new file mode 100644
index 0000000..34fcc07
--- /dev/null
+++ b/src/test/java/org/onap/clamp/loop/ExternalComponentStateTest.java
@@ -0,0 +1,82 @@
+/*-
+ * ============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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.loop;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Test;
+import org.onap.clamp.loop.components.external.ExternalComponentState;
+
+public class ExternalComponentStateTest {
+    private ExternalComponentState state =  new ExternalComponentState("NOT_SENT",
+            "The policies defined have NOT yet been created on the policy engine", 90);
+
+    @Test
+    public void generalTest() {
+        assertThat(state.toString()).isEqualTo("NOT_SENT");
+        state.setLevel(70);
+        assertThat(state.getLevel()).isEqualTo(70);
+    }
+
+    @Test
+    public void equalsTest() {
+        assertThat(state.equals(null)).isEqualTo(false);
+
+        ExternalComponentState state2 =  new ExternalComponentState("NOT_SENT",
+               "The policies defined have NOT yet been created on the policy engine", 90);
+        assertThat(state.equals(state2)).isEqualTo(true);
+
+        assertThat(state.equals(12)).isEqualTo(false);
+
+        state2.setLevel(70);
+        assertThat(state.equals(state2)).isEqualTo(true);
+
+        ExternalComponentState state3 =  new ExternalComponentState("SENT",
+                "The policies defined have NOT yet been created on the policy engine", 90);
+        assertThat(state.equals(state3)).isEqualTo(false);
+
+        ExternalComponentState state4 =  new ExternalComponentState(null,
+                "The policies defined have NOT yet been created on the policy engine", 90);
+        ExternalComponentState state5 =  new ExternalComponentState(null,
+                "The policies defined have NOT yet been", 50);
+        assertThat(state4.equals(state3)).isEqualTo(false);
+        assertThat(state4.equals(state5)).isEqualTo(true);
+    }
+
+    @Test
+    public void compareToTest() {
+        ExternalComponentState state2 =  new ExternalComponentState("NOT_SENT",
+               "The policies defined have NOT yet been created on the policy engine", 90);
+        assertThat(state.compareTo(state2)).isEqualTo(0);
+
+        ExternalComponentState state3 =  new ExternalComponentState("SENT",
+                "The policies defined have NOT yet been created on the policy engine", 50);
+        assertThat(state.compareTo(state3)).isEqualTo(1);
+
+        ExternalComponentState state4 =  new ExternalComponentState(null,
+                "The policies defined have NOT yet been created on the policy engine", 100);
+        assertThat(state.compareTo(state4)).isEqualTo(-1);
+
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java
new file mode 100644
index 0000000..67ae985
--- /dev/null
+++ b/src/test/java/org/onap/clamp/loop/LoopControllerTestItCase.java
@@ -0,0 +1,150 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights
+ *                             reserved.
+ * Modifications 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.loop;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+import java.util.Set;
+import javax.transaction.Transactional;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.onap.clamp.clds.Application;
+import org.onap.clamp.clds.util.JsonUtils;
+
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
+import org.onap.clamp.policy.microservice.MicroservicePolicyService;
+import org.onap.clamp.policy.operational.OperationalPolicy;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Application.class)
+public class LoopControllerTestItCase {
+
+    private static final String EXAMPLE_LOOP_NAME = "ClosedLoopTest";
+    private static final String EXAMPLE_JSON = "{\"testName\":\"testValue\"}";
+
+    @Autowired
+    LoopService loopService;
+
+    @Autowired
+    LoopsRepository loopsRepository;
+
+    @Autowired
+    MicroservicePolicyService microServicePolicyService;
+
+    @Autowired
+    LoopController loopController;
+
+    private void saveTestLoopToDb() {
+        Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, "blueprint", "representation");
+        testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
+        loopService.saveOrUpdateLoop(testLoop);
+    }
+
+    private Loop createTestLoop(String loopName, String loopBlueprint, String loopSvg) {
+        return new Loop(loopName, loopBlueprint, loopSvg);
+    }
+
+    @Before
+    public void setUp() {
+        saveTestLoopToDb();
+    }
+
+    @After
+    public void tearDown() {
+        loopsRepository.deleteAll();
+    }
+
+    @Test
+    public void testUpdateOperationalPolicies() {
+        String policy = "[{\"name\":\"OPERATIONAL_CLholmes31_v1_0_vFW_PG_T10_k8s-holmes-rules\","
+                + "\"configurationsJson\":{\"guard_policies\":{},"
+                + "\"operational_policy\":{\"controlLoop\":{\"trigger_policy\":\"unique-policy-id-1-modifyConfig\","
+                + "\"timeout\":\"3600\",\"abatement\":\"false\","
+                + "\"controlLoopName\":\"LOOP_CLholmes31_v1_0_vFW_PG_T10_k8s-holmes-rules\"},"
+                + "\"policies\":[{\"id\":\"unique-policy-id-1-modifyConfig\",\"recipe\":\"ModifyConfig\","
+                + "\"retry\":\"2\",\"timeout\":\"1200\",\"actor\":\"APPC\",\"payload\":\"{\\\"active-streams\\\":5}\","
+                + "\"success\":\"\",\"failure\":\"\",\"failure_timeout\":\"\",\"failure_retries\":\"\","
+                + "\"failure_exception\":\"\",\"failure_guard\":\"\",\"target\":{\"type\":\"VNF\","
+                + "\"resourceID\":\"vFW_PG_T1\"}}]}}}]";
+        JsonParser parser = new JsonParser();
+        JsonElement ele = parser.parse(policy);
+        JsonArray arr = ele.getAsJsonArray();
+        Loop loop = loopController.updateOperationalPolicies(EXAMPLE_LOOP_NAME, arr);
+        assertThat(loop.getOperationalPolicies()).hasSize(1);
+        Set<OperationalPolicy> opSet = loop.getOperationalPolicies();
+        OperationalPolicy op = opSet.iterator().next();
+        assertThat(op.getName()).isEqualTo("OPERATIONAL_CLholmes31_v1_0_vFW_PG_T10_k8s-holmes-rules");
+    }
+
+    @Test
+    @Transactional
+    public void testUpdateGlobalProperties() {
+        String policy = "{\"dcaeDeployParameters\":{\"aaiEnrichmentHost\":\"aai.onap.svc.cluster.local\","
+                + "\"aaiEnrichmentPort\":\"8443\",\"enableAAIEnrichment\":\"false\",\"dmaap_host\":\"message-router"
+                + ".onap\",\"dmaap_port\":\"3904\",\"enableRedisCaching\":\"false\",\"redisHosts\":\"dcae-redis.onap"
+                + ".svc.cluster.local:6379\",\"tag_version\":\"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments"
+                + ".tca-cdap-container:1.1.1\",\"consul_host\":\"consul-server.onap\",\"consul_port\":\"8500\","
+                + "\"cbs_host\":\"config-binding-service\",\"cbs_port\":\"10000\",\"external_port\":\"32012\","
+                + "\"policy_model_id\":\"onap.policies.monitoring.cdap.tca.hi.lo.app\","
+                + "\"policy_id\":\"tca_k8s_CLTCA_v1_0_vFW_PG_T10_k8s-tca-clamp-policy-05162019\"}}";
+        JsonParser parser = new JsonParser();
+        JsonElement ele = parser.parse(policy);
+        JsonObject obj = ele.getAsJsonObject();
+        loopController.updateGlobalPropertiesJson(EXAMPLE_LOOP_NAME, obj);
+        Loop loop = loopController.getLoop(EXAMPLE_LOOP_NAME);
+        JsonObject globalPropertiesJson = loop.getGlobalPropertiesJson();
+        JsonObject prop = globalPropertiesJson.getAsJsonObject("dcaeDeployParameters");
+        assertThat(prop.get("aaiEnrichmentHost").getAsString()).isEqualTo("aai.onap.svc.cluster.local");
+    }
+
+    @Test
+    @Transactional
+    public void testUpdateMicroservicePolicy() {
+        MicroServicePolicy policy = new MicroServicePolicy("policyName", "",
+                                                      "tosca_definitions_version: tosca_simple_yaml_1_0_0", false,
+                                                      JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null);
+        loopController.updateMicroservicePolicy(EXAMPLE_LOOP_NAME, policy);
+        assertThat(microServicePolicyService.isExisting("policyName")).isTrue();
+    }
+
+    @Test
+    @Transactional
+    public void testGetSvgRepresentation() {
+        String svgRepresentation =  loopController.getSvgRepresentation(EXAMPLE_LOOP_NAME);
+        assertThat(svgRepresentation).isEqualTo("representation");
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/org/onap/clamp/loop/LoopLogServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopLogServiceTestItCase.java
new file mode 100644
index 0000000..57b2cef
--- /dev/null
+++ b/src/test/java/org/onap/clamp/loop/LoopLogServiceTestItCase.java
@@ -0,0 +1,99 @@
+/*-
+ * ============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.loop;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.google.gson.JsonObject;
+
+import java.util.Set;
+import javax.transaction.Transactional;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.onap.clamp.clds.Application;
+import org.onap.clamp.clds.util.JsonUtils;
+import org.onap.clamp.loop.log.LogType;
+import org.onap.clamp.loop.log.LoopLog;
+import org.onap.clamp.loop.log.LoopLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Application.class)
+public class LoopLogServiceTestItCase {
+
+    private static final String EXAMPLE_LOOP_NAME = "ClosedLoopTest";
+    private static final String EXAMPLE_JSON = "{\"testName\":\"testValue\"}";
+    private static final String CLAMP_COMPONENT = "CLAMP";
+    private static final String SAMPLE_LOG_MESSAGE = "Sample log";
+    private static final String BLUEPRINT = "blueprint";
+    private static final String SVG_REPRESENTATION = "representation";
+
+    @Autowired
+    LoopService loopService;
+
+    @Autowired
+    LoopsRepository loopsRepository;
+
+    @Autowired
+    LoopLogService loopLogService;
+
+    private void saveTestLoopToDb() {
+        Loop testLoop = new Loop(EXAMPLE_LOOP_NAME, BLUEPRINT, SVG_REPRESENTATION);
+        testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
+        loopService.saveOrUpdateLoop(testLoop);
+    }
+
+    @Test
+    @Transactional
+    public void testAddLog() {
+        saveTestLoopToDb();
+        Loop loop = loopService.getLoop(EXAMPLE_LOOP_NAME);
+        loopLogService.addLog(SAMPLE_LOG_MESSAGE, "INFO", loop);
+        Set<LoopLog> loopLogs = loop.getLoopLogs();
+        assertThat(loopLogs).hasSize(1);
+        LoopLog loopLog = loopLogs.iterator().next();
+        assertThat(loopLog.getMessage()).isEqualTo(SAMPLE_LOG_MESSAGE);
+        loopsRepository.deleteAll();
+    }
+
+    @Test
+    public void testLoopLog() {
+        LoopLog log = new LoopLog();
+        Long id = Long.valueOf(100);
+        log.setId(id);
+        log.setLogComponent(CLAMP_COMPONENT);
+        log.setLogType(LogType.INFO);
+        log.setMessage(SAMPLE_LOG_MESSAGE);
+        Loop testLoop = new Loop(EXAMPLE_LOOP_NAME, BLUEPRINT, SVG_REPRESENTATION);
+        log.setLoop(testLoop);
+        assertThat(log.getMessage()).isEqualTo(SAMPLE_LOG_MESSAGE);
+        assertThat(log.getLogType()).isEqualTo(LogType.INFO);
+        assertThat(log.getLogComponent()).isEqualTo(CLAMP_COMPONENT);
+        assertThat(log.getId()).isEqualTo(id);
+        assertThat(log.getLoop()).isEqualTo(testLoop);
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java
index 8add1a7..1fedc9a 100644
--- a/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java
+++ b/src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java
@@ -319,6 +319,40 @@
         assertThat(loopLogService.isExisting(((LoopLog) loop.getLoopLogs().toArray()[0]).getId())).isFalse();
     }
 
+    @Test
+    @Transactional
+    public void testUpdateLoopState() {
+        saveTestLoopToDb();
+        Loop loop = loopService.getLoop(EXAMPLE_LOOP_NAME);
+        loopService.updateLoopState(loop, "SUBMITTED");
+        Loop updatedLoop = loopService.getLoop(EXAMPLE_LOOP_NAME);
+        assertThat(updatedLoop.getLastComputedState()).isEqualTo(LoopState.SUBMITTED);
+    }
+
+    @Test
+    @Transactional
+    public void testUpdateDcaeDeploymentFields() {
+        saveTestLoopToDb();
+        Loop loop = loopService.getLoop(EXAMPLE_LOOP_NAME);
+        loopService.updateDcaeDeploymentFields(loop,"CLAMP_c5ce429a-f570-48c5-a7ea-53bed8f86f85",
+                                               "https4://deployment-handler.onap:8443");
+        loop = loopService.getLoop(EXAMPLE_LOOP_NAME);
+        assertThat(loop.getDcaeDeploymentId()).isEqualTo("CLAMP_c5ce429a-f570-48c5-a7ea-53bed8f86f85");
+        assertThat(loop.getDcaeDeploymentStatusUrl()).isEqualTo("https4://deployment-handler.onap:8443");
+    }
+
+    @Test
+    @Transactional
+    public void testUpdateMicroservicePolicy() {
+        saveTestLoopToDb();
+        assertThat(microServicePolicyService.isExisting("policyName")).isFalse();
+        MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", "",
+                                                                       "tosca_definitions_version: tosca_simple_yaml_1_0_0", false,
+                                                                       JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null);
+        loopService.updateMicroservicePolicy(EXAMPLE_LOOP_NAME, microServicePolicy);
+        assertThat(microServicePolicyService.isExisting("policyName")).isTrue();
+    }
+
     private Loop createTestLoop(String loopName, String loopBlueprint, String loopSvg) {
         return new Loop(loopName, loopBlueprint, loopSvg);
     }
diff --git a/src/test/java/org/onap/clamp/loop/PolicyComponentTest.java b/src/test/java/org/onap/clamp/loop/PolicyComponentTest.java
new file mode 100644
index 0000000..e822dfb
--- /dev/null
+++ b/src/test/java/org/onap/clamp/loop/PolicyComponentTest.java
@@ -0,0 +1,246 @@
+/*-
+ * ============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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.loop;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.IOException;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.clamp.loop.components.external.ExternalComponentState;
+import org.onap.clamp.loop.components.external.PolicyComponent;
+
+public class PolicyComponentTest {
+
+    /**
+    * Test the computeState method. 
+    * oldState           newState        expectedFinalState
+    * NOT_SENT      SENT_AND_DEPLOYED          NOT_SENT
+    * NOT_SENT             SENT                NOT_SENT
+    * NOT_SENT           NOT_SENT              NOT_SENT
+    * NOT_SENT           IN_ERROR              IN_ERROR
+    */
+    @Test
+    public void computeStateTestOriginalStateUnknown() {
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+        Exchange exchange2 = Mockito.mock(Exchange.class);
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(message.getExchange()).thenReturn(exchange2);
+        // policy found + deployed
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+        PolicyComponent policy = new PolicyComponent();
+
+        ExternalComponentState state = policy.computeState(exchange);
+        assertThat(state.getStateName()).isEqualTo("SENT_AND_DEPLOYED");
+        // policy found + not deployed
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+        ExternalComponentState state2 = policy.computeState(exchange);
+        assertThat(state2.getStateName()).isEqualTo("SENT");
+        // policy not found + not deployed
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+        ExternalComponentState state4 = policy.computeState(exchange);
+        assertThat(state4.getStateName()).isEqualTo("NOT_SENT");
+        // policy not found + deployed
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+        ExternalComponentState state3 = policy.computeState(exchange);
+        assertThat(state3.getStateName()).isEqualTo("IN_ERROR");
+    }
+    /**
+    * Test the computeState method. 
+    * oldState           newState        expectedFinalState
+    * NOT_SENT      SENT_AND_DEPLOYED          NOT_SENT
+    * NOT_SENT             SENT                NOT_SENT
+    * NOT_SENT           NOT_SENT              NOT_SENT
+    * NOT_SENT           IN_ERROR              IN_ERROR
+    */
+    @Test
+    public void computeStateTestOriginalStateNotSent() {
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+        Exchange exchange2 = Mockito.mock(Exchange.class);
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(message.getExchange()).thenReturn(exchange2);
+        // policy found + deployed
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+        PolicyComponent policy = new PolicyComponent();
+        ExternalComponentState notSent = new ExternalComponentState("NOT_SENT",
+                "The policies defined have NOT yet been created on the policy engine", 90);
+        policy.setState(notSent);
+        ExternalComponentState state = policy.computeState(exchange);
+        assertThat(state.getStateName()).isEqualTo("NOT_SENT");
+        // policy found + not deployed
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+        ExternalComponentState state2 = policy.computeState(exchange);
+        assertThat(state2.getStateName()).isEqualTo("NOT_SENT");
+        // policy not found + not deployed
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+        ExternalComponentState state4 = policy.computeState(exchange);
+        assertThat(state4.getStateName()).isEqualTo("NOT_SENT");
+        // policy not found + deployed
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+        ExternalComponentState state3 = policy.computeState(exchange);
+        assertThat(state3.getStateName()).isEqualTo("IN_ERROR");
+    }
+
+
+    /**
+    * Test the computeState method. 
+    * oldState           newState        expectedFinalState
+    * SENT                 SENT                SENT
+    * SENT          SENT_AND_DEPLOYED          SENT
+    * SENT              IN_ERROR              IN_ERROR
+    * SENT              NOT_SENT              NOT_SENT
+    */
+    @Test
+    public void computeStateTestOriginalStateSent() throws IOException {
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+        Exchange exchange2 = Mockito.mock(Exchange.class);
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(message.getExchange()).thenReturn(exchange2);
+        PolicyComponent policy = new PolicyComponent();
+        ExternalComponentState sent = new ExternalComponentState("SENT",
+                "The policies defined have been created but NOT deployed on the policy engine", 50);
+        policy.setState(sent);
+        // new policy state SENT
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+        ExternalComponentState state = policy.computeState(exchange);
+        assertThat(state.getStateName()).isEqualTo("SENT");
+        // new policy state SENT_AND_DEPLOYED
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+        ExternalComponentState state2 = policy.computeState(exchange);
+        assertThat(state2.getStateName()).isEqualTo("SENT");
+        // new policy state IN_ERROR
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+        ExternalComponentState state3 = policy.computeState(exchange);
+        assertThat(state3.getStateName()).isEqualTo("IN_ERROR");
+        // new policy state NOT_SENT
+        policy.setState(sent);
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+        ExternalComponentState state4 = policy.computeState(exchange);
+        assertThat(state4.getStateName()).isEqualTo("NOT_SENT");
+    }
+
+    /**
+    * Test the computeState method. 
+    * oldState                   newState        expectedFinalState
+    * SENT_AND_DEPLOYED     SENT_AND_DEPLOYED    SENT_AND_DEPLOYED
+    * SENT_AND_DEPLOYED            SENT                SENT
+    * SENT_AND_DEPLOYED          IN_ERROR            IN_ERROR
+    * SENT_AND_DEPLOYED          NOT_SENT            NOT_SENT
+    */
+    @Test
+    public void computeStateTestOriginalStateSentAndDeployed() throws IOException {
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+        Exchange exchange2 = Mockito.mock(Exchange.class);
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(message.getExchange()).thenReturn(exchange2);
+        PolicyComponent policy = new PolicyComponent();
+        ExternalComponentState sendDeployed = new ExternalComponentState("SENT_AND_DEPLOYED",
+                "The policies defined have been created and deployed on the policy engine", 10);
+        policy.setState(sendDeployed);
+        // new policy state SENT_AND_DEPLOYED
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+        ExternalComponentState state = policy.computeState(exchange);
+        assertThat(state.getStateName()).isEqualTo("SENT_AND_DEPLOYED");
+        // new policy state SENT
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+        ExternalComponentState state2 = policy.computeState(exchange);
+        assertThat(state2.getStateName()).isEqualTo("SENT");
+        // new policy state IN_ERROR
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+        ExternalComponentState state3 = policy.computeState(exchange);
+        assertThat(state3.getStateName()).isEqualTo("IN_ERROR");
+        // new policy state NOT_SENT
+        policy.setState(sendDeployed);
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+        ExternalComponentState state4 = policy.computeState(exchange);
+        assertThat(state4.getStateName()).isEqualTo("NOT_SENT");
+    }
+
+
+    /**
+    * Test the computeState method. 
+    * oldState           newState        expectedFinalState
+    * IN_ERROR     SENT_AND_DEPLOYED         IN_ERROR
+    * IN_ERROR            SENT               IN_ERROR
+    * IN_ERROR          IN_ERROR             IN_ERROR
+    * IN_ERROR          NOT_SENT             IN_ERROR
+    */
+    @Test
+    public void computeStateTestOriginalStateInError() throws IOException {
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+        Exchange exchange2 = Mockito.mock(Exchange.class);
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(message.getExchange()).thenReturn(exchange2);
+        PolicyComponent policy = new PolicyComponent();
+        ExternalComponentState inError = new ExternalComponentState("IN_ERROR",
+                "There was an error during the sending to policy, the policy engine may be corrupted or inconsistent",
+                100);
+        policy.setState(inError);
+        // new policy state SENT_AND_DEPLOYED
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+        ExternalComponentState state = policy.computeState(exchange);
+        assertThat(state.getStateName()).isEqualTo("IN_ERROR");
+        // new policy state SENT
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+        ExternalComponentState state2 = policy.computeState(exchange);
+        assertThat(state2.getStateName()).isEqualTo("IN_ERROR");
+        // new policy state IN_ERROR
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+        ExternalComponentState state3 = policy.computeState(exchange);
+        assertThat(state3.getStateName()).isEqualTo("IN_ERROR");
+        // new policy state NOT_SENT
+        Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+        Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+        ExternalComponentState state4 = policy.computeState(exchange);
+
+        assertThat(state4.getStateName()).isEqualTo("IN_ERROR");
+    }
+}
diff --git a/src/test/javascript/demo.test.js b/src/test/javascript/demo.test.js
deleted file mode 100644
index c088957..0000000
--- a/src/test/javascript/demo.test.js
+++ /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
index a2f0cd2..0000000
--- a/src/test/javascript/package.json
+++ /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
index e719996..0000000
--- a/src/test/javascript/propertyController.test.js
+++ /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
diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties
index b23f77a..bbade74 100644
--- a/src/test/resources/application.properties
+++ b/src/test/resources/application.properties
@@ -208,15 +208,10 @@
 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
index 0000000..cf99625
--- /dev/null
+++ b/src/test/resources/clds/camel/rest/clamp-api-v2.xml
@@ -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
index 0000000..dd3a4bf
--- /dev/null
+++ b/src/test/resources/clds/camel/rest/clds-services.xml
@@ -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
index 0000000..fb3bc90
--- /dev/null
+++ b/src/test/resources/clds/camel/routes/dcae-flows.xml
@@ -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
index 2103b4a..0000000
--- a/src/test/resources/clds/camel/routes/flexible-flow.xml
+++ /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
index 0000000..036e8ef
--- /dev/null
+++ b/src/test/resources/clds/camel/routes/loop-flows.xml
@@ -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
index 0000000..75ac66c
--- /dev/null
+++ b/src/test/resources/clds/camel/routes/policy-flows.xml
@@ -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
index 0000000..bbbc46a
--- /dev/null
+++ b/src/test/resources/clds/camel/routes/utils-flows.xml
@@ -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
diff --git a/ui-react/src/LoopUI.js b/ui-react/src/LoopUI.js
index fb595de..ff3c444 100644
--- a/ui-react/src/LoopUI.js
+++ b/ui-react/src/LoopUI.js
@@ -33,6 +33,7 @@
 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 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 @@
 	state = {
 		userName: null,
 		loopName: LoopUI.defaultLoopName,
-		loopCache: new LoopCache({})
+		loopCache: new LoopCache({}),
+		showAlert: false
 	};
 
 	constructor() {
@@ -110,6 +113,8 @@
 		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 @@
 		);
 	}
 
+	renderAlertBar() {
+		return (
+				<Alert variant="danger" show={this.state.showAlert} onClose={this.disableAlert} dismissible>
+					{this.state.showMessage}
+				</Alert>
+		);
+	}
+
 	renderNavBar() {
 		return (
 			<Navbar >
@@ -199,14 +212,30 @@
 	}
 
 	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 @@
 		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>
diff --git a/ui-react/src/LoopUI.test.js b/ui-react/src/LoopUI.test.js
new file mode 100644
index 0000000..e28096b
--- /dev/null
+++ b/ui-react/src/LoopUI.test.js
@@ -0,0 +1,171 @@
+/*-
+ * ============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============================================
+ * ===================================================================
+ *
+ */
+import React from 'react';
+import { shallow } from 'enzyme';
+import LoopUI from './LoopUI';
+
+import LoopCache from './api/LoopCache';
+import LoopActionService from './api/LoopActionService';
+import LoopService from './api/LoopService';
+
+describe('Verify LoopUI', () => {
+	beforeEach(() => {
+		fetch.resetMocks();
+		fetch.mockImplementation(() => {
+			return Promise.resolve({
+				ok: true,
+				status: 200,
+				text: () => "testUser"
+
+			});
+		});
+	})
+
+	const loopCache = new LoopCache({
+		"name": "LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca",
+		"components": {
+			"POLICY": {
+				"componentState": {
+					"stateName": "UNKNOWN",
+					"description": "The policies defined have NOT yet been created on the policy engine"
+				}
+			},
+			"DCAE": {
+				"componentState": {
+					"stateName": "BLUEPRINT_DEPLOYED",
+					"description": "The DCAE blueprint has been found in the DCAE inventory but not yet instancianted for this loop"
+				}
+			}
+		}
+	});
+
+	it('Test the render method', async () => {
+		const flushPromises = () => new Promise(setImmediate);
+
+		const component = shallow(<LoopUI />)
+		component.setState({
+			loopName: "testLoopName",
+			showAlert: false 
+		});
+		await flushPromises();
+		expect(component).toMatchSnapshot();
+	});
+
+	test('Test closeLoop method', () => {
+		const historyMock = { push: jest.fn() };
+		const component = shallow(<LoopUI history={historyMock}/>)
+		const instance = component.instance();
+		instance.closeLoop();
+			
+		expect(component.state('loopName')).toEqual("Empty (NO loop loaded yet)");
+		expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
+	})
+
+	test('Test logout method', async () => {
+		const flushPromises = () => new Promise(setImmediate);
+		const component = shallow(<LoopUI />)
+		const instance = component.instance();
+		instance.logout();
+		await flushPromises();
+		expect(component.state('userName')).toEqual("testUser");
+	})
+
+	test('Test loadLoop method refresh suc', async () => {
+		const historyMock = { push: jest.fn() };
+		LoopService.getLoop = jest.fn().mockImplementation(() => {
+			return Promise.resolve({
+				ok: true,
+				status: 200,
+				text: () => {}
+			});
+		});
+
+		LoopActionService.refreshStatus = jest.fn().mockImplementation(() => {
+			return Promise.resolve({name: "LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca"});
+		});
+
+		const flushPromises = () => new Promise(setImmediate);
+		const component = shallow(<LoopUI history={historyMock}/>)
+		const instance = component.instance();
+		instance.loadLoop("LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca");
+
+		await flushPromises();
+
+		const resLoopCache = instance.getLoopCache();
+			
+		expect(resLoopCache.getComponentStates()).toBeUndefined();
+		expect(component.state('loopName')).toEqual("LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca");
+	})
+
+	test('Test loadLoop method refresh fail', async () => {
+		const historyMock = { push: jest.fn() };
+		LoopService.getLoop = jest.fn().mockImplementation(() => {
+			return Promise.resolve({
+			name: "LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca",
+			"components": {
+				"POLICY": {
+					"componentState": {
+						"stateName": "UNKNOWN",
+						"description": "The policies defined have NOT yet been created on the policy engine"
+					}
+				},
+				"DCAE": {
+					"componentState": {
+						"stateName": "BLUEPRINT_DEPLOYED",
+						"description": "The DCAE blueprint has been found in the DCAE inventory but not yet instancianted for this loop"
+					}
+				}
+			}});
+		});
+
+		LoopActionService.refreshStatus = jest.fn().mockImplementation(() => {
+			return Promise.reject({error: "whatever"});
+		});
+
+		const flushPromises = () => new Promise(setImmediate);
+		const component = shallow(<LoopUI history={historyMock}/>)
+		const instance = component.instance();
+		instance.loadLoop("LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca");
+
+		await flushPromises();
+
+		const resLoopCache = instance.getLoopCache();
+			
+		expect(resLoopCache).toEqual(loopCache);
+		expect(component.state('loopName')).toEqual("LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca");
+	})
+
+	test('Test alert methods', () => {
+		const component = shallow(<LoopUI />)
+		expect(component.state('showAlert')).toEqual(false);
+
+		const instance = component.instance();
+		instance.showAlert("testAlert");
+		expect(component.state('showAlert')).toEqual(true);
+		expect(component.state('showMessage')).toEqual("testAlert");
+
+		instance.disableAlert();
+			
+		expect(component.state('showAlert')).toEqual(false);
+	})
+});
diff --git a/ui-react/src/NotFound.test.js b/ui-react/src/NotFound.test.js
new file mode 100644
index 0000000..3a5fc10
--- /dev/null
+++ b/ui-react/src/NotFound.test.js
@@ -0,0 +1,36 @@
+/*-
+ * ============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============================================
+ * ===================================================================
+ *
+ */
+import React from 'react';
+import { shallow } from 'enzyme';
+import NotFound from './NotFound';
+
+describe('Verify OnapClamp', () => {
+
+	it('Test the render method',  () => {
+
+		const component = shallow(<NotFound />)
+
+		expect(component).toMatchSnapshot();
+	});
+
+});
diff --git a/ui-react/src/OnapClamp.test.js b/ui-react/src/OnapClamp.test.js
new file mode 100644
index 0000000..c3336a9
--- /dev/null
+++ b/ui-react/src/OnapClamp.test.js
@@ -0,0 +1,36 @@
+/*-
+ * ============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============================================
+ * ===================================================================
+ *
+ */
+import React from 'react';
+import { shallow } from 'enzyme';
+import OnapClamp from './OnapClamp';
+
+describe('Verify OnapClamp', () => {
+
+	it('Test the render method',  () => {
+
+		const component = shallow(<OnapClamp />)
+
+		expect(component).toMatchSnapshot();
+	});
+
+});
diff --git a/ui-react/src/__snapshots__/LoopUI.test.js.snap b/ui-react/src/__snapshots__/LoopUI.test.js.snap
new file mode 100644
index 0000000..ecf439e
--- /dev/null
+++ b/ui-react/src/__snapshots__/LoopUI.test.js.snap
@@ -0,0 +1,154 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify LoopUI Test the render method 1`] = `
+<styled.div
+  id="main_div"
+>
+  <Route
+    path="/operationalPolicyModal"
+    render={[Function]}
+  />
+  <Route
+    path="/configurationPolicyModal/:componentName"
+    render={[Function]}
+  />
+  <Route
+    path="/openLoop"
+    render={[Function]}
+  />
+  <Route
+    path="/loopProperties"
+    render={[Function]}
+  />
+  <Route
+    path="/userInfo"
+    render={[Function]}
+  />
+  <Route
+    path="/closeLoop"
+    render={[Function]}
+  />
+  <Route
+    path="/submit"
+    render={[Function]}
+  />
+  <Route
+    path="/stop"
+    render={[Function]}
+  />
+  <Route
+    path="/restart"
+    render={[Function]}
+  />
+  <Route
+    path="/delete"
+    render={[Function]}
+  />
+  <Route
+    path="/undeploy"
+    render={[Function]}
+  />
+  <Route
+    path="/deploy"
+    render={[Function]}
+  />
+  <Route
+    path="/refreshStatus"
+    render={[Function]}
+  />
+  <Route
+    path="/logout"
+    render={[Function]}
+  />
+  <GlobalStyleComponent />
+  <Alert
+    closeLabel="Close alert"
+    dismissible={true}
+    onClose={[Function]}
+    show={false}
+    transition={
+      Object {
+        "$$typeof": Symbol(react.forward_ref),
+        "defaultProps": Object {
+          "appear": false,
+          "in": false,
+          "mountOnEnter": false,
+          "timeout": 300,
+          "unmountOnExit": false,
+        },
+        "displayName": "Fade",
+        "render": [Function],
+      }
+    }
+    variant="danger"
+  />
+  <Navbar
+    collapseOnSelect={false}
+    expand={true}
+    variant="light"
+  >
+    <NavbarBrand>
+      <img
+        alt=""
+        height="50px"
+        src={null}
+        width="234px"
+      />
+      <styled.a>
+        CLAMP
+      </styled.a>
+    </NavbarBrand>
+    <NavbarToggle
+      aria-controls="responsive-navbar-nav"
+      label="Toggle navigation"
+    />
+    <MenuBar
+      loopName="testLoopName"
+    />
+    <NavbarText>
+      <styled.a>
+        Signed in as: 
+      </styled.a>
+      <Styled(Link)
+        to="/userInfo"
+      >
+        testUser
+      </Styled(Link)>
+      <Styled(Link)
+        to="/logout/"
+      >
+         (logout)
+      </Styled(Link)>
+    </NavbarText>
+  </Navbar>
+  <styled.div>
+    <styled.div>
+      Loop Viewer - 
+      testLoopName
+    </styled.div>
+    <styled.div>
+      <withRouter(LoopViewSvg)
+        loopCache={
+          LoopCache {
+            "loopJsonCache": Object {},
+          }
+        }
+      />
+      <LoopStatus
+        loopCache={
+          LoopCache {
+            "loopJsonCache": Object {},
+          }
+        }
+      />
+      <LoopLogs
+        loopCache={
+          LoopCache {
+            "loopJsonCache": Object {},
+          }
+        }
+      />
+    </styled.div>
+  </styled.div>
+</styled.div>
+`;
diff --git a/ui-react/src/__snapshots__/NotFound.test.js.snap b/ui-react/src/__snapshots__/NotFound.test.js.snap
new file mode 100644
index 0000000..86bcfd1
--- /dev/null
+++ b/ui-react/src/__snapshots__/NotFound.test.js.snap
@@ -0,0 +1,26 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify OnapClamp Test the render method 1`] = `
+<div
+  id="main"
+>
+  <div
+    class="divRow"
+  >
+    <b>
+      Page Not Found!
+    </b>
+  </div>
+  <div
+    class="divRow"
+  >
+    Please cick 
+    <a
+      href="/"
+    >
+      here
+    </a>
+     to go back to the main page.
+  </div>
+</div>
+`;
diff --git a/ui-react/src/__snapshots__/OnapClamp.test.js.snap b/ui-react/src/__snapshots__/OnapClamp.test.js.snap
new file mode 100644
index 0000000..751c94b
--- /dev/null
+++ b/ui-react/src/__snapshots__/OnapClamp.test.js.snap
@@ -0,0 +1,176 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify OnapClamp Test the render method 1`] = `
+<ThemeProvider
+  theme={
+    Object {
+      "backgroundColor": "#eeeeee",
+      "fontDanger": "#eb238e",
+      "fontDark": "#888888",
+      "fontFamily": "Arial, Sans-serif",
+      "fontHighlight": "#ffff00",
+      "fontLight": "#ffffff",
+      "fontNormal": "black",
+      "fontSize": "16px",
+      "fontWarning": "#eb238e",
+      "loopViewerBackgroundColor": "white",
+      "loopViewerFontColor": "yellow",
+      "loopViewerHeaderBackgroundColor": "#337ab7",
+      "loopViewerHeaderFontColor": "white",
+      "menuBackgroundColor": "white",
+      "menuFontColor": "black",
+      "menuHighlightedBackgroundColor": "#337ab7",
+      "menuHighlightedFontColor": "white",
+    }
+  }
+>
+  <styled.div
+    id="main_div"
+  >
+    <Route
+      path="/operationalPolicyModal"
+      render={[Function]}
+    />
+    <Route
+      path="/configurationPolicyModal/:componentName"
+      render={[Function]}
+    />
+    <Route
+      path="/openLoop"
+      render={[Function]}
+    />
+    <Route
+      path="/loopProperties"
+      render={[Function]}
+    />
+    <Route
+      path="/userInfo"
+      render={[Function]}
+    />
+    <Route
+      path="/closeLoop"
+      render={[Function]}
+    />
+    <Route
+      path="/submit"
+      render={[Function]}
+    />
+    <Route
+      path="/stop"
+      render={[Function]}
+    />
+    <Route
+      path="/restart"
+      render={[Function]}
+    />
+    <Route
+      path="/delete"
+      render={[Function]}
+    />
+    <Route
+      path="/undeploy"
+      render={[Function]}
+    />
+    <Route
+      path="/deploy"
+      render={[Function]}
+    />
+    <Route
+      path="/refreshStatus"
+      render={[Function]}
+    />
+    <Route
+      path="/logout"
+      render={[Function]}
+    />
+    <GlobalStyleComponent />
+    <Alert
+      closeLabel="Close alert"
+      dismissible={true}
+      onClose={[Function]}
+      show={false}
+      transition={
+        Object {
+          "$$typeof": Symbol(react.forward_ref),
+          "defaultProps": Object {
+            "appear": false,
+            "in": false,
+            "mountOnEnter": false,
+            "timeout": 300,
+            "unmountOnExit": false,
+          },
+          "displayName": "Fade",
+          "render": [Function],
+        }
+      }
+      variant="danger"
+    />
+    <Navbar
+      collapseOnSelect={false}
+      expand={true}
+      variant="light"
+    >
+      <NavbarBrand>
+        <img
+          alt=""
+          height="50px"
+          src={null}
+          width="234px"
+        />
+        <styled.a>
+          CLAMP
+        </styled.a>
+      </NavbarBrand>
+      <NavbarToggle
+        aria-controls="responsive-navbar-nav"
+        label="Toggle navigation"
+      />
+      <MenuBar
+        loopName="Empty (NO loop loaded yet)"
+      />
+      <NavbarText>
+        <styled.a>
+          Signed in as: 
+        </styled.a>
+        <Styled(Link)
+          to="/userInfo"
+        />
+        <Styled(Link)
+          to="/logout/"
+        >
+           (logout)
+        </Styled(Link)>
+      </NavbarText>
+    </Navbar>
+    <styled.div>
+      <styled.div>
+        Loop Viewer - 
+        Empty (NO loop loaded yet)
+      </styled.div>
+      <styled.div>
+        <withRouter(LoopViewSvg)
+          loopCache={
+            LoopCache {
+              "loopJsonCache": Object {},
+            }
+          }
+        />
+        <LoopStatus
+          loopCache={
+            LoopCache {
+              "loopJsonCache": Object {},
+            }
+          }
+        />
+        <LoopLogs
+          loopCache={
+            LoopCache {
+              "loopJsonCache": Object {},
+            }
+          }
+        />
+      </styled.div>
+    </styled.div>
+  </styled.div>
+</ThemeProvider>
+`;
diff --git a/ui-react/src/api/LoopActionService.js b/ui-react/src/api/LoopActionService.js
index 7e20e2f..7cea3ff 100644
--- a/ui-react/src/api/LoopActionService.js
+++ b/ui-react/src/api/LoopActionService.js
@@ -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 @@
  			}
  		})
  		.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',
diff --git a/ui-react/src/components/dialogs/DeployLoop.js b/ui-react/src/components/dialogs/DeployLoop.js
index 805f0f2..d71af92 100644
--- a/ui-react/src/components/dialogs/DeployLoop.js
+++ b/ui-react/src/components/dialogs/DeployLoop.js
@@ -64,14 +64,13 @@
 		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 @@
 			this.props.history.push('/');
 		})
 		.catch(error => {
-			alert("Refresh status failed");
+			this.props.showAlert("Refresh status failed");
 			this.props.history.push('/');
 		});
 	}
diff --git a/ui-react/src/components/dialogs/DeployLoop.test.js b/ui-react/src/components/dialogs/DeployLoop.test.js
index 2959ed6..44bc783 100644
--- a/ui-react/src/components/dialogs/DeployLoop.test.js
+++ b/ui-react/src/components/dialogs/DeployLoop.test.js
@@ -61,6 +61,7 @@
 		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 @@
 				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 @@
 		expect(handleSave).toHaveBeenCalledTimes(1);
 		expect(component.state('show')).toEqual(false);
 		expect(historyMock.push.mock.calls[0]).toEqual([ '/']);
-		window.alert = jsdomAlert;
 		handleSave.mockClear();
 	});
 
diff --git a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
index 4dc1f90..5c5f024 100644
--- a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
+++ b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
@@ -54,7 +54,7 @@
 
 		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");
diff --git a/ui-react/src/components/dialogs/PerformActions.js b/ui-react/src/components/dialogs/PerformActions.js
index 9c34e14..66b1928 100644
--- a/ui-react/src/components/dialogs/PerformActions.js
+++ b/ui-react/src/components/dialogs/PerformActions.js
@@ -50,14 +50,14 @@
 	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);
 		});
diff --git a/ui-react/src/components/dialogs/PerformActions.test.js b/ui-react/src/components/dialogs/PerformActions.test.js
index 56fdcf3..0b07862 100644
--- a/ui-react/src/components/dialogs/PerformActions.test.js
+++ b/ui-react/src/components/dialogs/PerformActions.test.js
@@ -36,6 +36,7 @@
 		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 @@
 				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 @@
 				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;
 	});
 
 });
diff --git a/ui-react/src/components/dialogs/RefreshStatus.js b/ui-react/src/components/dialogs/RefreshStatus.js
index cf08655..64b35d9 100644
--- a/ui-react/src/components/dialogs/RefreshStatus.js
+++ b/ui-react/src/components/dialogs/RefreshStatus.js
@@ -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 @@
 	}
 
 	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('/');
 		});
 	}
diff --git a/ui-react/src/components/dialogs/RefreshStatus.test.js b/ui-react/src/components/dialogs/RefreshStatus.test.js
index cb782ad..3038eb3 100644
--- a/ui-react/src/components/dialogs/RefreshStatus.test.js
+++ b/ui-react/src/components/dialogs/RefreshStatus.test.js
@@ -35,21 +35,20 @@
 	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 @@
 				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;
 	});
 
 });
diff --git a/ui-react/src/components/loop_viewer/svg/LoopSvg.js b/ui-react/src/components/loop_viewer/svg/LoopSvg.js
index 48f0335..06cfd23 100644
--- a/ui-react/src/components/loop_viewer/svg/LoopSvg.js
+++ b/ui-react/src/components/loop_viewer/svg/LoopSvg.js
@@ -61,7 +61,7 @@
 		return this.state.svgContent !== nextState.svgContent;
 	}
 
-	componentWillReceiveProps(newProps) {	
+	componentWillReceiveProps(newProps) {
 		if (this.state.loopCache !== newProps.loopCache) {
 			this.setState({
 				loopCache: newProps.loopCache,
diff --git a/ui-react/src/components/loop_viewer/svg/LoopSvg.test.js b/ui-react/src/components/loop_viewer/svg/LoopSvg.test.js
index 5a28328..6351854 100644
--- a/ui-react/src/components/loop_viewer/svg/LoopSvg.test.js
+++ b/ui-react/src/components/loop_viewer/svg/LoopSvg.test.js
@@ -23,12 +23,111 @@
 import React from 'react';
 import { shallow } from 'enzyme';
 import LoopSvg from './LoopSvg';
+import LoopCache from '../../../api/LoopCache';
+import LoopService from '../../../api/LoopService';
 
 describe('Verify LoopSvg', () => {
+    const loopCache = new LoopCache({
+        "name": "LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca",
+        "microServicePolicies": [{
+            "name": "TCA_h2NMX_v1_0_ResourceInstanceName1_tca",
+            "modelType": "onap.policies.monitoring.cdap.tca.hi.lo.app",
+            "properties": {"domain": "measurementsForVfScaling"},
+            "shared": false,
+            "jsonRepresentation": {"schema": {}}
+        }],
+        "operationalPolicies": [{
+            "name": "OPERATIONAL_h2NMX_v1_0_ResourceInstanceName1_tca",
+            "configurationsJson": {
+                "guard_policies": {},
+                "operational_policy": {
+                    "controlLoop": {},
+                    "policies": []
+                }
+            }
+        }]
+    });
 
-	it('Test the render method', () => {
-		const component = shallow(<LoopSvg />)
+    it('Test the render method no loopName', () => {
+        const localLoopCache = new LoopCache({
+        "microServicePolicies": [{
+            "name": "TCA_h2NMX_v1_0_ResourceInstanceName1_tca",
+            "modelType": "onap.policies.monitoring.cdap.tca.hi.lo.app",
+            "properties": {"domain": "measurementsForVfScaling"},
+            "shared": false,
+            "jsonRepresentation": {"schema": {}}
+          }]
+        });
+        const component = shallow(
+            <LoopSvg.WrappedComponent loopCache={localLoopCache}/>
+        );
 
-		expect(component).toMatchSnapshot();
-	});
+        expect(component).toMatchSnapshot();
+    });
+
+    it('Test the render method', () => {
+        const component = shallow(
+            <LoopSvg.WrappedComponent  loopCache={loopCache}/>
+        );
+
+        expect(component).toMatchSnapshot();
+    });
+
+    it('Test the render method svg not empty', async () => {
+        const flushPromises = () => new Promise(setImmediate);
+        LoopService.getSvg = jest.fn().mockImplementation(() => {
+            return Promise.resolve("<svg><text test</text></svg>");
+        });
+        const component = shallow(
+            <LoopSvg.WrappedComponent  loopCache={loopCache}/>
+        );
+        await flushPromises();
+        expect(component).toMatchSnapshot();
+    });
+
+    it('Test handleSvgClick', () => {
+        const historyMock = { push: jest.fn() };
+
+        const component = shallow(
+            <LoopSvg.WrappedComponent loopCache={loopCache} history={historyMock}/>
+        );
+        let dummyElement = document.createElement('div');
+        dummyElement.setAttribute("data-element-id","TCA_h2NMX_v1_0_ResourceInstanceName1_tca");
+
+        const event = { target: { parentNode: { parentNode:{ parentNode: dummyElement }}}};
+
+        component.simulate('click', event);
+        component.update();
+
+        expect(historyMock.push.mock.calls[0]).toEqual([ '/configurationPolicyModal/TCA_h2NMX_v1_0_ResourceInstanceName1_tca']);
+
+        //click operational policy
+        dummyElement.setAttribute("data-element-id","OPERATIONAL_h2NMX_v1_0_ResourceInstanceName1_tca");
+        const event2 = { target: { parentNode: { parentNode:{ parentNode: dummyElement }}}};
+
+        component.simulate('click', event2);
+        component.update();
+
+        expect(historyMock.push.mock.calls[1]).toEqual([ '/operationalPolicyModal']);
+    });
+
+    it('Test componentWillReceiveProps method', () => {
+        const localLoopCache = new LoopCache({
+        "microServicePolicies": [{
+            "name": "TCA_h2NMX_v1_0_ResourceInstanceName1_tca",
+            "modelType": "onap.policies.monitoring.cdap.tca.hi.lo.app",
+            "properties": {"domain": "measurementsForVfScaling"},
+            "shared": false,
+            "jsonRepresentation": {"schema": {}}
+          }]
+        });
+        const component = shallow(
+            <LoopSvg.WrappedComponent loopCache={localLoopCache}/>
+        );
+
+        expect(component.state('componentModalMapping').size).toEqual(2);
+
+        component.setProps({loopCache: loopCache});
+        expect(component.state('componentModalMapping').size).toEqual(3);
+    });
 });
diff --git a/ui-react/src/components/loop_viewer/svg/__snapshots__/LoopSvg.test.js.snap b/ui-react/src/components/loop_viewer/svg/__snapshots__/LoopSvg.test.js.snap
index 23d2225..cecfb42 100644
--- a/ui-react/src/components/loop_viewer/svg/__snapshots__/LoopSvg.test.js.snap
+++ b/ui-react/src/components/loop_viewer/svg/__snapshots__/LoopSvg.test.js.snap
@@ -1,7 +1,34 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`Verify LoopSvg Test the render method 1`] = `
-<ContextConsumer>
-  <Component />
-</ContextConsumer>
+<styled.div
+  dangerouslySetInnerHTML={
+    Object {
+      "__html": "<svg><text x=\\"20\\" y=\\"40\\">No LOOP (SVG)</text></svg>",
+    }
+  }
+  onClick={[Function]}
+/>
+`;
+
+exports[`Verify LoopSvg Test the render method no loopName 1`] = `
+<styled.div
+  dangerouslySetInnerHTML={
+    Object {
+      "__html": "<svg><text x=\\"20\\" y=\\"40\\">No LOOP (SVG)</text></svg>",
+    }
+  }
+  onClick={[Function]}
+/>
+`;
+
+exports[`Verify LoopSvg Test the render method svg not empty 1`] = `
+<styled.div
+  dangerouslySetInnerHTML={
+    Object {
+      "__html": "<svg><text test</text></svg>",
+    }
+  }
+  onClick={[Function]}
+/>
 `;
diff --git a/version.properties b/version.properties
index d611b20..e7d853a 100644
--- a/version.properties
+++ b/version.properties
@@ -26,8 +26,8 @@
 # because they are used in Jenkins, whose plug-in doesn't support
 
 major=4
-minor=1
-patch=3
+minor=2
+patch=0
 
 base_version=${major}.${minor}.${patch}