From 2064e725f74edf8fc7873c9ebef1d8bf7f65c5a8 Mon Sep 17 00:00:00 2001 From: FrancescoFioraEst Date: Thu, 4 Jan 2024 11:15:14 +0000 Subject: Add support for OutProperties instance in deploy scenario Add support for OutProperties instance, operationalState and useState in deploy scenario. Issue-ID: POLICY-4911 Change-Id: I47b5e63b21e4fedd625413de8e80797138fb8d8a Signed-off-by: FrancescoFioraEst --- .../intermediary/handler/CacheProvider.java | 12 +++- .../intermediary/handler/CacheProviderTest.java | 73 +++++++++++++--------- .../main/parameters/CommonTestData.java | 50 ++++++++++++++- 3 files changed, 100 insertions(+), 35 deletions(-) diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProvider.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProvider.java index 08d5ccd32..dc1bb051a 100644 --- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProvider.java +++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProvider.java @@ -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 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); } /** diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProviderTest.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProviderTest.java index f207dc511..e55de0192 100644 --- a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProviderTest.java +++ b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProviderTest.java @@ -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 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(); diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/main/parameters/CommonTestData.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/main/parameters/CommonTestData.java index acff103a2..46894fb43 100644 --- a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/main/parameters/CommonTestData.java +++ b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/main/parameters/CommonTestData.java @@ -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 + createAutomationCompositionElementDefinitionList(AutomationComposition automationComposition) { + List 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; + } } -- cgit 1.2.3-korg