From aa7fd8ddced2e3218fa85e131e1eff59ff33e22f Mon Sep 17 00:00:00 2001
From: sebdet <sebastien.determe@intl.att.com>
Date: Thu, 9 May 2019 16:50:17 +0200
Subject: Generate Random UUID for DCAE

Generate random UUI for DCAE deployment during deploy action

Issue-ID: CLAMP-376
Change-Id: Idfc1959891738f0142d2c20e1f43f1ad45d8eaa7
Signed-off-by: sebdet <sebastien.determe@intl.att.com>
---
 .../java/org/onap/clamp/loop/LoopOperation.java    | 74 ++++++++++++++--------
 .../resources/clds/camel/rest/clamp-api-v2.xml     |  4 +-
 .../resources/clds/camel/routes/flexible-flow.xml  | 12 ++--
 .../onap/clamp/loop/LoopOperationTestItCase.java   | 23 +++----
 4 files changed, 66 insertions(+), 47 deletions(-)

(limited to 'src')

diff --git a/src/main/java/org/onap/clamp/loop/LoopOperation.java b/src/main/java/org/onap/clamp/loop/LoopOperation.java
index 518830aa0..172b77c28 100644
--- a/src/main/java/org/onap/clamp/loop/LoopOperation.java
+++ b/src/main/java/org/onap/clamp/loop/LoopOperation.java
@@ -30,6 +30,7 @@ import com.google.gson.JsonObject;
 import java.io.IOException;
 import java.util.Iterator;
 import java.util.Set;
