diff options
author | Sirisha_Manchikanti <sirisha.manchikanti@est.tech> | 2021-08-10 21:51:48 +0100 |
---|---|---|
committer | Sirisha_Manchikanti <sirisha.manchikanti@est.tech> | 2021-08-18 14:58:42 +0100 |
commit | d0a1bcee60c43a736a0526d49c07c564632c4f02 (patch) | |
tree | 32d46f33307a9bb65215a1f52eb626ae7db3d1ee /participant/participant-impl/participant-impl-policy/src/test/java | |
parent | a37bd982693785af5fc791df0baaa49dda039846 (diff) |
Updated ControlLoop component messages
Updated controlloop messages (ParticipantUpdate, ControlLoopUpdate,
ParticipantStatus) according to the following Wiki and added
implementation for the corresponding updates in runtime-controlloop and
participant components
https://wiki.onap.org/display/DW/The+CLAMP+Control+Loop+Participant+Protocol
Issue-ID: POLICY-3417
Signed-off-by: Sirisha_Manchikanti <sirisha.manchikanti@est.tech>
Change-Id: I80d96a7553a89ca47de2aa35e09df5a5c792acfa
Diffstat (limited to 'participant/participant-impl/participant-impl-policy/src/test/java')
3 files changed, 142 insertions, 152 deletions
diff --git a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java index 08e7154bb..df9a4b259 100644 --- a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java +++ b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java @@ -21,8 +21,10 @@ package org.onap.policy.clamp.controlloop.participant.policy.endtoend; import static org.assertj.core.api.Assertions.assertThatCode; +import static org.junit.Assert.assertEquals; import java.time.Instant; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -36,6 +38,8 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopInfo; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopStatistics; +import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition; +import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate; import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister; import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregisterAck; import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister; @@ -43,6 +47,7 @@ import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.Parti import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus; import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate; import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck; +import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ControlLoopUpdateListener; import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantDeregisterAckListener; import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantMessagePublisher; import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantRegisterAckListener; @@ -52,7 +57,7 @@ import org.onap.policy.clamp.controlloop.participant.policy.main.utils.TestListe import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; import org.onap.policy.common.endpoints.event.comm.TopicSink; import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; -import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; +import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; @@ -135,6 +140,9 @@ class ParticipantMessagesTest { ParticipantUpdateListener participantUpdateListener = new ParticipantUpdateListener(participantHandler); participantUpdateListener.onTopicEvent(INFRA, TOPIC, null, participantUpdateMsg); } + + // Verify the result of GET participants with what is stored + assertEquals("org.onap.PM_Policy", participantHandler.getParticipantId().getName()); } @Test @@ -156,13 +164,17 @@ class ParticipantMessagesTest { final ParticipantStatus heartbeat = new ParticipantStatus(); heartbeat.setParticipantId(getParticipantId()); ControlLoopInfo clInfo = getControlLoopInfo(getControlLoopId()); - heartbeat.setControlLoopInfoMap(Map.of(getControlLoopId().toString(), clInfo)); + clInfo.setControlLoopId(getControlLoopId()); + heartbeat.setControlLoopInfoList(List.of(clInfo)); ControlLoopElementDefinition clDefinition = getClElementDefinition(); - Map<UUID, ControlLoopElementDefinition> clElementDefinitionMap = Map.of(UUID.randomUUID(), clDefinition); - Map<String, Map<UUID, ControlLoopElementDefinition>> - participantDefinitionUpdateMap = Map.of(getParticipantId().toString(), clElementDefinitionMap); - heartbeat.setParticipantDefinitionUpdateMap(participantDefinitionUpdateMap); + List<ControlLoopElementDefinition> controlLoopElementDefinitionList = + List.of(clDefinition); + ParticipantDefinition participantDefinition = new ParticipantDefinition(); + participantDefinition.setParticipantId(getParticipantId()); + participantDefinition.setControlLoopElementDefinitionList(controlLoopElementDefinitionList); + List<ParticipantDefinition> participantDefinitionUpdates = List.of(participantDefinition); + heartbeat.setParticipantDefinitionUpdates(participantDefinitionUpdates); synchronized (lockit) { ParticipantMessagePublisher publisher = @@ -208,15 +220,15 @@ class ParticipantMessagesTest { } private ControlLoopElementDefinition getClElementDefinition() { - ToscaServiceTemplate toscaServiceTemplate = new ToscaServiceTemplate(); - toscaServiceTemplate.setName("serviceTemplate"); - toscaServiceTemplate.setDerivedFrom("parentServiceTemplate"); - toscaServiceTemplate.setDescription("Description of serviceTemplate"); - toscaServiceTemplate.setVersion("1.2.3"); + ToscaNodeTemplate toscaNodeTemplate = new ToscaNodeTemplate(); + toscaNodeTemplate.setName("serviceTemplate"); + toscaNodeTemplate.setDerivedFrom("parentServiceTemplate"); + toscaNodeTemplate.setDescription("Description of serviceTemplate"); + toscaNodeTemplate.setVersion("1.2.3"); ControlLoopElementDefinition clDefinition = new ControlLoopElementDefinition(); - clDefinition.setId(UUID.randomUUID()); - clDefinition.setControlLoopElementToscaServiceTemplate(toscaServiceTemplate); + clDefinition.setCommonPropertiesMap(Map.of("Prop1", "Prop1Value")); + clDefinition.setControlLoopElementToscaNodeTemplate(toscaNodeTemplate); Map<String, String> commonPropertiesMap = Map.of("Prop1", "PropValue"); clDefinition.setCommonPropertiesMap(commonPropertiesMap); return clDefinition; diff --git a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantPolicyTest.java b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantPolicyTest.java deleted file mode 100644 index 10563cde2..000000000 --- a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantPolicyTest.java +++ /dev/null @@ -1,103 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2021 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.clamp.controlloop.participant.policy.endtoend; - -import static org.junit.Assert.assertEquals; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState; -import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange; -import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate; -import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ControlLoopStateChangeListener; -import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ControlLoopUpdateListener; -import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler; -import org.onap.policy.clamp.controlloop.participant.policy.main.utils.TestListenerUtils; -import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; -import org.springframework.beans.factory.annotation.Autowired; -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.junit.jupiter.SpringExtension; - -@ExtendWith(SpringExtension.class) -@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) -@TestPropertySource(locations = {"classpath:application_test.properties"}) -class ParticipantPolicyTest { - - private static final Object lockit = new Object(); - private static final CommInfrastructure INFRA = CommInfrastructure.NOOP; - private static final String TOPIC = "my-topic"; - - @Autowired - private ParticipantHandler participantHandler; - - @Test - void testUpdatePolicyTypes() { - ControlLoopUpdate controlLoopUpdateMsg = TestListenerUtils.createControlLoopUpdateMsg(); - controlLoopUpdateMsg.getControlLoop().setOrderedState(ControlLoopOrderedState.PASSIVE); - - synchronized (lockit) { - ControlLoopUpdateListener clUpdateListener = new ControlLoopUpdateListener(participantHandler); - - clUpdateListener.onTopicEvent(INFRA, TOPIC, null, controlLoopUpdateMsg); - } - // Verify the result of GET participants with what is stored - assertEquals("org.onap.PM_Policy", participantHandler.getParticipantId().getName()); - } - - @Test - void testUpdatePolicies() throws Exception { - ControlLoopUpdate controlLoopUpdateMsg = TestListenerUtils.createControlLoopUpdateMsg(); - controlLoopUpdateMsg.getControlLoop().setOrderedState(ControlLoopOrderedState.PASSIVE); - - synchronized (lockit) { - ControlLoopUpdateListener clUpdateListener = new ControlLoopUpdateListener(participantHandler); - - clUpdateListener.onTopicEvent(INFRA, TOPIC, null, controlLoopUpdateMsg); - } - // Verify the result of GET participants with what is stored - assertEquals("org.onap.PM_Policy", participantHandler.getParticipantId().getName()); - } - - @Test - void testDeletePoliciesAndPolicyTypes() throws Exception { - ControlLoopUpdate controlLoopUpdateMsg = TestListenerUtils.createControlLoopUpdateMsg(); - controlLoopUpdateMsg.getControlLoop().setOrderedState(ControlLoopOrderedState.PASSIVE); - - synchronized (lockit) { - ControlLoopUpdateListener clUpdateListener = new ControlLoopUpdateListener(participantHandler); - - clUpdateListener.onTopicEvent(INFRA, TOPIC, null, controlLoopUpdateMsg); - } - // Verify the result of GET participants with what is stored - assertEquals("org.onap.PM_Policy", participantHandler.getParticipantId().getName()); - - ControlLoopStateChangeListener clStateChangeListener = new ControlLoopStateChangeListener(participantHandler); - ControlLoopStateChange controlLoopStateChangeMsg = - TestListenerUtils.createControlLoopStateChangeMsg(ControlLoopOrderedState.UNINITIALISED); - controlLoopStateChangeMsg.setOrderedState(ControlLoopOrderedState.UNINITIALISED); - clStateChangeListener.onTopicEvent(INFRA, TOPIC, null, controlLoopStateChangeMsg); - - // Verify the result of GET participants with what is stored - assertEquals("org.onap.PM_Policy", participantHandler.getParticipantId().getName()); - } -} diff --git a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java index f87714e0e..5984cf149 100644 --- a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java +++ b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java @@ -25,7 +25,9 @@ import static org.junit.Assert.assertTrue; import java.io.File; import java.io.FileNotFoundException; import java.time.Instant; +import java.util.ArrayList; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; @@ -34,6 +36,8 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementDefinition; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState; +import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition; +import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUpdates; import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange; import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate; import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate; @@ -55,6 +59,7 @@ public class TestListenerUtils { private static final Coder CODER = new StandardCoder(); static CommonTestData commonTestData = new CommonTestData(); private static final Logger LOGGER = LoggerFactory.getLogger(TestListenerUtils.class); + private static final String CONTROL_LOOP_ELEMENT = "ControlLoopElement"; private TestListenerUtils() {} @@ -130,47 +135,80 @@ public class TestListenerUtils { */ public static ControlLoopUpdate createControlLoopUpdateMsg() { final ControlLoopUpdate clUpdateMsg = new ControlLoopUpdate(); - ToscaConceptIdentifier controlLoopId = new ToscaConceptIdentifier(); - controlLoopId.setName("PMSHInstance0"); - controlLoopId.setVersion("1.0.0"); - - ToscaConceptIdentifier participantId = new ToscaConceptIdentifier(); - participantId.setName("org.onap.PM_Policy"); - participantId.setVersion("0.0.0"); + ToscaConceptIdentifier controlLoopId = + new ToscaConceptIdentifier("PMSHInstance0", "1.0.0"); + ToscaConceptIdentifier participantId = + new ToscaConceptIdentifier("org.onap.PM_Policy", "0.0.0"); clUpdateMsg.setControlLoopId(controlLoopId); clUpdateMsg.setParticipantId(participantId); + clUpdateMsg.setMessageId(UUID.randomUUID()); + clUpdateMsg.setTimestamp(Instant.now()); - ControlLoop controlLoop = new ControlLoop(); Map<UUID, ControlLoopElement> elements = new LinkedHashMap<>(); ToscaServiceTemplate toscaServiceTemplate = testControlLoopRead(); Map<String, ToscaNodeTemplate> nodeTemplatesMap = toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates(); for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : nodeTemplatesMap.entrySet()) { - ControlLoopElement clElement = new ControlLoopElement(); - clElement.setId(UUID.randomUUID()); + if (toscaInputEntry.getValue().getType().contains(CONTROL_LOOP_ELEMENT)) { + ControlLoopElement clElement = new ControlLoopElement(); + clElement.setId(UUID.randomUUID()); + ToscaConceptIdentifier clParticipantId; + try { + clParticipantId = CODER.decode( + toscaInputEntry.getValue().getProperties().get("participant_id").toString(), + ToscaConceptIdentifier.class); + } catch (CoderException e) { + throw new RuntimeException("cannot get ParticipantId from toscaNodeTemplate", e); + } - ToscaConceptIdentifier clElementParticipantId = new ToscaConceptIdentifier(); - clElementParticipantId.setName(toscaInputEntry.getKey()); - clElementParticipantId.setVersion(toscaInputEntry.getValue().getVersion()); - clElement.setParticipantId(clElementParticipantId); - clElement.setParticipantType(clElementParticipantId); + clElement.setParticipantId(clParticipantId); + clElement.setParticipantType(clParticipantId); - clElement.setDefinition(clElementParticipantId); - clElement.setState(ControlLoopState.UNINITIALISED); - clElement.setDescription(toscaInputEntry.getValue().getDescription()); - clElement.setOrderedState(ControlLoopOrderedState.UNINITIALISED); - elements.put(clElement.getId(), clElement); + clElement.setDefinition(new ToscaConceptIdentifier(toscaInputEntry.getKey(), + toscaInputEntry.getValue().getVersion())); + clElement.setState(ControlLoopState.UNINITIALISED); + clElement.setDescription(toscaInputEntry.getValue().getDescription()); + clElement.setOrderedState(ControlLoopOrderedState.PASSIVE); + elements.put(clElement.getId(), clElement); + } } - controlLoop.setElements(elements); - controlLoop.setName("PMSHInstance0"); - controlLoop.setVersion("1.0.0"); - controlLoop.setDefinition(controlLoopId); - clUpdateMsg.setControlLoop(controlLoop); + List<ParticipantUpdates> participantUpdates = new ArrayList<>(); + for (ControlLoopElement element : elements.values()) { + prepareParticipantUpdateForControlLoop(element, participantUpdates); + } + clUpdateMsg.setParticipantUpdatesList(participantUpdates); return clUpdateMsg; } + private static void prepareParticipantUpdateForControlLoop(ControlLoopElement clElement, + List<ParticipantUpdates> participantUpdates) { + if (participantUpdates.isEmpty()) { + participantUpdates.add(getControlLoopElementList(clElement)); + } else { + boolean participantExists = false; + for (ParticipantUpdates participantUpdate : participantUpdates) { + if (participantUpdate.getParticipantId().equals(clElement.getParticipantId())) { + participantUpdate.getControlLoopElementList().add(clElement); + participantExists = true; + } + } + if (!participantExists) { + participantUpdates.add(getControlLoopElementList(clElement)); + } + } + } + + private static ParticipantUpdates getControlLoopElementList(ControlLoopElement clElement) { + ParticipantUpdates participantUpdate = new ParticipantUpdates(); + List<ControlLoopElement> controlLoopElementList = new ArrayList<>(); + participantUpdate.setParticipantId(clElement.getParticipantId()); + controlLoopElementList.add(clElement); + participantUpdate.setControlLoopElementList(controlLoopElementList); + return participantUpdate; + } + /** * Method to create participantUpdateMsg. * @@ -192,20 +230,63 @@ public class TestListenerUtils { // Add policies to the toscaServiceTemplate TestListenerUtils.addPoliciesToToscaServiceTemplate(toscaServiceTemplate); - ControlLoopElementDefinition clDefinition = new ControlLoopElementDefinition(); - clDefinition.setId(UUID.randomUUID()); - clDefinition.setControlLoopElementToscaServiceTemplate(toscaServiceTemplate); - Map<String, String> commonPropertiesMap = Map.of("Prop1", "PropValue"); - clDefinition.setCommonPropertiesMap(commonPropertiesMap); + List<ParticipantDefinition> participantDefinitionUpdates = new ArrayList<>(); + for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : + toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().entrySet()) { + if (toscaInputEntry.getValue().getType().contains(CONTROL_LOOP_ELEMENT)) { + ToscaConceptIdentifier clParticipantId; + try { + clParticipantId = CODER.decode( + toscaInputEntry.getValue().getProperties().get("participant_id").toString(), + ToscaConceptIdentifier.class); + } catch (CoderException e) { + throw new RuntimeException("cannot get ParticipantId from toscaNodeTemplate", e); + } + prepareParticipantDefinitionUpdate(clParticipantId, toscaInputEntry.getKey(), + toscaInputEntry.getValue(), participantDefinitionUpdates); + } + } - Map<UUID, ControlLoopElementDefinition> controlLoopElementDefinitionMap = - Map.of(UUID.randomUUID(), clDefinition); + participantUpdateMsg.setParticipantDefinitionUpdates(participantDefinitionUpdates); + participantUpdateMsg.setToscaServiceTemplate(toscaServiceTemplate); + return participantUpdateMsg; + } - Map<String, Map<UUID, ControlLoopElementDefinition>> participantDefinitionUpdateMap = - Map.of(participantId.toString(), controlLoopElementDefinitionMap); - participantUpdateMsg.setParticipantDefinitionUpdateMap(participantDefinitionUpdateMap); + private static void prepareParticipantDefinitionUpdate(ToscaConceptIdentifier clParticipantId, String entryKey, + ToscaNodeTemplate entryValue, List<ParticipantDefinition> participantDefinitionUpdates) { + + var clDefinition = new ControlLoopElementDefinition(); + clDefinition.setClElementDefinitionId(new ToscaConceptIdentifier( + entryKey, entryValue.getVersion())); + clDefinition.setControlLoopElementToscaNodeTemplate(entryValue); + List<ControlLoopElementDefinition> controlLoopElementDefinitionList = new ArrayList<>(); + + if (participantDefinitionUpdates.isEmpty()) { + participantDefinitionUpdates.add(getParticipantDefinition(clDefinition, clParticipantId, + controlLoopElementDefinitionList)); + } else { + boolean participantExists = false; + for (ParticipantDefinition participantDefinitionUpdate : participantDefinitionUpdates) { + if (participantDefinitionUpdate.getParticipantId().equals(clParticipantId)) { + participantDefinitionUpdate.getControlLoopElementDefinitionList().add(clDefinition); + participantExists = true; + } + } + if (!participantExists) { + participantDefinitionUpdates.add(getParticipantDefinition(clDefinition, clParticipantId, + controlLoopElementDefinitionList)); + } + } + } - return participantUpdateMsg; + private static ParticipantDefinition getParticipantDefinition(ControlLoopElementDefinition clDefinition, + ToscaConceptIdentifier clParticipantId, + List<ControlLoopElementDefinition> controlLoopElementDefinitionList) { + ParticipantDefinition participantDefinition = new ParticipantDefinition(); + participantDefinition.setParticipantId(clParticipantId); + controlLoopElementDefinitionList.add(clDefinition); + participantDefinition.setControlLoopElementDefinitionList(controlLoopElementDefinitionList); + return participantDefinition; } /** |