2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2021-2023 Nordix Foundation.
4 * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.clamp.acm.runtime.commissioning;
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.assertj.core.api.Assertions.assertThatThrownBy;
26 import static org.mockito.ArgumentMatchers.any;
27 import static org.mockito.Mockito.doNothing;
28 import static org.mockito.Mockito.mock;
29 import static org.mockito.Mockito.timeout;
30 import static org.mockito.Mockito.verify;
31 import static org.mockito.Mockito.when;
32 import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
34 import java.util.List;
35 import java.util.UUID;
36 import org.junit.jupiter.api.Test;
37 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
38 import org.onap.policy.clamp.acm.runtime.main.parameters.AcRuntimeParameterGroup;
39 import org.onap.policy.clamp.acm.runtime.participants.AcmParticipantProvider;
40 import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantPrimePublisher;
41 import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
42 import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
43 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
44 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
45 import org.onap.policy.clamp.models.acm.messages.rest.commissioning.AcTypeStateUpdate;
46 import org.onap.policy.clamp.models.acm.messages.rest.commissioning.PrimeOrder;
47 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
48 import org.onap.policy.clamp.models.acm.persistence.provider.AcTypeStateResolver;
49 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
50 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
52 class CommissioningProviderTest {
55 * Test the fetching of automation composition definitions (ToscaServiceTemplates).
60 void testGetAutomationCompositionDefinitions() {
61 var acProvider = mock(AutomationCompositionProvider.class);
62 var acDefinitionProvider = mock(AcDefinitionProvider.class);
63 var acRuntimeParameterGroup = mock(AcRuntimeParameterGroup.class);
65 var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null, null,
66 acRuntimeParameterGroup);
68 var serviceTemplates = provider.getAutomationCompositionDefinitions(null, null);
69 assertThat(serviceTemplates.getServiceTemplates()).isEmpty();
71 when(acDefinitionProvider.getServiceTemplateList(null, null)).thenReturn(List.of(new ToscaServiceTemplate()));
72 serviceTemplates = provider.getAutomationCompositionDefinitions(null, null);
73 assertThat(serviceTemplates.getServiceTemplates()).hasSize(1);
77 * Test the creation of automation composition definitions (ToscaServiceTemplates).
82 void testCreateAutomationCompositionDefinitions() {
83 var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
84 serviceTemplate.setName("Name");
85 serviceTemplate.setVersion("1.0.0");
86 var acmDefinition = new AutomationCompositionDefinition();
87 acmDefinition.setCompositionId(UUID.randomUUID());
88 acmDefinition.setServiceTemplate(serviceTemplate);
89 var acDefinitionProvider = mock(AcDefinitionProvider.class);
90 when(acDefinitionProvider.createAutomationCompositionDefinition(serviceTemplate,
91 CommonTestData.TOSCA_ELEMENT_NAME, CommonTestData.TOSCA_COMP_NAME)).thenReturn(acmDefinition);
93 var acProvider = mock(AutomationCompositionProvider.class);
94 var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null, null,
95 CommonTestData.getTestParamaterGroup());
96 var affectedDefinitions = provider.createAutomationCompositionDefinition(serviceTemplate)
97 .getAffectedAutomationCompositionDefinitions();
98 verify(acDefinitionProvider).createAutomationCompositionDefinition(serviceTemplate,
99 CommonTestData.TOSCA_ELEMENT_NAME, CommonTestData.TOSCA_COMP_NAME);
100 // Response should return the number of node templates present in the service template
101 assertThat(affectedDefinitions).hasSize(7);
105 * Test the fetching of a full ToscaServiceTemplate object - as opposed to the reduced template that is being
106 * tested in the testGetToscaServiceTemplateReduced() test.
110 void testGetToscaServiceTemplateList() {
111 var acDefinitionProvider = mock(AcDefinitionProvider.class);
112 var acProvider = mock(AutomationCompositionProvider.class);
114 var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null, null, null);
115 var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
116 when(acDefinitionProvider.getServiceTemplateList(null, null)).thenReturn(List.of(serviceTemplate));
118 var returnedServiceTemplate = provider.getAutomationCompositionDefinitions(null, null);
119 assertThat(returnedServiceTemplate).isNotNull();
120 assertThat(returnedServiceTemplate.getServiceTemplates()).isNotEmpty();
124 void testDeletecDefinitionDabRequest() {
125 var acDefinitionProvider = mock(AcDefinitionProvider.class);
126 var acProvider = mock(AutomationCompositionProvider.class);
128 var compositionId = UUID.randomUUID();
129 when(acProvider.getAcInstancesByCompositionId(compositionId)).thenReturn(List.of(new AutomationComposition()));
131 var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null, null, null);
133 assertThatThrownBy(() -> provider.deleteAutomationCompositionDefinition(compositionId))
134 .hasMessageMatching("Delete instances, to commission automation composition definitions");
138 void testDeleteAutomationCompositionDefinition() {
139 var acDefinitionProvider = mock(AcDefinitionProvider.class);
140 var compositionId = UUID.randomUUID();
141 var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
142 when(acDefinitionProvider.deleteAcDefintion(compositionId)).thenReturn(serviceTemplate);
144 var acmDefinition = new AutomationCompositionDefinition();
145 acmDefinition.setCompositionId(compositionId);
146 acmDefinition.setServiceTemplate(serviceTemplate);
147 acmDefinition.setState(AcTypeState.COMMISSIONED);
148 when(acDefinitionProvider.getAcDefinition(compositionId)).thenReturn(acmDefinition);
150 var acProvider = mock(AutomationCompositionProvider.class);
151 var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null, null, null);
153 provider.deleteAutomationCompositionDefinition(compositionId);
155 verify(acDefinitionProvider).deleteAcDefintion(compositionId);
160 var acDefinitionProvider = mock(AcDefinitionProvider.class);
161 var acmDefinition = CommonTestData.createAcDefinition(
162 InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML), AcTypeState.COMMISSIONED);
163 var compositionId = acmDefinition.getCompositionId();
164 when(acDefinitionProvider.getAcDefinition(compositionId)).thenReturn(acmDefinition);
166 var participantPrimePublisher = mock(ParticipantPrimePublisher.class);
167 var provider = new CommissioningProvider(acDefinitionProvider, mock(AutomationCompositionProvider.class),
168 mock(AcmParticipantProvider.class), new AcTypeStateResolver(), participantPrimePublisher,
169 CommonTestData.getTestParamaterGroup());
171 var acTypeStateUpdate = new AcTypeStateUpdate();
172 acTypeStateUpdate.setPrimeOrder(PrimeOrder.PRIME);
173 provider.compositionDefinitionPriming(compositionId, acTypeStateUpdate);
174 verify(acDefinitionProvider).updateAcDefinition(acmDefinition, CommonTestData.TOSCA_COMP_NAME);
175 verify(participantPrimePublisher, timeout(1000).times(1)).sendPriming(any(), any(), any());
179 void testDepriming() {
180 var acDefinitionProvider = mock(AcDefinitionProvider.class);
181 var acmDefinition = CommonTestData.createAcDefinition(
182 InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML), AcTypeState.PRIMED);
183 var compositionId = acmDefinition.getCompositionId();
184 when(acDefinitionProvider.getAcDefinition(compositionId)).thenReturn(acmDefinition);
186 var participantPrimePublisher = mock(ParticipantPrimePublisher.class);
187 var acmParticipantProvider = mock(AcmParticipantProvider.class);
188 var provider = new CommissioningProvider(acDefinitionProvider, mock(AutomationCompositionProvider.class),
189 acmParticipantProvider, new AcTypeStateResolver(), participantPrimePublisher,
190 CommonTestData.getTestParamaterGroup());
192 var acTypeStateUpdate = new AcTypeStateUpdate();
193 acTypeStateUpdate.setPrimeOrder(PrimeOrder.DEPRIME);
195 doNothing().when(acmParticipantProvider).verifyParticipantState(any());
196 provider.compositionDefinitionPriming(compositionId, acTypeStateUpdate);
197 verify(participantPrimePublisher, timeout(1000).times(1)).sendDepriming(compositionId);
201 void testBadRequest() {
202 var acProvider = mock(AutomationCompositionProvider.class);
203 var provider = new CommissioningProvider(mock(AcDefinitionProvider.class), acProvider,
204 mock(AcmParticipantProvider.class), new AcTypeStateResolver(), mock(ParticipantPrimePublisher.class),
205 mock(AcRuntimeParameterGroup.class));
207 var compositionId = UUID.randomUUID();
208 when(acProvider.getAcInstancesByCompositionId(compositionId)).thenReturn(List.of(new AutomationComposition()));
210 var toscaServiceTemplate = new ToscaServiceTemplate();
211 assertThatThrownBy(() -> provider.updateCompositionDefinition(compositionId, toscaServiceTemplate))
212 .hasMessageMatching("There are ACM instances, Update of ACM Definition not allowed");
214 var acTypeStateUpdate = new AcTypeStateUpdate();
215 assertThatThrownBy(() -> provider.compositionDefinitionPriming(compositionId, acTypeStateUpdate))
216 .hasMessageMatching("There are instances, Priming/Depriming not allowed");
220 void testPrimedBadRequest() {
221 var acDefinitionProvider = mock(AcDefinitionProvider.class);
222 var toscaServiceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
223 var acmDefinition = CommonTestData.createAcDefinition(toscaServiceTemplate, AcTypeState.PRIMED);
224 var compositionId = acmDefinition.getCompositionId();
225 when(acDefinitionProvider.getAcDefinition(compositionId)).thenReturn(acmDefinition);
227 var provider = new CommissioningProvider(acDefinitionProvider, mock(AutomationCompositionProvider.class),
228 mock(AcmParticipantProvider.class), new AcTypeStateResolver(), mock(ParticipantPrimePublisher.class),
229 mock(AcRuntimeParameterGroup.class));
231 assertThatThrownBy(() -> provider.updateCompositionDefinition(compositionId, toscaServiceTemplate))
232 .hasMessageMatching("ACM not in COMMISSIONED state, Update of ACM Definition not allowed");
234 assertThatThrownBy(() -> provider.deleteAutomationCompositionDefinition(compositionId))
235 .hasMessageMatching("ACM not in COMMISSIONED state, Delete of ACM Definition not allowed");
239 void testPrimingBadRequest() {
240 var acDefinitionProvider = mock(AcDefinitionProvider.class);
241 var toscaServiceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
242 var acmDefinition = CommonTestData.createAcDefinition(toscaServiceTemplate, AcTypeState.PRIMED);
243 acmDefinition.setRestarting(true);
244 var compositionId = acmDefinition.getCompositionId();
245 when(acDefinitionProvider.getAcDefinition(compositionId)).thenReturn(acmDefinition);
247 var provider = new CommissioningProvider(acDefinitionProvider, mock(AutomationCompositionProvider.class),
248 mock(AcmParticipantProvider.class), new AcTypeStateResolver(), mock(ParticipantPrimePublisher.class),
249 mock(AcRuntimeParameterGroup.class));
251 var acTypeStateUpdate = new AcTypeStateUpdate();
252 assertThatThrownBy(() -> provider.compositionDefinitionPriming(compositionId, acTypeStateUpdate))
253 .hasMessageMatching("There is a restarting process, Priming/Depriming not allowed");