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
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.sim.main.handler;
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;
28 import java.util.List;
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;
42 class AutomationCompositionElementHandlerTest {
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");
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!");
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");
77 config.setUndeploySuccess(false);
78 acElementHandler.undeploy(instanceId, elementId);
79 verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, elementId, DeployState.DEPLOYED,
80 null, StateChangeResult.FAILED, "Undeploy failed!");
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");
96 config.setLockSuccess(false);
97 acElementHandler.lock(instanceId, elementId);
98 verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, elementId, null, LockState.UNLOCKED,
99 StateChangeResult.FAILED, "Lock failed!");
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");
115 config.setUnlockSuccess(false);
116 acElementHandler.unlock(instanceId, elementId);
117 verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, elementId, null, LockState.LOCKED,
118 StateChangeResult.FAILED, "Unlock failed!");
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");
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!");
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");
154 config.setDeleteSuccess(false);
155 acElementHandler.delete(instanceId, elementId);
156 verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, elementId, DeployState.UNDEPLOYED,
157 null, StateChangeResult.FAILED, "Delete failed!");
161 void testgetAutomationComposition() throws PfModelException {
162 var intermediaryApi = mock(ParticipantIntermediaryApi.class);
163 var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
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));
172 void testsetOutProperties() {
173 var intermediaryApi = mock(ParticipantIntermediaryApi.class);
174 var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
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");
182 acElementHandler.setOutProperties(instanceId, elementId, useState, operationalState, map);
183 verify(intermediaryApi).sendAcElementInfo(instanceId, elementId, useState, operationalState, map);
187 void testgetDataList() {
188 var intermediaryApi = mock(ParticipantIntermediaryApi.class);
189 var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi);
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 autocomposition = map.values().iterator().next();
196 assertEquals(autocomposition.getInstanceId(), data.getAutomationCompositionId());
197 var element = autocomposition.getElements().values().iterator().next();
198 assertEquals(element.getId(), data.getAutomationCompositionElementId());
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,
213 config.setPrimeSuccess(false);
214 acElementHandler.prime(compositionId, List.of());
215 verify(intermediaryApi).updateCompositionState(compositionId, AcTypeState.COMMISSIONED,
216 StateChangeResult.FAILED, "Prime failed!");
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");
231 config.setDeprimeSuccess(false);
232 acElementHandler.deprime(compositionId);
233 verify(intermediaryApi).updateCompositionState(compositionId, AcTypeState.PRIMED, StateChangeResult.FAILED,