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();
57 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
59 try (var automationCompositionElementHandler =
60 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
61 automationCompositionElementHandler.undeploy(instanceId, acElementId);
62 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId,
63 DeployState.UNDEPLOYED, null, StateChangeResult.NO_ERROR, "");
68 void testDeployConstraintViolations() throws IOException, PfModelException {
69 var instanceId = commonTestData.getAutomationCompositionId();
70 var element = commonTestData.getAutomationCompositionElement();
71 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
73 try (var automationCompositionElementHandler =
74 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
76 Map<String, Object> map = new HashMap<>();
77 automationCompositionElementHandler.deploy(instanceId, element, map);
78 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
79 DeployState.UNDEPLOYED, null, StateChangeResult.FAILED,
80 "Constraint violations in the config request");
85 void testDeployError() throws IOException, PfModelException {
86 var instanceId = commonTestData.getAutomationCompositionId();
87 var element = commonTestData.getAutomationCompositionElement();
88 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
90 try (var automationCompositionElementHandler =
91 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
93 Map<String, Object> map = new HashMap<>();
94 map.put("httpHeaders", 1);
95 automationCompositionElementHandler.deploy(instanceId, element, map);
96 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
97 DeployState.UNDEPLOYED, null, StateChangeResult.FAILED, "Error extracting ConfigRequest ");
102 void testDeploy() throws Exception {
103 var serviceTemplate = ToscaUtils.readAutomationCompositionFromTosca();
104 var nodeTemplatesMap = serviceTemplate.getToscaTopologyTemplate().getNodeTemplates();
105 var map = new HashMap<>(nodeTemplatesMap.get(HTTP_AUTOMATION_COMPOSITION_ELEMENT).getProperties());
106 var element = commonTestData.getAutomationCompositionElement();
107 map.putAll(element.getProperties());
108 var instanceId = commonTestData.getAutomationCompositionId();
109 var acHttpClient = mock(AcHttpClient.class);
110 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
112 try (var automationCompositionElementHandler =
113 new AutomationCompositionElementHandler(participantIntermediaryApi, acHttpClient)) {
115 automationCompositionElementHandler.deploy(instanceId, element, map);
116 verify(acHttpClient).run(any(ConfigRequest.class), anyMap());
117 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(),
118 DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Deployed");
123 void testUpdate() throws Exception {
124 var instanceId = commonTestData.getAutomationCompositionId();
125 var element = commonTestData.getAutomationCompositionElement();
126 var acElementId = element.getId();
127 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
129 try (var automationCompositionElementHandler =
130 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
132 automationCompositionElementHandler.update(instanceId, element, Map.of());
133 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId,
134 DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Update not supported");
139 void testLock() throws Exception {
140 var instanceId = commonTestData.getAutomationCompositionId();
141 var acElementId = UUID.randomUUID();
142 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
144 try (var automationCompositionElementHandler =
145 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
147 automationCompositionElementHandler.lock(instanceId, acElementId);
148 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId, null,
149 LockState.LOCKED, StateChangeResult.NO_ERROR, "Locked");
154 void testUnlock() throws Exception {
155 var instanceId = commonTestData.getAutomationCompositionId();
156 var acElementId = UUID.randomUUID();
157 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
159 try (var automationCompositionElementHandler =
160 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
162 automationCompositionElementHandler.unlock(instanceId, acElementId);
163 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId, null,
164 LockState.UNLOCKED, StateChangeResult.NO_ERROR, "Unlocked");
169 void testDelete() throws Exception {
170 var instanceId = commonTestData.getAutomationCompositionId();
171 var acElementId = UUID.randomUUID();
172 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
174 try (var automationCompositionElementHandler =
175 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
177 automationCompositionElementHandler.delete(instanceId, acElementId);
178 verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId,
179 DeployState.DELETED, null, StateChangeResult.NO_ERROR, "Deleted");
184 void testPrime() throws Exception {
185 var compositionId = UUID.randomUUID();
186 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
188 try (var automationCompositionElementHandler =
189 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
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();
200 var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
202 try (var automationCompositionElementHandler =
203 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
205 automationCompositionElementHandler.deprime(compositionId);
206 verify(participantIntermediaryApi).updateCompositionState(compositionId, AcTypeState.COMMISSIONED,
207 StateChangeResult.NO_ERROR, "Deprimed");