fe0180a74e878b3d82215560f7a98369ff600f9d
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021-2022 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.Mockito.mock;
27 import static org.mockito.Mockito.verify;
28 import static org.mockito.Mockito.when;
29 import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
30
31 import java.util.List;
32 import java.util.UUID;
33 import org.junit.jupiter.api.Test;
34 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
35 import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
36 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
37 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
38 import org.onap.policy.clamp.models.acm.concepts.Participant;
39 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
40 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
41 import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
42 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
43
44 class CommissioningProviderTest {
45
46     /**
47      * Test the fetching of automation composition definitions (ToscaServiceTemplates).
48      *
49      * @throws Exception .
50      */
51     @Test
52     void testGetAutomationCompositionDefinitions() {
53         var acProvider = mock(AutomationCompositionProvider.class);
54         var participantProvider = mock(ParticipantProvider.class);
55         var acDefinitionProvider = mock(AcDefinitionProvider.class);
56
57         var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, participantProvider);
58
59         var serviceTemplates = provider.getAutomationCompositionDefinitions(null, null);
60         assertThat(serviceTemplates.getServiceTemplates()).isEmpty();
61
62         when(acDefinitionProvider.getServiceTemplateList(null, null))
63                 .thenReturn(List.of(new ToscaServiceTemplate()));
64         serviceTemplates = provider.getAutomationCompositionDefinitions(null, null);
65         assertThat(serviceTemplates.getServiceTemplates()).hasSize(1);
66     }
67
68     /**
69      * Test the creation of automation composition definitions (ToscaServiceTemplates).
70      *
71      * @throws Exception .
72      */
73     @Test
74     void testCreateAutomationCompositionDefinitions() {
75         var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
76         serviceTemplate.setName("Name");
77         serviceTemplate.setVersion("1.0.0");
78         var acmDefinition = new AutomationCompositionDefinition();
79         acmDefinition.setCompositionId(UUID.randomUUID());
80         acmDefinition.setServiceTemplate(serviceTemplate);
81         var acDefinitionProvider = mock(AcDefinitionProvider.class);
82         when(acDefinitionProvider.createAutomationCompositionDefinition(serviceTemplate)).thenReturn(acmDefinition);
83
84         var participantProvider = mock(ParticipantProvider.class);
85         when(participantProvider.getParticipants()).thenReturn(List.of(new Participant()));
86         var acProvider = mock(AutomationCompositionProvider.class);
87         var supervisionHandler = mock(SupervisionHandler.class);
88         var provider =
89                 new CommissioningProvider(acDefinitionProvider, acProvider, supervisionHandler, participantProvider);
90         var affectedDefinitions = provider
91                 .createAutomationCompositionDefinitions(serviceTemplate).getAffectedAutomationCompositionDefinitions();
92         verify(acDefinitionProvider).createAutomationCompositionDefinition(serviceTemplate);
93         verify(supervisionHandler).handleSendCommissionMessage(acmDefinition);
94         // Response should return the number of node templates present in the service template
95         assertThat(affectedDefinitions).hasSize(7);
96     }
97
98     /**
99      * Test the fetching of a full ToscaServiceTemplate object - as opposed to the reduced template that is being
100      * tested in the testGetToscaServiceTemplateReduced() test.
101      *
102      */
103     @Test
104     void testGetToscaServiceTemplateList() {
105         var acDefinitionProvider = mock(AcDefinitionProvider.class);
106         var acProvider = mock(AutomationCompositionProvider.class);
107         var participantProvider = mock(ParticipantProvider.class);
108
109         var provider =
110                 new CommissioningProvider(acDefinitionProvider, acProvider, null, participantProvider);
111         var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
112         when(acDefinitionProvider.getServiceTemplateList(null, null)).thenReturn(List.of(serviceTemplate));
113
114         var returnedServiceTemplate = provider.getAutomationCompositionDefinitions(null, null);
115         assertThat(returnedServiceTemplate).isNotNull();
116         assertThat(returnedServiceTemplate.getServiceTemplates()).isNotEmpty();
117     }
118
119     @Test
120     void testDeletecDefinitionDabRequest() {
121         var acDefinitionProvider = mock(AcDefinitionProvider.class);
122         var acProvider = mock(AutomationCompositionProvider.class);
123         var participantProvider = mock(ParticipantProvider.class);
124
125         var compositionId = UUID.randomUUID();
126         when(acProvider.getAcInstancesByCompositionId(compositionId)).thenReturn(List.of(new AutomationComposition()));
127
128         var provider = new CommissioningProvider(acDefinitionProvider, acProvider, null, participantProvider);
129
130         assertThatThrownBy(() -> provider.deleteAutomationCompositionDefinition(compositionId))
131                 .hasMessageMatching("Delete instances, to commission automation composition definitions");
132     }
133
134     @Test
135     void testDeleteAutomationCompositionDefinition() {
136         var participantProvider = mock(ParticipantProvider.class);
137         when(participantProvider.getParticipants()).thenReturn(List.of(new Participant()));
138
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);
143
144         var acProvider = mock(AutomationCompositionProvider.class);
145         var supervisionHandler = mock(SupervisionHandler.class);
146         var provider =
147                 new CommissioningProvider(acDefinitionProvider, acProvider, supervisionHandler, participantProvider);
148
149         provider.deleteAutomationCompositionDefinition(compositionId);
150
151         verify(supervisionHandler).handleSendDeCommissionMessage(compositionId);
152         verify(acDefinitionProvider).deleteAcDefintion(compositionId);
153     }
154 }