071fc26fd6b693496f9e0131ba3c0c9aaa0e2da6
[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.verify;
29 import static org.mockito.Mockito.when;
30 import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
31
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;
47
48 class CommissioningProviderTest {
49
50     /**
51      * Test the fetching of automation composition definitions (ToscaServiceTemplates).
52      *
53      * @throws Exception .
54      */
55     @Test
56     void testGetAutomationCompositionDefinitions() {
57         var acProvider = mock(AutomationCompositionProvider.class);
58         var acDefinitionProvider = mock(AcDefinitionProvider.class);
59
60         var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null);
61
62         var serviceTemplates = provider.getAutomationCompositionDefinitions(null, null);
63         assertThat(serviceTemplates.getServiceTemplates()).isEmpty();
64
65         when(acDefinitionProvider.getServiceTemplateList(null, null)).thenReturn(List.of(new ToscaServiceTemplate()));
66         serviceTemplates = provider.getAutomationCompositionDefinitions(null, null);
67         assertThat(serviceTemplates.getServiceTemplates()).hasSize(1);
68     }
69
70     /**
71      * Test the creation of automation composition definitions (ToscaServiceTemplates).
72      *
73      * @throws Exception .
74      */
75     @Test
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);
85
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);
93     }
94
95     /**
96      * Test the fetching of a full ToscaServiceTemplate object - as opposed to the reduced template that is being
97      * tested in the testGetToscaServiceTemplateReduced() test.
98      *
99      */
100     @Test
101     void testGetToscaServiceTemplateList() {
102         var acDefinitionProvider = mock(AcDefinitionProvider.class);
103         var acProvider = mock(AutomationCompositionProvider.class);
104
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));
108
109         var returnedServiceTemplate = provider.getAutomationCompositionDefinitions(null, null);
110         assertThat(returnedServiceTemplate).isNotNull();
111         assertThat(returnedServiceTemplate.getServiceTemplates()).isNotEmpty();
112     }
113
114     @Test
115     void testDeletecDefinitionDabRequest() {
116         var acDefinitionProvider = mock(AcDefinitionProvider.class);
117         var acProvider = mock(AutomationCompositionProvider.class);
118
119         var compositionId = UUID.randomUUID();
120         when(acProvider.getAcInstancesByCompositionId(compositionId)).thenReturn(List.of(new AutomationComposition()));
121
122         var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null);
123
124         assertThatThrownBy(() -> provider.deleteAutomationCompositionDefinition(compositionId))
125                 .hasMessageMatching("Delete instances, to commission automation composition definitions");
126     }
127
128     @Test
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);
134
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);
140
141         var acProvider = mock(AutomationCompositionProvider.class);
142         var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, null);
143
144         provider.deleteAutomationCompositionDefinition(compositionId);
145
146         verify(acDefinitionProvider).deleteAcDefintion(compositionId);
147     }
148
149     @Test
150     void testPriming() {
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);
156
157         var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
158         var provider = new CommissioningProvider(acDefinitionProvider, mock(AutomationCompositionProvider.class),
159                 new AcTypeStateResolver(), participantUpdatePublisher);
160
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());
166     }
167
168     @Test
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);
175
176         var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
177         var provider = new CommissioningProvider(acDefinitionProvider, mock(AutomationCompositionProvider.class),
178                 new AcTypeStateResolver(), participantUpdatePublisher);
179
180         var acTypeStateUpdate = new AcTypeStateUpdate();
181         acTypeStateUpdate.setPrimeOrder(PrimeOrder.DEPRIME);
182         provider.compositionDefinitionPriming(compositionId, acTypeStateUpdate);
183         verify(participantUpdatePublisher).sendDepriming(compositionId);
184     }
185 }