70111cb52bdf8e358d1ec0291200a073ee99b2c6
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 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.sim.main.handler;
22
23 import static org.junit.jupiter.api.Assertions.assertEquals;
24 import static org.mockito.Mockito.mock;
25 import static org.mockito.Mockito.verify;
26 import static org.mockito.Mockito.when;
27
28 import java.util.List;
29 import java.util.Map;
30 import java.util.UUID;
31 import org.junit.jupiter.api.Test;
32 import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
33 import org.onap.policy.clamp.acm.participant.sim.comm.CommonTestData;
34 import org.onap.policy.clamp.acm.participant.sim.model.SimConfig;
35 import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
36 import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
37 import org.onap.policy.clamp.models.acm.concepts.DeployState;
38 import org.onap.policy.clamp.models.acm.concepts.LockState;
39 import org.onap.policy.clamp.models.acm.concepts.StateChangeResult;
40 import org.onap.policy.models.base.PfModelException;
41
42 class AutomationCompositionElementHandlerTest {
43
44     @Test
45     void testDeploy() throws PfModelException {
46         var config = new SimConfig();
47         config.setDeployTimerMs(1);
48         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
49         var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
50         acElementHandler.setConfig(config);
51         var instanceId = UUID.randomUUID();
52         var element = new AcElementDeploy();
53         element.setId(UUID.randomUUID());
54         acElementHandler.deploy(instanceId, element, Map.of());
55         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
56                 DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Deployed");
57
58         config.setDeploySuccess(false);
59         acElementHandler.deploy(instanceId, element, Map.of());
60         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
61                 DeployState.UNDEPLOYED, null, StateChangeResult.FAILED, "Deploy failed!");
62     }
63
64     @Test
65     void testUndeploy() throws PfModelException {
66         var config = new SimConfig();
67         config.setUndeployTimerMs(1);
68         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
69         var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
70         acElementHandler.setConfig(config);
71         var instanceId = UUID.randomUUID();
72         var elementId = UUID.randomUUID();
73         acElementHandler.undeploy(instanceId, elementId);
74         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, elementId, DeployState.UNDEPLOYED,
75                 null, StateChangeResult.NO_ERROR, "Undeployed");
76
77         config.setUndeploySuccess(false);
78         acElementHandler.undeploy(instanceId, elementId);
79         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, elementId, DeployState.DEPLOYED,
80                 null, StateChangeResult.FAILED, "Undeploy failed!");
81     }
82
83     @Test
84     void testLock() throws PfModelException {
85         var config = new SimConfig();
86         config.setLockTimerMs(1);
87         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
88         var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
89         acElementHandler.setConfig(config);
90         var instanceId = UUID.randomUUID();
91         var elementId = UUID.randomUUID();
92         acElementHandler.lock(instanceId, elementId);
93         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, elementId, null, LockState.LOCKED,
94                 StateChangeResult.NO_ERROR, "Locked");
95
96         config.setLockSuccess(false);
97         acElementHandler.lock(instanceId, elementId);
98         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, elementId, null, LockState.UNLOCKED,
99                 StateChangeResult.FAILED, "Lock failed!");
100     }
101
102     @Test
103     void testUnlock() throws PfModelException {
104         var config = new SimConfig();
105         config.setUnlockTimerMs(1);
106         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
107         var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
108         acElementHandler.setConfig(config);
109         var instanceId = UUID.randomUUID();
110         var elementId = UUID.randomUUID();
111         acElementHandler.unlock(instanceId, elementId);
112         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, elementId, null, LockState.UNLOCKED,
113                 StateChangeResult.NO_ERROR, "Unlocked");
114
115         config.setUnlockSuccess(false);
116         acElementHandler.unlock(instanceId, elementId);
117         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, elementId, null, LockState.LOCKED,
118                 StateChangeResult.FAILED, "Unlock failed!");
119     }
120
121     @Test
122     void testUpdate() throws PfModelException {
123         var config = new SimConfig();
124         config.setUpdateTimerMs(1);
125         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
126         var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
127         acElementHandler.setConfig(config);
128         var instanceId = UUID.randomUUID();
129         var element = new AcElementDeploy();
130         element.setId(UUID.randomUUID());
131         acElementHandler.update(instanceId, element, Map.of());
132         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
133                 DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Updated");
134
135         config.setUpdateSuccess(false);
136         acElementHandler.update(instanceId, element, Map.of());
137         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
138                 DeployState.DEPLOYED, null, StateChangeResult.FAILED, "Update failed!");
139     }
140
141     @Test
142     void testDelete() throws PfModelException {
143         var config = new SimConfig();
144         config.setDeleteTimerMs(1);
145         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
146         var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
147         acElementHandler.setConfig(config);
148         var instanceId = UUID.randomUUID();
149         var elementId = UUID.randomUUID();
150         acElementHandler.delete(instanceId, elementId);
151         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, elementId, DeployState.DELETED,
152                 null, StateChangeResult.NO_ERROR, "Deleted");
153
154         config.setDeleteSuccess(false);
155         acElementHandler.delete(instanceId, elementId);
156         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, elementId, DeployState.UNDEPLOYED,
157                 null, StateChangeResult.FAILED, "Delete failed!");
158     }
159
160     @Test
161     void testgetAutomationComposition() throws PfModelException {
162         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
163         var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
164
165         var map = CommonTestData.getTestAutomationCompositionMap();
166         when(intermediaryApi.getAutomationCompositions()).thenReturn(map);
167         var result = acElementHandler.getAutomationCompositions();
168         assertEquals(map.values().iterator().next(), result.getAutomationCompositionList().get(0));
169     }
170
171     @Test
172     void testsetOutProperties() {
173         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
174         var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
175
176         var instanceId = UUID.randomUUID();
177         var elementId = UUID.randomUUID();
178         var useState = "useState";
179         var operationalState = "operationalState";
180         Map<String, Object> map = Map.of("id", "1234");
181
182         acElementHandler.setOutProperties(instanceId, elementId, useState, operationalState, map);
183         verify(intermediaryApi).sendAcElementInfo(instanceId, elementId, useState, operationalState, map);
184     }
185
186     @Test
187     void testgetDataList() {
188         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
189         var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
190
191         var map = CommonTestData.getTestAutomationCompositionMap();
192         when(intermediaryApi.getAutomationCompositions()).thenReturn(map);
193         var result = acElementHandler.getDataList();
194         var data = result.getList().get(0);
195         var automationcomposition = map.values().iterator().next();
196         assertEquals(automationcomposition.getInstanceId(), data.getAutomationCompositionId());
197         var element = automationcomposition.getElements().values().iterator().next();
198         assertEquals(element.getId(), data.getAutomationCompositionElementId());
199     }
200
201     @Test
202     void testPrime() throws PfModelException {
203         var config = new SimConfig();
204         config.setPrimeTimerMs(1);
205         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
206         var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
207         acElementHandler.setConfig(config);
208         var compositionId = UUID.randomUUID();
209         acElementHandler.prime(compositionId, List.of());
210         verify(intermediaryApi).updateCompositionState(compositionId, AcTypeState.PRIMED, StateChangeResult.NO_ERROR,
211                 "Primed");
212
213         config.setPrimeSuccess(false);
214         acElementHandler.prime(compositionId, List.of());
215         verify(intermediaryApi).updateCompositionState(compositionId, AcTypeState.COMMISSIONED,
216                 StateChangeResult.FAILED, "Prime failed!");
217     }
218
219     @Test
220     void testDeprime() throws PfModelException {
221         var config = new SimConfig();
222         config.setDeprimeTimerMs(1);
223         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
224         var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
225         acElementHandler.setConfig(config);
226         var compositionId = UUID.randomUUID();
227         acElementHandler.deprime(compositionId);
228         verify(intermediaryApi).updateCompositionState(compositionId, AcTypeState.COMMISSIONED,
229                 StateChangeResult.NO_ERROR, "Deprimed");
230
231         config.setDeprimeSuccess(false);
232         acElementHandler.deprime(compositionId);
233         verify(intermediaryApi).updateCompositionState(compositionId, AcTypeState.PRIMED, StateChangeResult.FAILED,
234                 "Deprime failed!");
235     }
236
237     @Test
238     void testHandleRestartComposition() throws PfModelException {
239         var config = new SimConfig();
240         config.setPrimeTimerMs(1);
241         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
242         var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
243         acElementHandler.setConfig(config);
244         var compositionId = UUID.randomUUID();
245         acElementHandler.handleRestartComposition(compositionId, List.of(), AcTypeState.PRIMING);
246         verify(intermediaryApi).updateCompositionState(compositionId, AcTypeState.PRIMED, StateChangeResult.NO_ERROR,
247                 "Primed");
248
249         acElementHandler.handleRestartComposition(compositionId, List.of(), AcTypeState.PRIMED);
250         verify(intermediaryApi).updateCompositionState(compositionId, AcTypeState.PRIMED, StateChangeResult.NO_ERROR,
251                 "Restarted");
252
253         acElementHandler.handleRestartComposition(compositionId, List.of(), AcTypeState.DEPRIMING);
254         verify(intermediaryApi).updateCompositionState(compositionId, AcTypeState.COMMISSIONED,
255                 StateChangeResult.NO_ERROR, "Deprimed");
256     }
257
258     @Test
259     void testHandleRestartInstance() throws PfModelException {
260         var config = new SimConfig();
261         config.setDeployTimerMs(1);
262         var intermediaryApi = mock(ParticipantIntermediaryApi.class);
263         var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
264         acElementHandler.setConfig(config);
265         var instanceId = UUID.randomUUID();
266         var element = new AcElementDeploy();
267         element.setId(UUID.randomUUID());
268         acElementHandler.handleRestartInstance(instanceId, element, Map.of(), DeployState.DEPLOYING, LockState.NONE);
269         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
270                 DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Deployed");
271
272         acElementHandler.handleRestartInstance(instanceId, element, Map.of(), DeployState.DEPLOYED, LockState.LOCKED);
273         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
274                 DeployState.DEPLOYED, LockState.LOCKED, StateChangeResult.NO_ERROR, "Restarted");
275
276         acElementHandler.handleRestartInstance(instanceId, element, Map.of(), DeployState.UPDATING, LockState.LOCKED);
277         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
278                 DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Updated");
279
280         acElementHandler.handleRestartInstance(instanceId, element, Map.of(), DeployState.UNDEPLOYING,
281                 LockState.LOCKED);
282         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
283                 DeployState.UNDEPLOYED, null, StateChangeResult.NO_ERROR, "Undeployed");
284
285         acElementHandler.handleRestartInstance(instanceId, element, Map.of(), DeployState.DELETING, LockState.NONE);
286         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
287                 DeployState.DELETED, null, StateChangeResult.NO_ERROR, "Deleted");
288
289         acElementHandler.handleRestartInstance(instanceId, element, Map.of(), DeployState.DEPLOYED, LockState.LOCKING);
290         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(), null,
291                 LockState.LOCKED, StateChangeResult.NO_ERROR, "Locked");
292
293         acElementHandler.handleRestartInstance(instanceId, element, Map.of(), DeployState.DEPLOYED,
294                 LockState.UNLOCKING);
295         verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(), null,
296                 LockState.UNLOCKED, StateChangeResult.NO_ERROR, "Unlocked");
297     }
298 }