+import java.util.UUID;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -52,8 +53,7 @@ public class LoopOperation {
     private static final String DCAE_STATUS_FIELD = "status";
     private static final String DCAE_SERVICETYPE_ID = "serviceTypeId";
     private static final String DCAE_INPUTS = "inputs";
-    private static final String DCAE_DEPLOYMENT_PREFIX = "closedLoop_";
-    private static final String DCAE_DEPLOYMENT_SUFIX = "_deploymentId";
+    private static final String DCAE_DEPLOYMENT_PREFIX = "CLAMP_";
     private static final String DEPLOYMENT_PARA = "dcaeDeployParameters";
     private final LoopService loopService;
 
@@ -63,8 +63,11 @@ public class LoopOperation {
 
     /**
      * The constructor.
-     * @param loopService The loop service
-     * @param refProp The clamp properties
+     *
+     * @param loopService
+     *        The loop service
+     * @param refProp
+     *        The clamp properties
      */
     @Autowired
     public LoopOperation(LoopService loopService) {
@@ -74,9 +77,11 @@ public class LoopOperation {
     /**
      * Get the payload used to send the deploy closed loop request.
      *
-     * @param loop The loop
+     * @param loop
+     *        The loop
      * @return The payload used to send deploy closed loop request
-     * @throws IOException IOException
+     * @throws IOException
+     *         IOException
      */
     public String getDeployPayload(Loop loop) throws IOException {
         JsonObject globalProp = loop.getGlobalPropertiesJson();
@@ -98,9 +103,11 @@ public class LoopOperation {
     /**
      * Get the deployment id.
      *
-     * @param loop The loop
+     * @param loop
+     *        The loop
      * @return The deployment id
-     * @throws IOException IOException
+     * @throws IOException
+     *         IOException
      */
     public String getDeploymentId(Loop loop) {
         // Set the deploymentId if not present yet
@@ -109,7 +116,7 @@ public class LoopOperation {
         if (loop.getDcaeDeploymentId() != null && !loop.getDcaeDeploymentId().isEmpty()) {
             deploymentId = loop.getDcaeDeploymentId();
         } else {
-            deploymentId = DCAE_DEPLOYMENT_PREFIX + loop.getName() + DCAE_DEPLOYMENT_SUFIX;
+            deploymentId = DCAE_DEPLOYMENT_PREFIX + UUID.randomUUID();
         }
         return deploymentId;
     }
@@ -117,10 +124,14 @@ public class LoopOperation {
     /**
      * Update the loop info.
      *
-     * @param camelExchange The camel exchange
-     * @param loop The loop
-     * @param deploymentId The deployment id
-     * @throws ParseException The parse exception
+     * @param camelExchange
+     *        The camel exchange
+     * @param loop
+     *        The loop
+     * @param deploymentId
+     *        The deployment id
+     * @throws ParseException
+     *         The parse exception
      */
     public void updateLoopInfo(Exchange camelExchange, Loop loop, String deploymentId) throws ParseException {
         Message in = camelExchange.getIn();
@@ -133,8 +144,9 @@ public class LoopOperation {
         JSONObject linksObj = (JSONObject) jsonObj.get(DCAE_LINK_FIELD);
         String statusUrl = (String) linksObj.get(DCAE_STATUS_FIELD);
 
-        // use http4 instead of http, because camel http4 component is used to do the http call
-        String newStatusUrl = statusUrl.replaceAll("http:", "http4:");
+        // use http4 instead of http, because camel http4 component is used to do the
+        // http call
+        String newStatusUrl = statusUrl.replaceAll("http:", "http4:").replaceAll("https:", "https4:");
 
         loop.setDcaeDeploymentId(deploymentId);
         loop.setDcaeDeploymentStatusUrl(newStatusUrl);
@@ -144,9 +156,11 @@ public class LoopOperation {
     /**
      * Get the Closed Loop status based on the reply from Policy.
      *
-     * @param statusCode The status code
+     * @param statusCode
+     *        The status code
      * @return The state based on policy response
-     * @throws ParseException The parse exception
+     * @throws ParseException
+     *         The parse exception
      */
     public String analysePolicyResponse(int statusCode) {
         if (statusCode == 200) {
@@ -160,11 +174,12 @@ public class LoopOperation {
     /**
      * Get the name of the first Operational policy.
      *
-     * @param loop The closed loop
+     * @param loop
+     *        The closed loop
      * @return The name of the first operational policy
      */
     public String getOperationalPolicyName(Loop loop) {
-        Set<OperationalPolicy> opSet = (Set<OperationalPolicy>)loop.getOperationalPolicies();
+        Set<OperationalPolicy> opSet = loop.getOperationalPolicies();
         Iterator<OperationalPolicy> iterator = opSet.iterator();
         while (iterator.hasNext()) {
             OperationalPolicy policy = iterator.next();
@@ -176,9 +191,11 @@ public class LoopOperation {
     /**
      * Get the Closed Loop status based on the reply from DCAE.
      *
-     * @param camelExchange The camel exchange
+     * @param camelExchange
+     *        The camel exchange
      * @return The state based on DCAE response
-     * @throws ParseException The parse exception
+     * @throws ParseException
+     *         The parse exception
      */
     public String analyseDcaeResponse(Exchange camelExchange, Integer statusCode) throws ParseException {
         if (statusCode == null) {
@@ -212,12 +229,17 @@ public class LoopOperation {
     }
 
     /**
-     * Update the status of the closed loop based on the response from Policy and DCAE.
+     * Update the status of the closed loop based on the response from Policy and
+     * DCAE.
      *
-     * @param loop The closed loop
-     * @param policyState The state get from Policy
-     * @param dcaeState The state get from DCAE
-     * @throws ParseException The parse exception
+     * @param loop
+     *        The closed loop
+     * @param policyState
+     *        The state get from Policy
+     * @param dcaeState
+     *        The state get from DCAE
+     * @throws ParseException
+     *         The parse exception
      */
     public LoopState updateLoopStatus(Loop loop, TempLoopState policyState, TempLoopState dcaeState) {
         LoopState clState = LoopState.IN_ERROR;
diff --git a/src/main/resources/clds/camel/rest/clamp-api-v2.xml b/src/main/resources/clds/camel/rest/clamp-api-v2.xml
index 7e0c891ee..692e342d7 100644
--- a/src/main/resources/clds/camel/rest/clamp-api-v2.xml
+++ b/src/main/resources/clds/camel/rest/clamp-api-v2.xml
@@ -216,7 +216,7 @@
 							<simple> ${exchangeProperty[policyStatus]} == 'SUBMITTED' and
 								${exchangeProperty[dcaeStatus]} == 'NOT_DEPLOYED'
 							</simple>
-							<to uri="direct:deploy-closedloop" />
+							<to uri="direct:deploy-loop" />
 						</when>
 						<otherwise>
 							<log
@@ -268,7 +268,7 @@
 						<when>
 							<simple> ${exchangeProperty[dcaeStatus]} == 'DEPLOYED'
 							</simple>
-							<to uri="direct:undeploy-closedloop" />
+							<to uri="direct:undeploy-loop" />
 						</when>
 						<otherwise>
 							<log
diff --git a/src/main/resources/clds/camel/routes/flexible-flow.xml b/src/main/resources/clds/camel/routes/flexible-flow.xml
index 920e1e549..790a1679b 100644
--- a/src/main/resources/clds/camel/routes/flexible-flow.xml
+++ b/src/main/resources/clds/camel/routes/flexible-flow.xml
@@ -489,8 +489,8 @@
 			</doFinally>
 		</doTry>
 	</route>
-	<route id="deploy-closedloop">
-		<from uri="direct:deploy-closedloop" />
+	<route id="deploy-loop">
+		<from uri="direct:deploy-loop" />
 		<doTry>
 			<log
 				loggingLevel="INFO"
@@ -535,19 +535,19 @@
 				<to
 					uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
 				<setProperty propertyName="logMessage">
-					<simple>Deploy closed loop status</simple>
+					<simple>Deploy closed loop status (id:${exchangeProperty[deploymentId]})</simple>
 				</setProperty>
 				<to uri="direct:dump-loop-log-http-response" />
 			</doFinally>
 		</doTry>
 	</route>
 
-	<route id="undeploy-closedloop">
-		<from uri="direct:undeploy-closedloop" />
+	<route id="undeploy-loop">
+		<from uri="direct:undeploy-loop" />
 		<doTry>
 			<log
 				loggingLevel="INFO"
-				message="UNdeploy the closed loop: ${exchangeProperty[loopObject].getName()} : ${exchangeProperty[loopObject].getDcaeDeploymentId()}" />
+				message="Undeploy the closed loop: ${exchangeProperty[loopObject].getName()} : ${exchangeProperty[loopObject].getDcaeDeploymentId()}" />
 			<to
 				uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Undeploy closed loop')" />
 
diff --git a/src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java
index 93274788d..a2c97e0c0 100644
--- a/src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java
+++ b/src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java
@@ -55,15 +55,12 @@ public class LoopOperationTestItCase {
     LoopService loopService;
 
     private Loop createTestLoop() {
-        String yaml = "imports:\n"
-            + "  - \"http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\"\n"
-            + "node_templates:\n"
-            + "  docker_service_host:\n"
-            + "    type: dcae.nodes.SelectedDockerHost";
+        String yaml = "imports:\n" + "  - \"http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\"\n"
+            + "node_templates:\n" + "  docker_service_host:\n" + "    type: dcae.nodes.SelectedDockerHost";
 
         Loop loopTest = new Loop("ControlLoopTest", yaml, "<xml></xml>");
-        loopTest.setGlobalPropertiesJson(new Gson().fromJson("{\"dcaeDeployParameters\":"
-                + "{\"policy_id\": \"name\"}}", JsonObject.class));
+        loopTest.setGlobalPropertiesJson(
+            new Gson().fromJson("{\"dcaeDeployParameters\":" + "{\"policy_id\": \"name\"}}", JsonObject.class));
         loopTest.setLastComputedState(LoopState.DESIGN);
         loopTest.setDcaeDeploymentId("123456789");
         loopTest.setDcaeDeploymentStatusUrl("http4://localhost:8085");
@@ -71,14 +68,13 @@ public class LoopOperationTestItCase {
 
         MicroServicePolicy microServicePolicy = new MicroServicePolicy("configPolicyTest", "",
             "tosca_definitions_version: tosca_simple_yaml_1_0_0", true,
-             gson.fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>());
+            gson.fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>());
         microServicePolicy.setProperties(new Gson().fromJson("{\"param1\":\"value1\"}", JsonObject.class));
 
         loopTest.addMicroServicePolicy(microServicePolicy);
         return loopTest;
     }
 
-
     @Test
     public void testAnalysePolicyResponse() {
         LoopOperation loopOp = new LoopOperation(loopService);
@@ -102,7 +98,7 @@ public class LoopOperationTestItCase {
         assertThat(opName1).isNull();
 
         OperationalPolicy opPolicy1 = new OperationalPolicy("OperationalPolicyTest1", null,
-                gson.fromJson("{\"type\":\"Operational\"}", JsonObject.class));
+            gson.fromJson("{\"type\":\"Operational\"}", JsonObject.class));
         loop.addOperationalPolicy(opPolicy1);
         String opName2 = loopOp.getOperationalPolicyName(loop);
         assertThat(opName2).isEqualTo("OperationalPolicyTest1");
@@ -212,7 +208,7 @@ public class LoopOperationTestItCase {
         loopOp.updateLoopInfo(camelExchange, loop, "testNewId");
 
         Loop newLoop = loopService.getLoop(loop.getName());
-        String newDeployId =  newLoop.getDcaeDeploymentId();
+        String newDeployId = newLoop.getDcaeDeploymentId();
         String newDeploymentStatusUrl = newLoop.getDcaeDeploymentStatusUrl();
 
         assertThat(newDeployId).isEqualTo("testNewId");
@@ -228,11 +224,12 @@ public class LoopOperationTestItCase {
 
         loop.setDcaeDeploymentId(null);
         String deploymentId2 = loopOp.getDeploymentId(loop);
-        assertThat(deploymentId2).isEqualTo("closedLoop_ControlLoopTest_deploymentId");
+        assertThat(deploymentId2).startsWith("CLAMP_");
 
         loop.setDcaeDeploymentId("");
         String deploymentId3 = loopOp.getDeploymentId(loop);
-        assertThat(deploymentId3).isEqualTo("closedLoop_ControlLoopTest_deploymentId");
+        assertThat(deploymentId3).startsWith("CLAMP_");
+        assertThat(deploymentId3).isNotEqualTo(deploymentId2);
     }
 
     @Test
-- 
cgit 1.2.3-korg