2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2021-2022 Nordix Foundation.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.clamp.acm.participant.intermediary.handler;
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
25 import static org.junit.jupiter.api.Assertions.assertEquals;
26 import static org.junit.jupiter.api.Assertions.assertNotNull;
27 import static org.junit.jupiter.api.Assertions.assertNull;
28 import static org.mockito.Mockito.mock;
30 import java.util.List;
31 import java.util.UUID;
32 import org.junit.jupiter.api.Test;
33 import org.junit.jupiter.api.extension.ExtendWith;
34 import org.onap.policy.clamp.acm.participant.intermediary.api.AutomationCompositionElementListener;
35 import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
36 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
37 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
38 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
39 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
40 import org.onap.policy.clamp.models.acm.concepts.ParticipantUpdates;
41 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
42 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionUpdate;
43 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
44 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
45 import org.springframework.test.context.junit.jupiter.SpringExtension;
47 @ExtendWith(SpringExtension.class)
48 class AutomationCompositionHandlerTest {
50 private final CommonTestData commonTestData = new CommonTestData();
53 void automationCompositionHandlerTest() {
54 var ach = commonTestData.getMockAutomationCompositionHandler();
55 assertNotNull(ach.getAutomationCompositionMap());
56 assertNotNull(ach.getElementsOnThisParticipant());
58 var elementId1 = UUID.randomUUID();
59 var element = new AutomationCompositionElement();
60 element.setId(elementId1);
61 element.setDefinition(
62 new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "1.0.1"));
64 element.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
66 AutomationCompositionElementListener listener = mock(AutomationCompositionElementListener.class);
67 ach.registerAutomationCompositionElementListener(listener);
68 assertThat(ach.getListeners()).contains(listener);
72 void updateNullAutomationCompositionHandlerTest() {
73 var id = UUID.randomUUID();
75 var ach = commonTestData.getMockAutomationCompositionHandler();
76 assertNull(ach.updateAutomationCompositionElementState(null, null,
77 AutomationCompositionOrderedState.UNINITIALISED, AutomationCompositionState.PASSIVE));
79 assertNull(ach.updateAutomationCompositionElementState(null, id,
80 AutomationCompositionOrderedState.UNINITIALISED, AutomationCompositionState.PASSIVE));
84 void updateAutomationCompositionHandlerTest() {
85 var uuid = UUID.randomUUID();
86 var partecipantId = CommonTestData.getParticipantId();
87 var definition = CommonTestData.getDefinition();
89 var ach = commonTestData.setTestAutomationCompositionHandler(definition, uuid, partecipantId);
90 var key = ach.getElementsOnThisParticipant().keySet().iterator().next();
91 var value = ach.getElementsOnThisParticipant().get(key);
92 assertEquals(AutomationCompositionState.UNINITIALISED, value.getState());
93 ach.updateAutomationCompositionElementState(CommonTestData.AC_ID_1, uuid,
94 AutomationCompositionOrderedState.UNINITIALISED, AutomationCompositionState.PASSIVE);
95 assertEquals(AutomationCompositionState.PASSIVE, value.getState());
97 ach.getAutomationCompositionMap().values().iterator().next().getElements().putIfAbsent(key, value);
98 ach.updateAutomationCompositionElementState(CommonTestData.AC_ID_1, key,
99 AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.RUNNING);
100 assertEquals(AutomationCompositionState.RUNNING, value.getState());
102 ach.getElementsOnThisParticipant().remove(key, value);
103 ach.getAutomationCompositionMap().values().iterator().next().getElements().clear();
104 assertNull(ach.updateAutomationCompositionElementState(CommonTestData.AC_ID_1, key,
105 AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.RUNNING));
110 void handleAutomationCompositionUpdateExceptionTest() {
111 var uuid = UUID.randomUUID();
112 var partecipantId = CommonTestData.getParticipantId();
113 var definition = CommonTestData.getDefinition();
114 var stateChange = commonTestData.getStateChange(partecipantId, uuid, AutomationCompositionOrderedState.RUNNING);
115 var ach = commonTestData.setTestAutomationCompositionHandler(definition, uuid, partecipantId);
116 assertDoesNotThrow(() -> ach
117 .handleAutomationCompositionStateChange(mock(AutomationCompositionStateChange.class), List.of()));
119 ach.handleAutomationCompositionStateChange(stateChange, List.of());
120 var newPartecipantId = CommonTestData.getRndParticipantId();
121 stateChange.setAutomationCompositionId(UUID.randomUUID());
122 stateChange.setParticipantId(newPartecipantId);
123 assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChange, List.of()));
125 var acd = new AutomationCompositionElementDefinition();
126 acd.setAcElementDefinitionId(definition);
127 var updateMsg = new AutomationCompositionUpdate();
128 updateMsg.setAutomationCompositionId(UUID.randomUUID());
129 updateMsg.setMessageId(uuid);
130 updateMsg.setParticipantId(partecipantId);
131 updateMsg.setStartPhase(0);
132 var acElementDefinitions = List.of(acd);
133 assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, acElementDefinitions));
134 updateMsg.setStartPhase(1);
135 assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, acElementDefinitions));
137 ach.getAutomationCompositionMap().clear();
138 updateMsg.setStartPhase(0);
139 assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, acElementDefinitions));
141 updateMsg.setAutomationCompositionId(UUID.randomUUID());
142 updateMsg.setParticipantUpdatesList(List.of(mock(ParticipantUpdates.class)));
143 assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, acElementDefinitions));
145 updateMsg.setStartPhase(1);
146 var participantUpdate = new ParticipantUpdates();
147 participantUpdate.setParticipantId(partecipantId);
148 var element = new AutomationCompositionElement();
149 element.setParticipantType(definition);
150 element.setDefinition(definition);
151 participantUpdate.setAutomationCompositionElementList(List.of(element));
152 updateMsg.setParticipantUpdatesList(List.of(participantUpdate));
154 var acd2 = new AutomationCompositionElementDefinition();
155 acd2.setAcElementDefinitionId(definition);
156 acd2.setAutomationCompositionElementToscaNodeTemplate(mock(ToscaNodeTemplate.class));
157 assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, List.of(acd2)));
162 void automationCompositionStateChangeUninitialisedTest() {
163 var uuid = UUID.randomUUID();
164 var partecipantId = CommonTestData.getParticipantId();
165 var definition = CommonTestData.getDefinition();
167 var stateChangeUninitialised =
168 commonTestData.getStateChange(partecipantId, uuid, AutomationCompositionOrderedState.UNINITIALISED);
170 var ach = commonTestData.setTestAutomationCompositionHandler(definition, uuid, partecipantId);
171 ach.handleAutomationCompositionStateChange(stateChangeUninitialised, List.of());
172 stateChangeUninitialised.setAutomationCompositionId(UUID.randomUUID());
173 stateChangeUninitialised.setParticipantId(CommonTestData.getRndParticipantId());
174 assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChangeUninitialised, List.of()));
178 void automationCompositionStateChangePassiveTest() {
179 var uuid = UUID.randomUUID();
180 var partecipantId = CommonTestData.getParticipantId();
181 var definition = CommonTestData.getDefinition();
183 var stateChangePassive =
184 commonTestData.getStateChange(partecipantId, uuid, AutomationCompositionOrderedState.PASSIVE);
186 var ach = commonTestData.setTestAutomationCompositionHandler(definition, uuid, partecipantId);
187 ach.handleAutomationCompositionStateChange(stateChangePassive, List.of());
188 stateChangePassive.setAutomationCompositionId(UUID.randomUUID());
189 stateChangePassive.setParticipantId(CommonTestData.getRndParticipantId());
190 assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChangePassive, List.of()));