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.http.handler;
23 import static org.mockito.ArgumentMatchers.any;
24 import static org.mockito.ArgumentMatchers.anyMap;
25 import static org.mockito.Mockito.mock;
26 import static org.mockito.Mockito.verify;
28 import java.io.IOException;
29 import java.util.HashMap;
30 import java.util.List;
32 import java.util.UUID;
33 import org.junit.jupiter.api.Test;
34 import org.onap.policy.clamp.acm.participant.http.main.handler.AutomationCompositionElementHandler;
35 import org.onap.policy.clamp.acm.participant.http.main.models.ConfigRequest;
36 import org.onap.policy.clamp.acm.participant.http.main.webclient.AcHttpClient;
37 import org.onap.policy.clamp.acm.participant.http.utils.CommonTestData;
38 import org.onap.policy.clamp.acm.participant.http.utils.ToscaUtils;
39 import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
40 import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
41 import org.onap.policy.clamp.models.acm.concepts.DeployState;
42 import org.onap.policy.clamp.models.acm.concepts.LockState;
43 import org.onap.policy.clamp.models.acm.concepts.StateChangeResult;
44 import org.onap.policy.models.base.PfModelException;
46 class AcElementHandlerTest {
48 private final CommonTestData commonTestData = new CommonTestData();
49 private static final String HTTP_AUTOMATION_COMPOSITION_ELEMENT =
50 "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement";
53 void testUndeploy() throws IOException {
54 var instanceId = commonTestData.getAutomationCompositionId();
55 var element = commonTestData.getAutomationCompositionElement();
56 var acElementId = element.getId();
58 try (var automationCompositionElementHandler =
59 new AutomationCompositionElementHandler(mock(AcHttpClient.class))) {
60 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
61 automationCompositionElementHandler.setIntermediaryApi(participantIntermediaryApi);
62 automationCompositionElementHandler.undeploy(instanceId, acElementId);
63 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId,
64 DeployState.UNDEPLOYED, null, StateChangeResult.NO_ERROR, "");
69 void testDeployConstraintViolations() throws IOException, PfModelException {
70 var instanceId = commonTestData.getAutomationCompositionId();
71 var element = commonTestData.getAutomationCompositionElement();
72 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
74 try (var automationCompositionElementHandler =
75 new AutomationCompositionElementHandler(mock(AcHttpClient.class))) {
76 automationCompositionElementHandler.setIntermediaryApi(participantIntermediaryApi);
77 Map<String, Object> map = new HashMap<>();
78 automationCompositionElementHandler.deploy(instanceId, element, map);
79 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
80 DeployState.UNDEPLOYED, null, StateChangeResult.FAILED,
81 "Constraint violations in the config request");
86 void testDeployError() throws IOException, PfModelException {
87 var instanceId = commonTestData.getAutomationCompositionId();
88 var element = commonTestData.getAutomationCompositionElement();
89 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
91 try (var automationCompositionElementHandler =
92 new AutomationCompositionElementHandler(mock(AcHttpClient.class))) {
93 automationCompositionElementHandler.setIntermediaryApi(participantIntermediaryApi);
94 Map<String, Object> map = new HashMap<>();
95 map.put("httpHeaders", 1);
96 automationCompositionElementHandler.deploy(instanceId, element, map);
97 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
98 DeployState.UNDEPLOYED, null, StateChangeResult.FAILED, "Error extracting ConfigRequest ");
103 void testDeploy() throws Exception {
104 var serviceTemplate = ToscaUtils.readAutomationCompositionFromTosca();
105 var nodeTemplatesMap = serviceTemplate.getToscaTopologyTemplate().getNodeTemplates();
106 var map = new HashMap<>(nodeTemplatesMap.get(HTTP_AUTOMATION_COMPOSITION_ELEMENT).getProperties());
107 var element = commonTestData.getAutomationCompositionElement();
108 map.putAll(element.getProperties());
109 var instanceId = commonTestData.getAutomationCompositionId();
110 var acHttpClient = mock(AcHttpClient.class);
111 try (var automationCompositionElementHandler = new AutomationCompositionElementHandler(acHttpClient)) {
112 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
113 automationCompositionElementHandler.setIntermediaryApi(participantIntermediaryApi);
114 automationCompositionElementHandler.deploy(instanceId, element, map);
115 verify(acHttpClient).run(any(ConfigRequest.class), anyMap());
116 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
117 DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Deployed");
122 void testUpdate() throws Exception {
123 var instanceId = commonTestData.getAutomationCompositionId();
124 var element = commonTestData.getAutomationCompositionElement();
125 var acElementId = element.getId();
127 try (var automationCompositionElementHandler =
128 new AutomationCompositionElementHandler(mock(AcHttpClient.class))) {
129 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
130 automationCompositionElementHandler.setIntermediaryApi(participantIntermediaryApi);
131 automationCompositionElementHandler.update(instanceId, element, Map.of());
132 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId,
133 DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Update not supported");
138 void testLock() throws Exception {
139 var instanceId = commonTestData.getAutomationCompositionId();
140 var acElementId = UUID.randomUUID();
142 try (var automationCompositionElementHandler =
143 new AutomationCompositionElementHandler(mock(AcHttpClient.class))) {
144 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
145 automationCompositionElementHandler.setIntermediaryApi(participantIntermediaryApi);
146 automationCompositionElementHandler.lock(instanceId, acElementId);
147 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId, null,
148 LockState.LOCKED, StateChangeResult.NO_ERROR, "Locked");
153 void testUnlock() throws Exception {
154 var instanceId = commonTestData.getAutomationCompositionId();
155 var acElementId = UUID.randomUUID();
157 try (var automationCompositionElementHandler =
158 new AutomationCompositionElementHandler(mock(AcHttpClient.class))) {
159 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
160 automationCompositionElementHandler.setIntermediaryApi(participantIntermediaryApi);
161 automationCompositionElementHandler.unlock(instanceId, acElementId);
162 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId, null,
163 LockState.UNLOCKED, StateChangeResult.NO_ERROR, "Unlocked");
168 void testDelete() throws Exception {
169 var instanceId = commonTestData.getAutomationCompositionId();
170 var acElementId = UUID.randomUUID();
172 try (var automationCompositionElementHandler =
173 new AutomationCompositionElementHandler(mock(AcHttpClient.class))) {
174 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
175 automationCompositionElementHandler.setIntermediaryApi(participantIntermediaryApi);
176 automationCompositionElementHandler.delete(instanceId, acElementId);
177 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId,
178 DeployState.DELETED, null, StateChangeResult.NO_ERROR, "Deleted");
183 void testPrime() throws Exception {
184 var compositionId = UUID.randomUUID();
186 try (var automationCompositionElementHandler =
187 new AutomationCompositionElementHandler(mock(AcHttpClient.class))) {
188 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
189 automationCompositionElementHandler.setIntermediaryApi(participantIntermediaryApi);
191 automationCompositionElementHandler.prime(compositionId, List.of());
192 verify(participantIntermediaryApi).updateCompositionState(compositionId, AcTypeState.PRIMED,
193 StateChangeResult.NO_ERROR, "Primed");
198 void testDeprime() throws Exception {
199 var compositionId = UUID.randomUUID();
201 try (var automationCompositionElementHandler =
202 new AutomationCompositionElementHandler(mock(AcHttpClient.class))) {
203 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
204 automationCompositionElementHandler.setIntermediaryApi(participantIntermediaryApi);
206 automationCompositionElementHandler.deprime(compositionId);
207 verify(participantIntermediaryApi).updateCompositionState(compositionId, AcTypeState.COMMISSIONED,
208 StateChangeResult.NO_ERROR, "Deprimed");