4dca5a58f39ecd0addfc3619042833b0a016cce6
[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
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, "");
65         }
66     }
67
68     @Test
69     void testDeployConstraintViolations() throws IOException, PfModelException {
70         var instanceId = commonTestData.getAutomationCompositionId();
71         var element = commonTestData.getAutomationCompositionElement();
72         var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
73
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");
82         }
83     }
84
85     @Test
86     void testDeployError() throws IOException, PfModelException {
87         var instanceId = commonTestData.getAutomationCompositionId();
88         var element = commonTestData.getAutomationCompositionElement();
89         var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
90
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 ");
99         }
100     }
101
102     @Test
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");
118         }
119     }
120
121     @Test
122     void testUpdate() throws Exception {
123         var instanceId = commonTestData.getAutomationCompositionId();
124         var element = commonTestData.getAutomationCompositionElement();
125         var acElementId = element.getId();
126
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");
134         }
135     }
136
137     @Test
138     void testLock() throws Exception {
139         var instanceId = commonTestData.getAutomationCompositionId();
140         var acElementId = UUID.randomUUID();
141
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");
149         }
150     }
151
152     @Test
153     void testUnlock() throws Exception {
154         var instanceId = commonTestData.getAutomationCompositionId();
155         var acElementId = UUID.randomUUID();
156
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");
164         }
165     }
166
167     @Test
168     void testDelete() throws Exception {
169         var instanceId = commonTestData.getAutomationCompositionId();
170         var acElementId = UUID.randomUUID();
171
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");
179         }
180     }
181
182     @Test
183     void testPrime() throws Exception {
184         var compositionId = UUID.randomUUID();
185
186         try (var automationCompositionElementHandler =
187                 new AutomationCompositionElementHandler(mock(AcHttpClient.class))) {
188             var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
189             automationCompositionElementHandler.setIntermediaryApi(participantIntermediaryApi);
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
201         try (var automationCompositionElementHandler =
202                 new AutomationCompositionElementHandler(mock(AcHttpClient.class))) {
203             var participantIntermediaryApi = mock(ParticipantIntermediaryApi.class);
204             automationCompositionElementHandler.setIntermediaryApi(participantIntermediaryApi);
205
206             automationCompositionElementHandler.deprime(compositionId);
207             verify(participantIntermediaryApi).updateCompositionState(compositionId, AcTypeState.COMMISSIONED,
208                     StateChangeResult.NO_ERROR, "Deprimed");
209         }
210     }
211 }