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.mockito.ArgumentMatchers.any;
25 import static org.mockito.Mockito.mock;
26 import static org.mockito.Mockito.times;
27 import static org.mockito.Mockito.verify;
28 import static org.mockito.Mockito.when;
30 import java.util.List;
32 import java.util.UUID;
33 import org.junit.jupiter.api.Test;
34 import org.junit.jupiter.api.extension.ExtendWith;
35 import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantMessagePublisher;
36 import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
37 import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
38 import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
39 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
40 import org.onap.policy.clamp.models.acm.concepts.ParticipantDeploy;
41 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionDeploy;
42 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionDeployAck;
43 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
44 import org.onap.policy.clamp.models.acm.messages.dmaap.participant.PropertiesUpdate;
45 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.DeployOrder;
46 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.LockOrder;
47 import org.springframework.test.context.junit.jupiter.SpringExtension;
49 @ExtendWith(SpringExtension.class)
50 class AutomationCompositionHandlerTest {
53 void handleAutomationCompositionStateChangeNullTest() {
54 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
55 var cacheProvider = mock(CacheProvider.class);
57 new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, mock(ThreadHandler.class));
59 var automationCompositionStateChange = new AutomationCompositionStateChange();
60 assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
62 automationCompositionStateChange.setAutomationCompositionId(UUID.randomUUID());
63 automationCompositionStateChange.setDeployOrderedState(DeployOrder.DELETE);
64 assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
65 verify(participantMessagePublisher).sendAutomationCompositionAck(any(AutomationCompositionDeployAck.class));
67 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
68 automationCompositionStateChange.setAutomationCompositionId(automationComposition.getInstanceId());
69 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
70 .thenReturn(automationComposition);
71 automationCompositionStateChange.setDeployOrderedState(DeployOrder.UPDATE);
72 assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
76 void handleAutomationCompositionStateChangeUndeployTest() {
77 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
78 var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
79 automationComposition.getInstanceId(), DeployOrder.UNDEPLOY, LockOrder.NONE);
80 var cacheProvider = mock(CacheProvider.class);
81 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
82 .thenReturn(automationComposition);
83 when(cacheProvider.getCommonProperties(any(UUID.class), any(UUID.class))).thenReturn(Map.of());
85 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
86 var listener = mock(ThreadHandler.class);
87 var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
88 ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
89 verify(listener, times(automationComposition.getElements().size())).undeploy(any(), any(), any());
93 void handleAutomationCompositionStateChangeLockTest() {
94 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
95 var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
96 automationComposition.getInstanceId(), DeployOrder.NONE, LockOrder.LOCK);
97 var cacheProvider = mock(CacheProvider.class);
98 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
99 .thenReturn(automationComposition);
100 when(cacheProvider.getCommonProperties(any(UUID.class), any(UUID.class))).thenReturn(Map.of());
102 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
103 var listener = mock(ThreadHandler.class);
104 var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
105 ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
106 verify(listener, times(automationComposition.getElements().size())).lock(any(), any(), any());
110 void handleAutomationCompositionStateChangeUnlockTest() {
111 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
112 var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
113 automationComposition.getInstanceId(), DeployOrder.NONE, LockOrder.UNLOCK);
114 var cacheProvider = mock(CacheProvider.class);
115 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
116 .thenReturn(automationComposition);
117 when(cacheProvider.getCommonProperties(any(UUID.class), any(UUID.class))).thenReturn(Map.of());
119 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
120 var listener = mock(ThreadHandler.class);
121 var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
122 ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
123 verify(listener, times(automationComposition.getElements().size())).unlock(any(), any(), any());
127 void handleAutomationCompositionStateChangeDeleteTest() {
128 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
129 var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
130 automationComposition.getInstanceId(), DeployOrder.DELETE, LockOrder.NONE);
131 var cacheProvider = mock(CacheProvider.class);
132 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
133 .thenReturn(automationComposition);
134 when(cacheProvider.getCommonProperties(any(UUID.class), any(UUID.class))).thenReturn(Map.of());
136 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
137 var listener = mock(ThreadHandler.class);
138 var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
139 ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
140 verify(listener, times(automationComposition.getElements().size())).delete(any(), any(), any());
144 void handleAcPropertyUpdateTest() {
145 var cacheProvider = mock(CacheProvider.class);
146 var listener = mock(ThreadHandler.class);
147 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
148 var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
150 var updateMsg = new PropertiesUpdate();
151 assertDoesNotThrow(() -> ach.handleAcPropertyUpdate(updateMsg));
153 updateMsg.setParticipantId(CommonTestData.getParticipantId());
154 when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
155 var participantDeploy = new ParticipantDeploy();
156 participantDeploy.setParticipantId(CommonTestData.getParticipantId());
157 updateMsg.getParticipantUpdatesList().add(participantDeploy);
159 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
160 updateMsg.setAutomationCompositionId(automationComposition.getInstanceId());
161 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
162 .thenReturn(automationComposition);
163 var acElementDeploy = new AcElementDeploy();
164 acElementDeploy.setProperties(Map.of());
165 acElementDeploy.setId(automationComposition.getElements().values().iterator().next().getId());
166 participantDeploy.getAcElementList().add(acElementDeploy);
168 ach.handleAcPropertyUpdate(updateMsg);
169 verify(listener).update(any(), any(), any(), any());
173 void handleAutomationCompositionDeployTest() {
174 var cacheProvider = mock(CacheProvider.class);
175 var listener = mock(ThreadHandler.class);
176 var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
177 var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
179 var deployMsg = new AutomationCompositionDeploy();
180 assertDoesNotThrow(() -> ach.handleAutomationCompositionDeploy(deployMsg));
182 deployMsg.setParticipantId(CommonTestData.getParticipantId());
183 when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
184 var participantDeploy = new ParticipantDeploy();
185 participantDeploy.setParticipantId(CommonTestData.getParticipantId());
186 deployMsg.getParticipantUpdatesList().add(participantDeploy);
188 var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
189 deployMsg.setAutomationCompositionId(automationComposition.getInstanceId());
190 when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
191 .thenReturn(automationComposition);
192 for (var element : automationComposition.getElements().values()) {
193 var acElementDeploy = new AcElementDeploy();
194 acElementDeploy.setProperties(Map.of());
195 acElementDeploy.setId(element.getId());
196 participantDeploy.getAcElementList().add(acElementDeploy);
198 ach.handleAutomationCompositionDeploy(deployMsg);
199 verify(listener, times(automationComposition.getElements().size())).deploy(any(), any(), any(), any());
203 void handleComposiotPrimeTest() {
204 var listener = mock(ThreadHandler.class);
205 var ach = new AutomationCompositionHandler(mock(CacheProvider.class), mock(ParticipantMessagePublisher.class),
207 var compositionId = UUID.randomUUID();
208 var list = List.of(new AutomationCompositionElementDefinition());
209 var messageId = UUID.randomUUID();
210 ach.prime(messageId, compositionId, list);
211 verify(listener).prime(messageId, compositionId, list);
215 void handleComposiotDeprimeTest() {
216 var listener = mock(ThreadHandler.class);
217 var ach = new AutomationCompositionHandler(mock(CacheProvider.class), mock(ParticipantMessagePublisher.class),
219 var compositionId = UUID.randomUUID();
220 var messageId = UUID.randomUUID();
221 ach.deprime(messageId, compositionId);
222 verify(listener).deprime(messageId, compositionId);
226 void restartedTest() {
227 var listener = mock(ThreadHandler.class);
228 var cacheProvider = mock(CacheProvider.class);
229 var ach = new AutomationCompositionHandler(cacheProvider, mock(ParticipantMessagePublisher.class),
232 var compositionId = UUID.randomUUID();
233 var messageId = UUID.randomUUID();
234 var list = List.of(new AutomationCompositionElementDefinition());
235 var state = AcTypeState.PRIMED;
236 var participantRestartAc = CommonTestData.createParticipantRestartAc();
237 var automationCompositionList = List.of(participantRestartAc);
238 ach.restarted(messageId, compositionId, list, state, automationCompositionList);
239 verify(cacheProvider).initializeAutomationComposition(compositionId, participantRestartAc);
240 verify(listener).restarted(messageId, compositionId, list, state, automationCompositionList);