12b8ee4c326f876233063e25be62a619e571873d
[policy/clamp.git] /
1 /*-
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
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.http.handler;
22
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;
27
28 import java.io.IOException;
29 import java.util.HashMap;
30 import java.util.List;
31 import java.util.Map;
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;
45
46 class AcElementHandlerTest {
47
48     private final CommonTestData commonTestData = new CommonTestData();
49     private static final String HTTP_AUTOMATION_COMPOSITION_ELEMENT =
50             "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement";
51
52     @Test
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);
58
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, "");
64         }
65     }
66
67     @Test
68     void testDeployConstraintViolations() throws IOException, PfModelException {
69         var instanceId = commonTestData.getAutomationCompositionId();
70         var element = commonTestData.getAutomationCompositionElement();
71         var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
72
73         try (var automationCompositionElementHandler =
74                 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
75
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");
81         }
82     }
83
84     @Test
85     void testDeployError() throws IOException, PfModelException {
86         var instanceId = commonTestData.getAutomationCompositionId();
87         var element = commonTestData.getAutomationCompositionElement();
88         var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
89
90         try (var automationCompositionElementHandler =
91                 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
92
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 ");
98         }
99     }
100
101     @Test
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);
111
112         try (var automationCompositionElementHandler =
113                 new AutomationCompositionElementHandler(participantIntermediaryApi, acHttpClient)) {
114
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");
119         }
120     }
121
122     @Test
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);
128
129         try (var automationCompositionElementHandler =
130                 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
131
132             automationCompositionElementHandler.update(instanceId, element, Map.of());
133             verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId,
134                     DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Update not supported");
135         }
136     }
137
138     @Test
139     void testLock() throws Exception {
140         var instanceId = commonTestData.getAutomationCompositionId();
141         var acElementId = UUID.randomUUID();
142         var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
143
144         try (var automationCompositionElementHandler =
145                 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
146
147             automationCompositionElementHandler.lock(instanceId, acElementId);
148             verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId, null,
149                     LockState.LOCKED, StateChangeResult.NO_ERROR, "Locked");
150         }
151     }
152
153     @Test
154     void testUnlock() throws Exception {
155         var instanceId = commonTestData.getAutomationCompositionId();
156         var acElementId = UUID.randomUUID();
157         var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
158
159         try (var automationCompositionElementHandler =
160                 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
161
162             automationCompositionElementHandler.unlock(instanceId, acElementId);
163             verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId, null,
164                     LockState.UNLOCKED, StateChangeResult.NO_ERROR, "Unlocked");
165         }
166     }
167
168     @Test
169     void testDelete() throws Exception {
170         var instanceId = commonTestData.getAutomationCompositionId();
171         var acElementId = UUID.randomUUID();
172         var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
173
174         try (var automationCompositionElementHandler =
175                 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
176
177             automationCompositionElementHandler.delete(instanceId, acElementId);
178             verify(participantIntermediaryApi).updateAutomationCompositionElementState(instanceId, acElementId,
179                     DeployState.DELETED, null, StateChangeResult.NO_ERROR, "Deleted");
180         }
181     }
182
183     @Test
184     void testPrime() throws Exception {
185         var compositionId = UUID.randomUUID();
186         var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
187
188         try (var automationCompositionElementHandler =
189                 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
190
191             automationCompositionElementHandler.prime(compositionId, List.of());
192             verify(participantIntermediaryApi).updateCompositionState(compositionId, AcTypeState.PRIMED,
193                     StateChangeResult.NO_ERROR, "Primed");
194         }
195     }
196
197     @Test
198     void testDeprime() throws Exception {
199         var compositionId = UUID.randomUUID();
200         var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
201
202         try (var automationCompositionElementHandler =
203                 new AutomationCompositionElementHandler(participantIntermediaryApi, mock(AcHttpClient.class))) {
204
205             automationCompositionElementHandler.deprime(compositionId);
206             verify(participantIntermediaryApi).updateCompositionState(compositionId, AcTypeState.COMMISSIONED,
207                     StateChangeResult.NO_ERROR, "Deprimed");
208         }
209     }
210 }