2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2021-2023 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.junit.jupiter.api.Assertions.assertDoesNotThrow;
24 import static org.junit.jupiter.api.Assertions.assertEquals;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.ArgumentMatchers.anyBoolean;
27 import static org.mockito.Mockito.mock;
28 import static org.mockito.Mockito.times;
29 import static org.mockito.Mockito.verify;
30 import static org.mockito.Mockito.when;
32 import java.util.List;
34 import java.util.UUID;
35 import org.junit.jupiter.api.Test;
36 import org.junit.jupiter.api.extension.ExtendWith;
37 import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantMessagePublisher;
38 import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
39 import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
40 import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
41 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
42 import org.onap.policy.clamp.models.acm.concepts.DeployState;
43 import org.onap.policy.clamp.models.acm.concepts.LockState;
44 import org.onap.policy.clamp.models.acm.concepts.ParticipantDeploy;
45 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionDeploy;
46 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionDeployAck;
47 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionMigration;
48 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
49 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.PropertiesUpdate;
50 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.DeployOrder;
51 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.LockOrder;
52 import org.springframework.test.context.junit.jupiter.SpringExtension;
54 @ExtendWith(SpringExtension.class)
55 class AutomationCompositionHandlerTest {
58 void handleAutomationCompositionStateChangeNullTest() {
59 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
60 var cacheProvider = mock(CacheProvider.class);
62 new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, mock(ThreadHandler.class));
64 var automationCompositionStateChange = new AutomationCompositionStateChange();
65 assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
67 automationCompositionStateChange.setAutomationCompositionId(UUID.randomUUID());
68 automationCompositionStateChange.setDeployOrderedState(DeployOrder.DELETE);
69 assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
70 verify(participantMessagePublisher).sendAutomationCompositionAck(any(AutomationCompositionDeployAck.class));
72 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
73 automationCompositionStateChange.setAutomationCompositionId(automationComposition.getInstanceId());
74 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
75 .thenReturn(automationComposition);
76 automationCompositionStateChange.setDeployOrderedState(DeployOrder.UPDATE);
77 assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
81 void handleAutomationCompositionStateChangeUndeployTest() {
82 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
83 var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
84 automationComposition.getInstanceId(), DeployOrder.UNDEPLOY, LockOrder.NONE);
85 var cacheProvider = mock(CacheProvider.class);
86 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
87 .thenReturn(automationComposition);
88 when(cacheProvider.getCommonProperties(any(UUID.class), any(UUID.class))).thenReturn(Map.of());
90 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
91 var listener = mock(ThreadHandler.class);
92 var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
93 ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
94 verify(listener, times(automationComposition.getElements().size())).undeploy(any(), any(), any());
95 for (var element : automationComposition.getElements().values()) {
96 assertEquals(DeployState.UNDEPLOYING, element.getDeployState());
101 void handleAutomationCompositionStateChangeLockTest() {
102 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
103 var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
104 automationComposition.getInstanceId(), DeployOrder.NONE, LockOrder.LOCK);
105 var cacheProvider = mock(CacheProvider.class);
106 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
107 .thenReturn(automationComposition);
108 when(cacheProvider.getCommonProperties(any(UUID.class), any(UUID.class))).thenReturn(Map.of());
110 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
111 var listener = mock(ThreadHandler.class);
112 var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
113 ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
114 verify(listener, times(automationComposition.getElements().size())).lock(any(), any(), any());
115 for (var element : automationComposition.getElements().values()) {
116 assertEquals(LockState.LOCKING, element.getLockState());
121 void handleAutomationCompositionStateChangeUnlockTest() {
122 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
123 var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
124 automationComposition.getInstanceId(), DeployOrder.NONE, LockOrder.UNLOCK);
125 var cacheProvider = mock(CacheProvider.class);
126 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
127 .thenReturn(automationComposition);
128 when(cacheProvider.getCommonProperties(any(UUID.class), any(UUID.class))).thenReturn(Map.of());
130 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
131 var listener = mock(ThreadHandler.class);
132 var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
133 ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
134 verify(listener, times(automationComposition.getElements().size())).unlock(any(), any(), any());
135 for (var element : automationComposition.getElements().values()) {
136 assertEquals(LockState.UNLOCKING, element.getLockState());
141 void handleAutomationCompositionStateChangeDeleteTest() {
142 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
143 var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
144 automationComposition.getInstanceId(), DeployOrder.DELETE, LockOrder.NONE);
145 var cacheProvider = mock(CacheProvider.class);
146 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
147 .thenReturn(automationComposition);
148 when(cacheProvider.getCommonProperties(any(UUID.class), any(UUID.class))).thenReturn(Map.of());
150 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
151 var listener = mock(ThreadHandler.class);
152 var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
153 ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
154 verify(listener, times(automationComposition.getElements().size())).delete(any(), any(), any());
155 for (var element : automationComposition.getElements().values()) {
156 assertEquals(DeployState.DELETING, element.getDeployState());
161 void handleAcPropertyUpdateTest() {
162 var cacheProvider = mock(CacheProvider.class);
163 var listener = mock(ThreadHandler.class);
164 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
165 var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
167 var updateMsg = new PropertiesUpdate();
168 assertDoesNotThrow(() -> ach.handleAcPropertyUpdate(updateMsg));
170 updateMsg.setParticipantId(CommonTestData.getParticipantId());
171 when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
172 var participantDeploy = new ParticipantDeploy();
173 participantDeploy.setParticipantId(CommonTestData.getParticipantId());
174 updateMsg.getParticipantUpdatesList().add(participantDeploy);
176 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
177 updateMsg.setAutomationCompositionId(automationComposition.getInstanceId());
178 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
179 .thenReturn(automationComposition);
180 var acElementDeploy = new AcElementDeploy();
181 acElementDeploy.setProperties(Map.of());
182 acElementDeploy.setId(automationComposition.getElements().values().iterator().next().getId());
183 participantDeploy.getAcElementList().add(acElementDeploy);
185 ach.handleAcPropertyUpdate(updateMsg);
186 verify(listener).update(any(), any(), any(), any());
190 void handleAutomationCompositionDeployTest() {
191 var cacheProvider = mock(CacheProvider.class);
192 var listener = mock(ThreadHandler.class);
193 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
194 var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
196 var deployMsg = new AutomationCompositionDeploy();
197 assertDoesNotThrow(() -> ach.handleAutomationCompositionDeploy(deployMsg));
199 deployMsg.setParticipantId(CommonTestData.getParticipantId());
200 when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
201 var participantDeploy = new ParticipantDeploy();
202 participantDeploy.setParticipantId(CommonTestData.getParticipantId());
203 deployMsg.getParticipantUpdatesList().add(participantDeploy);
205 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
206 deployMsg.setAutomationCompositionId(automationComposition.getInstanceId());
207 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
208 .thenReturn(automationComposition);
209 for (var element : automationComposition.getElements().values()) {
210 var acElementDeploy = new AcElementDeploy();
211 acElementDeploy.setProperties(Map.of());
212 acElementDeploy.setId(element.getId());
213 participantDeploy.getAcElementList().add(acElementDeploy);
215 ach.handleAutomationCompositionDeploy(deployMsg);
216 verify(listener, times(automationComposition.getElements().size())).deploy(any(), any(), any(), any());
220 void handleComposiotPrimeTest() {
221 var listener = mock(ThreadHandler.class);
222 var ach = new AutomationCompositionHandler(mock(CacheProvider.class), mock(ParticipantMessagePublisher.class),
224 var compositionId = UUID.randomUUID();
225 var list = List.of(new AutomationCompositionElementDefinition());
226 var messageId = UUID.randomUUID();
227 ach.prime(messageId, compositionId, list);
228 verify(listener).prime(messageId, compositionId, list);
232 void handleComposiotDeprimeTest() {
233 var listener = mock(ThreadHandler.class);
234 var ach = new AutomationCompositionHandler(mock(CacheProvider.class), mock(ParticipantMessagePublisher.class),
236 var compositionId = UUID.randomUUID();
237 var messageId = UUID.randomUUID();
238 ach.deprime(messageId, compositionId);
239 verify(listener).deprime(messageId, compositionId);
243 void restartedTest() {
244 var listener = mock(ThreadHandler.class);
245 var cacheProvider = mock(CacheProvider.class);
246 var ach = new AutomationCompositionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener);
248 var compositionId = UUID.randomUUID();
249 var messageId = UUID.randomUUID();
250 var list = List.of(new AutomationCompositionElementDefinition());
251 var state = AcTypeState.PRIMED;
252 var participantRestartAc = CommonTestData.createParticipantRestartAc();
253 var automationCompositionList = List.of(participantRestartAc);
254 ach.restarted(messageId, compositionId, list, state, automationCompositionList);
255 verify(cacheProvider).initializeAutomationComposition(compositionId, participantRestartAc);
256 verify(listener).restarted(messageId, compositionId, list, state, automationCompositionList);
260 void handleAutomationCompositionMigrationTest() {
261 var listener = mock(ThreadHandler.class);
262 var cacheProvider = mock(CacheProvider.class);
263 var ach = new AutomationCompositionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener);
264 var migrationMsg = new AutomationCompositionMigration();
265 assertDoesNotThrow(() -> ach.handleAutomationCompositionMigration(migrationMsg));
266 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
267 migrationMsg.setCompositionTargetId(UUID.randomUUID());
268 migrationMsg.setAutomationCompositionId(automationComposition.getInstanceId());
269 assertDoesNotThrow(() -> ach.handleAutomationCompositionMigration(migrationMsg));
270 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
271 .thenReturn(automationComposition);
272 var participantDeploy = new ParticipantDeploy();
273 participantDeploy.setParticipantId(CommonTestData.getParticipantId());
274 when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
275 migrationMsg.getParticipantUpdatesList().add(participantDeploy);
276 for (var element : automationComposition.getElements().values()) {
277 var acElementDeploy = new AcElementDeploy();
278 acElementDeploy.setProperties(Map.of());
279 acElementDeploy.setId(element.getId());
280 participantDeploy.getAcElementList().add(acElementDeploy);
283 ach.handleAutomationCompositionMigration(migrationMsg);
284 verify(listener, times(automationComposition.getElements().size())).migrate(any(), any(), any(), any(), any());