Add support for OutProperties instance in deploy scenario 24/136924/1
authorFrancescoFioraEst <francesco.fiora@est.tech>
Thu, 4 Jan 2024 11:15:14 +0000 (11:15 +0000)
committerFrancesco Fiora <francesco.fiora@est.tech>
Thu, 4 Jan 2024 13:06:41 +0000 (13:06 +0000)
Add support for OutProperties instance, operationalState
and useState in deploy scenario.

Issue-ID: POLICY-4911
Change-Id: I47b5e63b21e4fedd625413de8e80797138fb8d8a
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProvider.java
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProviderTest.java
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/main/parameters/CommonTestData.java

index 08d5ccd..dc1bb05 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2023 Nordix Foundation.
+ *  Copyright (C) 2023-2024 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -133,6 +133,7 @@ public class CacheProvider {
      */
     public void initializeAutomationComposition(@NonNull UUID compositionId, @NonNull UUID instanceId,
             ParticipantDeploy participantDeploy) {
+        var acLast = automationCompositions.get(instanceId);
         Map<UUID, AutomationCompositionElement> acElementMap = new LinkedHashMap<>();
         for (var element : participantDeploy.getAcElementList()) {
             var acElement = new AutomationCompositionElement();
@@ -142,14 +143,19 @@ public class CacheProvider {
             acElement.setDeployState(DeployState.DEPLOYING);
             acElement.setLockState(LockState.NONE);
             acElement.setProperties(element.getProperties());
+            var acElementLast = acLast != null ? acLast.getElements().get(element.getId()) : null;
+            if (acElementLast != null) {
+                acElement.setOutProperties(acElementLast.getOutProperties());
+                acElement.setOperationalState(acElementLast.getOperationalState());
+                acElement.setUseState(acElementLast.getUseState());
+            }
             acElementMap.put(element.getId(), acElement);
         }
-
         var automationComposition = new AutomationComposition();
         automationComposition.setCompositionId(compositionId);
         automationComposition.setInstanceId(instanceId);
         automationComposition.setElements(acElementMap);
-        automationCompositions.put(automationComposition.getInstanceId(), automationComposition);
+        automationCompositions.put(instanceId, automationComposition);
     }
 
     /**
index f207dc5..e55de01 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2023 Nordix Foundation.
+ *  Copyright (C) 2023-2024 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,17 +24,10 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
 import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
-import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
-import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
-import org.onap.policy.clamp.models.acm.concepts.ParticipantDeploy;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
 
 class CacheProviderTest {
 
@@ -81,34 +74,19 @@ class CacheProviderTest {
     }
 
     @Test
-    void testinitCommonProperties() throws AutomationCompositionException {
-        var parameter = CommonTestData.getParticipantParameters();
-        var cacheProvider = new CacheProvider(parameter);
-        var participantDeploy = new ParticipantDeploy();
-        participantDeploy.setParticipantId(cacheProvider.getParticipantId());
-
-        var compositionId = UUID.randomUUID();
-
-        List<AutomationCompositionElementDefinition> definitions = new ArrayList<>();
+    void testinitCommonProperties() {
         var automationComposition =
                 CommonTestData.getTestAutomationCompositions().getAutomationCompositionList().get(0);
         automationComposition.setInstanceId(UUID.randomUUID());
+        var compositionId = UUID.randomUUID();
         automationComposition.setCompositionId(compositionId);
-        for (var element : automationComposition.getElements().values()) {
-            var acElementDefinition = new AutomationCompositionElementDefinition();
-            acElementDefinition.setAcElementDefinitionId(element.getDefinition());
-            var nodeTemplate = new ToscaNodeTemplate();
-            nodeTemplate.setProperties(Map.of("key", "value"));
-            acElementDefinition.setAutomationCompositionElementToscaNodeTemplate(nodeTemplate);
-            definitions.add(acElementDefinition);
-
-            var acElement = new AcElementDeploy();
-            acElement.setId(element.getId());
-            acElement.setDefinition(element.getDefinition());
-            participantDeploy.getAcElementList().add(acElement);
-        }
+        var definitions =
+                CommonTestData.createAutomationCompositionElementDefinitionList(automationComposition);
+        var cacheProvider = new CacheProvider(CommonTestData.getParticipantParameters());
         cacheProvider.addElementDefinition(compositionId, definitions);
 
+        var participantDeploy =
+                CommonTestData.createparticipantDeploy(cacheProvider.getParticipantId(), automationComposition);
         cacheProvider.initializeAutomationComposition(compositionId, automationComposition.getInstanceId(),
                 participantDeploy);
 
@@ -129,6 +107,41 @@ class CacheProviderTest {
         assertThat(cacheProvider.getAcElementsDefinitions()).isEmpty();
     }
 
+    @Test
+    void testDeply() {
+        var automationComposition =
+                CommonTestData.getTestAutomationCompositions().getAutomationCompositionList().get(0);
+        automationComposition.setInstanceId(UUID.randomUUID());
+        var compositionId = UUID.randomUUID();
+        automationComposition.setCompositionId(compositionId);
+        var parameter = CommonTestData.getParticipantParameters();
+        var cacheProvider = new CacheProvider(parameter);
+
+        var participantDeploy =
+                CommonTestData.createparticipantDeploy(cacheProvider.getParticipantId(), automationComposition);
+        cacheProvider.initializeAutomationComposition(compositionId, automationComposition.getInstanceId(),
+                participantDeploy);
+
+        var ac = cacheProvider.getAutomationComposition(automationComposition.getInstanceId());
+        for (var element : ac.getElements().values()) {
+            element.setOperationalState("OperationalState");
+            element.setUseState("UseState");
+            element.setOutProperties(Map.of("key", "value"));
+        }
+
+        // deploy again
+        cacheProvider.initializeAutomationComposition(compositionId, automationComposition.getInstanceId(),
+                participantDeploy);
+
+        // check UseState, OperationalState and OutProperties have not changed
+        ac = cacheProvider.getAutomationComposition(automationComposition.getInstanceId());
+        for (var element : ac.getElements().values()) {
+            assertEquals("OperationalState", element.getOperationalState());
+            assertEquals("UseState", element.getUseState());
+            assertEquals("value", element.getOutProperties().get("key"));
+        }
+    }
+
     @Test
     void testInitializeAutomationComposition() {
         var parameter = CommonTestData.getParticipantParameters();
index acff103..46894fb 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2023 Nordix Foundation.
+ *  Copyright (C) 2021-2024 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,6 +22,7 @@ package org.onap.policy.clamp.acm.participant.intermediary.main.parameters;
 
 import java.io.File;
 import java.time.Instant;
+import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -29,11 +30,14 @@ import java.util.TreeMap;
 import java.util.UUID;
 import org.onap.policy.clamp.acm.participant.intermediary.handler.DummyParticipantParameters;
 import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantIntermediaryParameters;
+import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
 import org.onap.policy.clamp.models.acm.concepts.AcElementRestart;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
 import org.onap.policy.clamp.models.acm.concepts.DeployState;
 import org.onap.policy.clamp.models.acm.concepts.LockState;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantDeploy;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantRestartAc;
 import org.onap.policy.clamp.models.acm.concepts.ParticipantSupportedElementType;
 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
@@ -44,6 +48,7 @@ import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
 
 /**
  * Class to hold/create all parameters for test cases.
@@ -202,7 +207,7 @@ public class CommonTestData {
      * Return a AutomationCompositionStateChange.
      *
      * @param participantId the participantId
-     * @param instanceId th AutomationComposition Id
+     * @param instanceId the AutomationComposition Id
      * @param deployOrder a DeployOrder
      * @param lockOrder a LockOrder
      * @return a AutomationCompositionStateChange
@@ -236,4 +241,45 @@ public class CommonTestData {
         participantRestartAc.getAcElementList().add(acElementRestart);
         return participantRestartAc;
     }
+
+    /**
+     * Create a ParticipantDeploy from an AutomationComposition.
+     *
+     * @param participantId the participantId
+     * @param automationComposition the AutomationComposition
+     * @return the ParticipantDeploy
+     */
+    public static ParticipantDeploy createparticipantDeploy(UUID participantId,
+            AutomationComposition automationComposition) {
+        var participantDeploy = new ParticipantDeploy();
+        participantDeploy.setParticipantId(participantId);
+        for (var element : automationComposition.getElements().values()) {
+            var acElement = new AcElementDeploy();
+            acElement.setId(element.getId());
+            acElement.setDefinition(element.getDefinition());
+            acElement.setProperties(element.getProperties());
+            participantDeploy.getAcElementList().add(acElement);
+        }
+        return participantDeploy;
+    }
+
+    /**
+     * create a List of AutomationCompositionElementDefinition from an AutomationComposition.
+     *
+     * @param automationComposition the AutomationComposition
+     * @return the List of AutomationCompositionElementDefinition
+     */
+    public static List<AutomationCompositionElementDefinition>
+            createAutomationCompositionElementDefinitionList(AutomationComposition automationComposition) {
+        List<AutomationCompositionElementDefinition> definitions = new ArrayList<>();
+        for (var element : automationComposition.getElements().values()) {
+            var acElementDefinition = new AutomationCompositionElementDefinition();
+            acElementDefinition.setAcElementDefinitionId(element.getDefinition());
+            var nodeTemplate = new ToscaNodeTemplate();
+            nodeTemplate.setProperties(Map.of("key", "value"));
+            acElementDefinition.setAutomationCompositionElementToscaNodeTemplate(nodeTemplate);
+            definitions.add(acElementDefinition);
+        }
+        return definitions;
+    }
 }