fbaa4fed51cff86baa5e247b5dafdb555d20fe43
[policy/clamp.git] /
1 /*-
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
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.clamp.acm.runtime.commissioning;
23
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.timeout;
29 import static org.mockito.Mockito.verify;
30 import static org.mockito.Mockito.when;
31 import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
32
33 import java.util.List;
34 import java.util.UUID;
35 import org.junit.jupiter.api.Test;
36 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
37 import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantPrimePublisher;
38 import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
39 import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
40 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
41 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
42 import org.onap.policy.clamp.models.acm.messages.rest.commissioning.AcTypeStateUpdate;
43 import org.onap.policy.clamp.models.acm.messages.rest.commissioning.PrimeOrder;
44 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
45 import org.onap.policy.clamp.models.acm.persistence.provider.AcTypeStateResolver;
46 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
48
49 class CommissioningProviderTest {
50
51     /**
52      * Test the fetching of automation composition definitions (ToscaServiceTemplates).
53      *
54      * @throws Exception .
55      */
56     @Test
57     void testGetAutomationCompositionDefinitions() {
58         var acProvider = mock(AutomationCompositionProvider.class);
59         var acDefinitionProvider = mock(AcDefinitionProvider.class);
60
61         var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null);
62
63         var serviceTemplates = provider.getAutomationCompositionDefinitions(null, null);
64         assertThat(serviceTemplates.getServiceTemplates()).isEmpty();
65
66         when(acDefinitionProvider.getServiceTemplateList(null, null)).thenReturn(List.of(new ToscaServiceTemplate()));
67         serviceTemplates = provider.getAutomationCompositionDefinitions(null, null);
68         assertThat(serviceTemplates.getServiceTemplates()).hasSize(1);
69     }
70
71     /**
72      * Test the creation of automation composition definitions (ToscaServiceTemplates).
73      *
74      * @throws Exception .
75      */
76     @Test
77     void testCreateAutomationCompositionDefinitions() {
78         var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
79         serviceTemplate.setName("Name");
80         serviceTemplate.setVersion("1.0.0");
81         var acmDefinition = new AutomationCompositionDefinition();
82         acmDefinition.setCompositionId(UUID.randomUUID());
83         acmDefinition.setServiceTemplate(serviceTemplate);
84         var acDefinitionProvider = mock(AcDefinitionProvider.class);
85         when(acDefinitionProvider.createAutomationCompositionDefinition(serviceTemplate)).thenReturn(acmDefinition);
86
87         var acProvider = mock(AutomationCompositionProvider.class);
88         var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null);
89         var affectedDefinitions = provider.createAutomationCompositionDefinition(serviceTemplate)
90                 .getAffectedAutomationCompositionDefinitions();
91         verify(acDefinitionProvider).createAutomationCompositionDefinition(serviceTemplate);
92         // Response should return the number of node templates present in the service template
93         assertThat(affectedDefinitions).hasSize(7);
94     }
95
96     /**
97      * Test the fetching of a full ToscaServiceTemplate object - as opposed to the reduced template that is being
98      * tested in the testGetToscaServiceTemplateReduced() test.
99      *
100      */
101     @Test
102     void testGetToscaServiceTemplateList() {
103         var acDefinitionProvider = mock(AcDefinitionProvider.class);
104         var acProvider = mock(AutomationCompositionProvider.class);
105
106         var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null);
107         var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
108         when(acDefinitionProvider.getServiceTemplateList(null, null)).thenReturn(List.of(serviceTemplate));
109
110         var returnedServiceTemplate = provider.getAutomationCompositionDefinitions(null, null);
111         assertThat(returnedServiceTemplate).isNotNull();
112         assertThat(returnedServiceTemplate.getServiceTemplates()).isNotEmpty();
113     }
114
115     @Test
116     void testDeletecDefinitionDabRequest() {
117         var acDefinitionProvider = mock(AcDefinitionProvider.class);
118         var acProvider = mock(AutomationCompositionProvider.class);
119
120         var compositionId = UUID.randomUUID();
121         when(acProvider.getAcInstancesByCompositionId(compositionId)).thenReturn(List.of(new AutomationComposition()));
122
123         var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null);
124
125         assertThatThrownBy(() -> provider.deleteAutomationCompositionDefinition(compositionId))
126                 .hasMessageMatching("Delete instances, to commission automation composition definitions");
127     }
128
129     @Test
130     void testDeleteAutomationCompositionDefinition() {
131         var acDefinitionProvider = mock(AcDefinitionProvider.class);
132         var compositionId = UUID.randomUUID();
133         var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
134         when(acDefinitionProvider.deleteAcDefintion(compositionId)).thenReturn(serviceTemplate);
135
136         var acmDefinition = new AutomationCompositionDefinition();
137         acmDefinition.setCompositionId(compositionId);
138         acmDefinition.setServiceTemplate(serviceTemplate);
139         acmDefinition.setState(AcTypeState.COMMISSIONED);
140         when(acDefinitionProvider.getAcDefinition(compositionId)).thenReturn(acmDefinition);
141
142         var acProvider = mock(AutomationCompositionProvider.class);
143         var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null);
144
145         provider.deleteAutomationCompositionDefinition(compositionId);
146
147         verify(acDefinitionProvider).deleteAcDefintion(compositionId);
148     }
149
150     @Test
151     void testPriming() {
152         var acDefinitionProvider = mock(AcDefinitionProvider.class);
153         var acmDefinition = CommonTestData.createAcDefinition(
154                 InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML), AcTypeState.COMMISSIONED);
155         var compositionId = acmDefinition.getCompositionId();
156         when(acDefinitionProvider.getAcDefinition(compositionId)).thenReturn(acmDefinition);
157
158         var participantPrimePublisher = mock(ParticipantPrimePublisher.class);
159         var provider = new CommissioningProvider(acDefinitionProvider, mock(AutomationCompositionProvider.class),
160                 new AcTypeStateResolver(), participantPrimePublisher);
161
162         var acTypeStateUpdate = new AcTypeStateUpdate();
163         acTypeStateUpdate.setPrimeOrder(PrimeOrder.PRIME);
164         provider.compositionDefinitionPriming(compositionId, acTypeStateUpdate);
165         verify(acDefinitionProvider).updateAcDefinition(acmDefinition);
166         verify(participantPrimePublisher, timeout(1000).times(1)).sendPriming(any(), any(), any());
167     }
168
169     @Test
170     void testDepriming() {
171         var acDefinitionProvider = mock(AcDefinitionProvider.class);
172         var acmDefinition = CommonTestData.createAcDefinition(
173                 InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML), AcTypeState.PRIMED);
174         var compositionId = acmDefinition.getCompositionId();
175         when(acDefinitionProvider.getAcDefinition(compositionId)).thenReturn(acmDefinition);
176
177         var participantPrimePublisher = mock(ParticipantPrimePublisher.class);
178         var provider = new CommissioningProvider(acDefinitionProvider, mock(AutomationCompositionProvider.class),
179                 new AcTypeStateResolver(), participantPrimePublisher);
180
181         var acTypeStateUpdate = new AcTypeStateUpdate();
182         acTypeStateUpdate.setPrimeOrder(PrimeOrder.DEPRIME);
183         provider.compositionDefinitionPriming(compositionId, acTypeStateUpdate);
184         verify(participantPrimePublisher, timeout(1000).times(1)).sendDepriming(compositionId);
185     }
186 }