5f7d71e6f14b203e645f216f068a42547bb4a8b3
[policy/clamp.git] /
1 /*-
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
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.clamp.acm.participant.intermediary.handler;
22
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;
31
32 import java.util.List;
33 import java.util.Map;
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;
53
54 @ExtendWith(SpringExtension.class)
55 class AutomationCompositionHandlerTest {
56
57     @Test
58     void handleAutomationCompositionStateChangeNullTest() {
59         var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
60         var cacheProvider = mock(CacheProvider.class);
61         var ach =
62                 new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, mock(ThreadHandler.class));
63
64         var automationCompositionStateChange = new AutomationCompositionStateChange();
65         assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
66
67         automationCompositionStateChange.setAutomationCompositionId(UUID.randomUUID());
68         automationCompositionStateChange.setDeployOrderedState(DeployOrder.DELETE);
69         assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(automationCompositionStateChange));
70         verify(participantMessagePublisher).sendAutomationCompositionAck(any(AutomationCompositionDeployAck.class));
71
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));
78     }
79
80     @Test
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());
89
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());
97         }
98     }
99
100     @Test
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());
109
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());
117         }
118     }
119
120     @Test
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());
129
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());
137         }
138     }
139
140     @Test
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());
149
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());
157         }
158     }
159
160     @Test
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);
166
167         var updateMsg = new PropertiesUpdate();
168         assertDoesNotThrow(() -> ach.handleAcPropertyUpdate(updateMsg));
169
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);
175
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);
184
185         ach.handleAcPropertyUpdate(updateMsg);
186         verify(listener).update(any(), any(), any(), any());
187     }
188
189     @Test
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);
195
196         var deployMsg = new AutomationCompositionDeploy();
197         assertDoesNotThrow(() -> ach.handleAutomationCompositionDeploy(deployMsg));
198
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);
204
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);
214         }
215         ach.handleAutomationCompositionDeploy(deployMsg);
216         verify(listener, times(automationComposition.getElements().size())).deploy(any(), any(), any(), any());
217     }
218
219     @Test
220     void handleComposiotPrimeTest() {
221         var listener = mock(ThreadHandler.class);
222         var ach = new AutomationCompositionHandler(mock(CacheProvider.class), mock(ParticipantMessagePublisher.class),
223                 listener);
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);
229     }
230
231     @Test
232     void handleComposiotDeprimeTest() {
233         var listener = mock(ThreadHandler.class);
234         var ach = new AutomationCompositionHandler(mock(CacheProvider.class), mock(ParticipantMessagePublisher.class),
235                 listener);
236         var compositionId = UUID.randomUUID();
237         var messageId = UUID.randomUUID();
238         ach.deprime(messageId, compositionId);
239         verify(listener).deprime(messageId, compositionId);
240     }
241
242     @Test
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);
247
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);
257     }
258
259     @Test
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);
281         }
282
283         ach.handleAutomationCompositionMigration(migrationMsg);
284         verify(listener, times(automationComposition.getElements().size())).migrate(any(), any(), any(), any(), any());
285     }
286 }