b479f022f51be7431c2d9b8a925a0cc34dfa4223
[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.models.acm.persistence.provider;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.verify;
28 import static org.mockito.Mockito.when;
29
30 import java.util.HashMap;
31 import java.util.List;
32 import java.util.Map;
33 import java.util.Optional;
34 import java.util.UUID;
35 import org.junit.jupiter.api.BeforeAll;
36 import org.junit.jupiter.api.Test;
37 import org.mockito.Mockito;
38 import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
39 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
40 import org.onap.policy.clamp.models.acm.concepts.NodeTemplateState;
41 import org.onap.policy.clamp.models.acm.document.concepts.DocToscaServiceTemplate;
42 import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationCompositionDefinition;
43 import org.onap.policy.clamp.models.acm.persistence.repository.AutomationCompositionDefinitionRepository;
44 import org.onap.policy.clamp.models.acm.utils.CommonTestData;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
47 import org.springframework.data.domain.Example;
48
49 class AcDefinitionProviderTest {
50
51     private static final String TOSCA_SERVICE_TEMPLATE_YAML = "clamp/acm/pmsh/funtional-pmsh-usecase.yaml";
52     private static final String TOSCA_SERVICE_TEMPLATE_YAML_PROP =
53             "clamp/acm/test/tosca-template-additional-properties.yaml";
54
55     private static ToscaServiceTemplate inputServiceTemplate;
56
57     @BeforeAll
58     static void loadServiceTemplate() {
59         inputServiceTemplate = CommonTestData.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
60     }
61
62     @Test
63     void testDocCopyCompare() {
64
65         var inputServiceTemplateProperties = CommonTestData.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML_PROP);
66         var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplateProperties);
67         var docServiceTemplateCopy = new DocToscaServiceTemplate(docServiceTemplate);
68
69         assertThat(docServiceTemplate.compareTo(docServiceTemplateCopy)).isEqualByComparingTo(0);
70         assertThat(docServiceTemplate.compareToWithoutEntities(docServiceTemplateCopy)).isZero();
71
72         var acmDefinition = getAcDefinition(docServiceTemplate);
73         var acmDefinitionCopy = getAcDefinition(docServiceTemplateCopy);
74
75         assertThat(acmDefinition.getServiceTemplate().getName())
76                 .isEqualTo(acmDefinitionCopy.getServiceTemplate().getName());
77
78     }
79
80     @Test
81     void testCreateServiceTemplate() {
82         var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplate);
83         var acmDefinition = getAcDefinition(docServiceTemplate);
84
85         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
86         when(acmDefinitionRepository.save(any(JpaAutomationCompositionDefinition.class)))
87                 .thenReturn(new JpaAutomationCompositionDefinition(acmDefinition));
88
89         var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
90         var result = acDefinitionProvider.createAutomationCompositionDefinition(inputServiceTemplate);
91
92         assertThat(result.getServiceTemplate()).isEqualTo(docServiceTemplate.toAuthorative());
93         assertThat(result.getServiceTemplate().getMetadata() != null);
94     }
95
96     @Test
97     void testCreateServiceTemplateWithMetadata() {
98         var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplate);
99         var acmDefinition = getAcDefinition(docServiceTemplate);
100
101         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
102         when(acmDefinitionRepository.save(any(JpaAutomationCompositionDefinition.class)))
103             .thenReturn(new JpaAutomationCompositionDefinition(acmDefinition));
104
105         var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
106         inputServiceTemplate.setMetadata(new HashMap<>());
107         var result = acDefinitionProvider.createAutomationCompositionDefinition(inputServiceTemplate);
108
109         assertThat(result.getServiceTemplate()).isEqualTo(docServiceTemplate.toAuthorative());
110         assertThat(result.getServiceTemplate().getMetadata() != null);
111     }
112
113     @Test
114     void testUpdateServiceTemplate() {
115         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
116         var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
117         acDefinitionProvider.updateServiceTemplate(UUID.randomUUID(), inputServiceTemplate);
118         verify(acmDefinitionRepository).save(any(JpaAutomationCompositionDefinition.class));
119     }
120
121     @Test
122     void testUpdateAcDefinition() {
123         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
124         var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
125         var acmDefinition = getAcDefinition(new DocToscaServiceTemplate(inputServiceTemplate));
126         acDefinitionProvider.updateAcDefinition(acmDefinition);
127         verify(acmDefinitionRepository).save(any(JpaAutomationCompositionDefinition.class));
128     }
129
130     @Test
131     void testGetAcDefinition() {
132         var jpa = new JpaAutomationCompositionDefinition();
133         jpa.fromAuthorative(getAcDefinition(new DocToscaServiceTemplate(inputServiceTemplate)));
134         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
135         when(acmDefinitionRepository.findById(jpa.getCompositionId())).thenReturn(Optional.of(jpa));
136         var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
137         var result = acDefinitionProvider.getAcDefinition(UUID.fromString(jpa.getCompositionId()));
138         assertThat(result).isNotNull();
139     }
140
141     @Test
142     void testGetAcDefinitionNotFound() {
143         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
144         var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
145         var compositionId = UUID.randomUUID();
146         assertThatThrownBy(() -> acDefinitionProvider.getAcDefinition(compositionId))
147                 .hasMessage("Get serviceTemplate \"" + compositionId + "\" failed, serviceTemplate does not exist");
148     }
149
150     @Test
151     void testFindAcDefinition() {
152         var jpa = new JpaAutomationCompositionDefinition();
153         jpa.fromAuthorative(getAcDefinition(new DocToscaServiceTemplate(inputServiceTemplate)));
154         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
155         when(acmDefinitionRepository.findById(jpa.getCompositionId())).thenReturn(Optional.of(jpa));
156         var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
157         var result = acDefinitionProvider.findAcDefinition(UUID.fromString(jpa.getCompositionId()));
158         assertThat(result).isNotNull();
159     }
160
161     @Test
162     void testGetAllAcDefinitions() {
163         var jpa = new JpaAutomationCompositionDefinition();
164         jpa.fromAuthorative(getAcDefinition(new DocToscaServiceTemplate(inputServiceTemplate)));
165         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
166         when(acmDefinitionRepository.findAll()).thenReturn(List.of(jpa));
167         var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
168         var result = acDefinitionProvider.getAllAcDefinitions();
169         assertThat(result).hasSize(1);
170     }
171
172     @Test
173     void testDeleteAcDefintion() {
174         var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplate);
175         var acmDefinition = getAcDefinition(docServiceTemplate);
176
177         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
178         when(acmDefinitionRepository.findById(acmDefinition.getCompositionId().toString()))
179                 .thenReturn(Optional.of(new JpaAutomationCompositionDefinition(acmDefinition)));
180
181         var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
182         var result = acDefinitionProvider.deleteAcDefintion(acmDefinition.getCompositionId());
183
184         assertThat(result).isEqualTo(docServiceTemplate.toAuthorative());
185     }
186
187     @Test
188     void testDeleteServiceTemplateEmpty() {
189         var compositionId = UUID.randomUUID();
190         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
191         var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
192         assertThatThrownBy(() -> acDefinitionProvider.deleteAcDefintion(compositionId))
193                 .hasMessage("delete of Automation Composition Definition \"" + compositionId
194                         + "\" failed, Automation Composition Definition does not exist");
195     }
196
197     @Test
198     void testGetServiceTemplate() {
199         var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplate);
200         var acmDefinition = getAcDefinition(docServiceTemplate);
201         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
202         when(acmDefinitionRepository.findAll(Mockito.<Example<JpaAutomationCompositionDefinition>>any()))
203                 .thenReturn(List.of(new JpaAutomationCompositionDefinition(acmDefinition)));
204
205         var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
206         var result = acDefinitionProvider.getServiceTemplateList(inputServiceTemplate.getName(),
207                 inputServiceTemplate.getVersion());
208
209         assertThat(result).hasSize(1);
210         assertThat(result.get(0)).isEqualTo(acmDefinition.getServiceTemplate());
211     }
212
213     @Test
214     void testGetServiceTemplateNulls() {
215         var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplate);
216         var acmDefinition = getAcDefinition(docServiceTemplate);
217         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
218         when(acmDefinitionRepository.findAll(Mockito.<Example<JpaAutomationCompositionDefinition>>any()))
219             .thenReturn(List.of(new JpaAutomationCompositionDefinition(acmDefinition)));
220
221         var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
222         var result = acDefinitionProvider.getServiceTemplateList(null,
223             inputServiceTemplate.getVersion());
224
225         assertThat(result).hasSize(1);
226         assertThat(result.get(0)).isEqualTo(acmDefinition.getServiceTemplate());
227
228         result = acDefinitionProvider.getServiceTemplateList(inputServiceTemplate.getName(),
229             null);
230
231         assertThat(result).hasSize(1);
232         assertThat(result.get(0)).isEqualTo(acmDefinition.getServiceTemplate());
233
234         result = acDefinitionProvider.getServiceTemplateList(null,
235             null);
236
237         assertThat(result).hasSize(0);
238         assertThat(result.isEmpty());
239     }
240
241     private AutomationCompositionDefinition getAcDefinition(DocToscaServiceTemplate docServiceTemplate) {
242         var acmDefinition = new AutomationCompositionDefinition();
243         acmDefinition.setCompositionId(UUID.randomUUID());
244         acmDefinition.setState(AcTypeState.COMMISSIONED);
245         acmDefinition.setServiceTemplate(docServiceTemplate.toAuthorative());
246         var nodeTemplateState = new NodeTemplateState();
247         nodeTemplateState.setNodeTemplateStateId(UUID.randomUUID());
248         nodeTemplateState.setNodeTemplateId(new ToscaConceptIdentifier("name", "1.0.0"));
249         nodeTemplateState.setState(AcTypeState.COMMISSIONED);
250         nodeTemplateState.setParticipantId(UUID.randomUUID());
251         acmDefinition.setElementStateMap(Map.of(nodeTemplateState.getNodeTemplateId().getName(), nodeTemplateState));
252         return acmDefinition;
253     }
254 }