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.mock;
28 import static org.mockito.Mockito.verify;
29 import static org.mockito.Mockito.when;
30 import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
32 import java.util.List;
33 import java.util.UUID;
34 import org.junit.jupiter.api.Test;
35 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
36 import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantUpdatePublisher;
37 import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
38 import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
39 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
40 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
41 import org.onap.policy.clamp.models.acm.messages.rest.commissioning.AcTypeStateUpdate;
42 import org.onap.policy.clamp.models.acm.messages.rest.commissioning.PrimeOrder;
43 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
44 import org.onap.policy.clamp.models.acm.persistence.provider.AcTypeStateResolver;
45 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
48 class CommissioningProviderTest {
51 * Test the fetching of automation composition definitions (ToscaServiceTemplates).
56 void testGetAutomationCompositionDefinitions() {
57 var acProvider = mock(AutomationCompositionProvider.class);
58 var acDefinitionProvider = mock(AcDefinitionProvider.class);
60 var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null);
62 var serviceTemplates = provider.getAutomationCompositionDefinitions(null, null);
63 assertThat(serviceTemplates.getServiceTemplates()).isEmpty();
65 when(acDefinitionProvider.getServiceTemplateList(null, null)).thenReturn(List.of(new ToscaServiceTemplate()));
66 serviceTemplates = provider.getAutomationCompositionDefinitions(null, null);
67 assertThat(serviceTemplates.getServiceTemplates()).hasSize(1);
71 * Test the creation of automation composition definitions (ToscaServiceTemplates).
76 void testCreateAutomationCompositionDefinitions() {
77 var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
78 serviceTemplate.setName("Name");
79 serviceTemplate.setVersion("1.0.0");
80 var acmDefinition = new AutomationCompositionDefinition();
81 acmDefinition.setCompositionId(UUID.randomUUID());
82 acmDefinition.setServiceTemplate(serviceTemplate);
83 var acDefinitionProvider = mock(AcDefinitionProvider.class);
84 when(acDefinitionProvider.createAutomationCompositionDefinition(serviceTemplate)).thenReturn(acmDefinition);
86 var acProvider = mock(AutomationCompositionProvider.class);
87 var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null);
88 var affectedDefinitions = provider.createAutomationCompositionDefinition(serviceTemplate)
89 .getAffectedAutomationCompositionDefinitions();
90 verify(acDefinitionProvider).createAutomationCompositionDefinition(serviceTemplate);
91 // Response should return the number of node templates present in the service template
92 assertThat(affectedDefinitions).hasSize(7);
96 * Test the fetching of a full ToscaServiceTemplate object - as opposed to the reduced template that is being
97 * tested in the testGetToscaServiceTemplateReduced() test.
101 void testGetToscaServiceTemplateList() {
102 var acDefinitionProvider = mock(AcDefinitionProvider.class);
103 var acProvider = mock(AutomationCompositionProvider.class);
105 var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null);
106 var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
107 when(acDefinitionProvider.getServiceTemplateList(null, null)).thenReturn(List.of(serviceTemplate));
109 var returnedServiceTemplate = provider.getAutomationCompositionDefinitions(null, null);
110 assertThat(returnedServiceTemplate).isNotNull();
111 assertThat(returnedServiceTemplate.getServiceTemplates()).isNotEmpty();
115 void testDeletecDefinitionDabRequest() {
116 var acDefinitionProvider = mock(AcDefinitionProvider.class);
117 var acProvider = mock(AutomationCompositionProvider.class);
119 var compositionId = UUID.randomUUID();
120 when(acProvider.getAcInstancesByCompositionId(compositionId)).thenReturn(List.of(new AutomationComposition()));
122 var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null);
124 assertThatThrownBy(() -> provider.deleteAutomationCompositionDefinition(compositionId))
125 .hasMessageMatching("Delete instances, to commission automation composition definitions");
129 void testDeleteAutomationCompositionDefinition() {
130 var acDefinitionProvider = mock(AcDefinitionProvider.class);
131 var compositionId = UUID.randomUUID();
132 var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
133 when(acDefinitionProvider.deleteAcDefintion(compositionId)).thenReturn(serviceTemplate);
135 var acmDefinition = new AutomationCompositionDefinition();
136 acmDefinition.setCompositionId(compositionId);
137 acmDefinition.setServiceTemplate(serviceTemplate);
138 acmDefinition.setState(AcTypeState.COMMISSIONED);
139 when(acDefinitionProvider.getAcDefinition(compositionId)).thenReturn(acmDefinition);
141 var acProvider = mock(AutomationCompositionProvider.class);
142 var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null);
144 provider.deleteAutomationCompositionDefinition(compositionId);
146 verify(acDefinitionProvider).deleteAcDefintion(compositionId);
151 var acDefinitionProvider = mock(AcDefinitionProvider.class);
152 var acmDefinition = CommonTestData.createAcDefinition(
153 InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML), AcTypeState.COMMISSIONED);
154 var compositionId = acmDefinition.getCompositionId();
155 when(acDefinitionProvider.getAcDefinition(compositionId)).thenReturn(acmDefinition);
157 var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
158 var provider = new CommissioningProvider(acDefinitionProvider, mock(AutomationCompositionProvider.class),
159 new AcTypeStateResolver(), participantUpdatePublisher);
161 var acTypeStateUpdate = new AcTypeStateUpdate();
162 acTypeStateUpdate.setPrimeOrder(PrimeOrder.PRIME);
163 provider.compositionDefinitionPriming(compositionId, acTypeStateUpdate);
164 verify(acDefinitionProvider).updateAcDefinition(acmDefinition);
165 verify(participantUpdatePublisher).sendPriming(any(), any(), any());
169 void testDepriming() {
170 var acDefinitionProvider = mock(AcDefinitionProvider.class);
171 var acmDefinition = CommonTestData.createAcDefinition(
172 InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML), AcTypeState.PRIMED);
173 var compositionId = acmDefinition.getCompositionId();
174 when(acDefinitionProvider.getAcDefinition(compositionId)).thenReturn(acmDefinition);
176 var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
177 var provider = new CommissioningProvider(acDefinitionProvider, mock(AutomationCompositionProvider.class),
178 new AcTypeStateResolver(), participantUpdatePublisher);
180 var acTypeStateUpdate = new AcTypeStateUpdate();
181 acTypeStateUpdate.setPrimeOrder(PrimeOrder.DEPRIME);
182 provider.compositionDefinitionPriming(compositionId, acTypeStateUpdate);
183 verify(participantUpdatePublisher).sendDepriming(compositionId);