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