7d45b643e32424a00cf2c184ab7d42800a90171d
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2020 Nokia Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20 package org.onap.so.bpmn.servicedecomposition.tasks;
21
22 import com.fasterxml.jackson.databind.ObjectMapper;
23 import org.junit.Before;
24 import org.junit.Rule;
25 import org.junit.Test;
26 import org.junit.rules.ExpectedException;
27 import org.junit.runner.RunWith;
28 import org.junit.runners.Parameterized;
29 import org.mockito.ArgumentMatchers;
30 import org.mockito.InjectMocks;
31 import org.mockito.Mock;
32 import org.mockito.Mockito;
33 import org.mockito.MockitoAnnotations;
34 import org.mockito.Spy;
35 import org.onap.aai.domain.yang.GenericVnf;
36 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
37 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
38 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
39 import org.onap.so.bpmn.servicedecomposition.entities.ConfigurationResourceKeys;
40 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
41 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
42 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
43 import org.onap.so.bpmn.servicedecomposition.entities.ServiceModel;
44 import org.onap.so.db.catalog.beans.ConfigurationResourceCustomization;
45 import org.onap.so.db.catalog.beans.Service;
46 import org.onap.so.db.request.beans.InfraActiveRequests;
47 import org.onap.so.serviceinstancebeans.CloudConfiguration;
48 import org.onap.so.serviceinstancebeans.ModelInfo;
49 import org.onap.so.serviceinstancebeans.RequestDetails;
50 import java.io.File;
51 import java.util.ArrayList;
52 import java.util.Arrays;
53 import java.util.Collection;
54 import java.util.List;
55 import java.util.Map;
56 import static org.mockito.ArgumentMatchers.any;
57 import static org.mockito.ArgumentMatchers.eq;
58 import static org.mockito.ArgumentMatchers.isA;
59 import static org.mockito.Mockito.doNothing;
60 import static org.mockito.Mockito.doReturn;
61 import static org.mockito.Mockito.times;
62 import static org.mockito.Mockito.verify;
63 import static org.onap.so.bpmn.servicedecomposition.tasks.BaseBBInputSetupTestHelper.prepareConfigurationResourceKeys;
64 import static org.onap.so.bpmn.servicedecomposition.tasks.BaseBBInputSetupTestHelper.prepareLookupKeyMap;
65
66 @RunWith(Parameterized.class)
67 public class BBInputSetupPopulateMethodsTest {
68     private static final String RESOURCE_PATH = "src/test/resources/__files/ExecuteBuildingBlock/";
69
70     private String resourceId;
71     private String requestAction;
72     private Service service;
73     private String vnfType;
74
75     protected ObjectMapper mapper = new ObjectMapper();
76
77     @Spy
78     @InjectMocks
79     private BBInputSetup SPY_bbInputSetup = new BBInputSetup();
80
81     @Mock
82     private BBInputSetupUtils bbInputSetupUtils;
83
84     @Spy
85     private BBInputSetupMapperLayer SPY_bbInputSetupMapperLayer;
86
87     @Rule
88     public ExpectedException expectedException = ExpectedException.none();
89
90     public BBInputSetupPopulateMethodsTest(String vnfType) {
91         this.vnfType = vnfType;
92     }
93
94     @Before
95     public void setup() {
96         MockitoAnnotations.initMocks(this);
97     }
98
99     @Parameterized.Parameters
100     public static Collection input() {
101         return Arrays.asList(new Object[] {"vnfType", null});
102     }
103
104     @Before
105     public void init() {
106         resourceId = "123";
107         requestAction = "createInstance";
108         service = Mockito.mock(Service.class);
109     }
110
111     @Test
112     public void test_getGBBMacro_populateL3Network_shouldBeCalled() throws Exception {
113         // given
114         GeneralBuildingBlock gBB = mapper.readValue(new File(RESOURCE_PATH + "GeneralBuildingBlockExpected.json"),
115                 GeneralBuildingBlock.class);
116         Map<ResourceKey, String> lookupKeyMap = prepareLookupKeyMap();
117
118         ConfigurationResourceKeys configResourceKeys = prepareConfigurationResourceKeys();
119         RequestDetails requestDetails = mapper
120                 .readValue(new File(RESOURCE_PATH + "RequestDetailsInput_serviceMacro.json"), RequestDetails.class);
121         ExecuteBuildingBlock executeBB = mapper.readValue(new File(RESOURCE_PATH + "ExecuteBuildingBlockSimple.json"),
122                 ExecuteBuildingBlock.class);
123         executeBB.setConfigurationResourceKeys(configResourceKeys).setRequestDetails(requestDetails);
124         BuildingBlock buildingBlock = executeBB.getBuildingBlock();
125         buildingBlock.setBpmnFlowName(AssignFlows.NETWORK_MACRO.toString())
126                 .setKey("ab153b6e-c364-44c0-bef6-1f2982117f04");
127
128         doReturn(gBB).when(SPY_bbInputSetup).getGBBALaCarteService(executeBB, requestDetails, lookupKeyMap,
129                 requestAction, lookupKeyMap.get(ResourceKey.SERVICE_INSTANCE_ID));
130         doReturn(service).when(bbInputSetupUtils)
131                 .getCatalogServiceByModelUUID(gBB.getServiceInstance().getModelInfoServiceInstance().getModelUuid());
132         // when
133         SPY_bbInputSetup.getGBBMacro(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId, vnfType);
134         // then
135         verify(SPY_bbInputSetup, times(1)).populateL3Network(any(String.class), isA(ModelInfo.class),
136                 isA(Service.class), any(String.class), isA(ServiceInstance.class), any(), any(String.class), any());
137     }
138
139     @Test
140     public void test_getGBBMacro_populateGenericVnf_shouldBeCalled() throws Exception {
141         // given
142         GeneralBuildingBlock gBB = mapper.readValue(new File(RESOURCE_PATH + "GeneralBuildingBlockExpected.json"),
143                 GeneralBuildingBlock.class);
144         RequestDetails requestDetails = mapper
145                 .readValue(new File(RESOURCE_PATH + "RequestDetailsInput_serviceMacro.json"), RequestDetails.class);
146         InfraActiveRequests request = Mockito.mock(InfraActiveRequests.class);
147         GenericVnf aaiVnf = new GenericVnf();
148         aaiVnf.setModelCustomizationId("modelCustId");
149         Map<ResourceKey, String> lookupKeyMap = prepareLookupKeyMap();
150
151         ExecuteBuildingBlock executeBB = mapper.readValue(new File(RESOURCE_PATH + "ExecuteBuildingBlockSimple.json"),
152                 ExecuteBuildingBlock.class);
153         BuildingBlock buildingBlock = executeBB.getBuildingBlock();
154         buildingBlock.setBpmnFlowName(AssignFlows.VNF.toString()).setKey("ab153b6e-c364-44c0-bef6-1f2982117f04");
155
156         doReturn(gBB).when(SPY_bbInputSetup).getGBBALaCarteService(executeBB, requestDetails, lookupKeyMap,
157                 requestAction, lookupKeyMap.get(ResourceKey.SERVICE_INSTANCE_ID));
158         doReturn(request).when(bbInputSetupUtils).getInfraActiveRequest(executeBB.getRequestId());
159         doReturn(service).when(bbInputSetupUtils)
160                 .getCatalogServiceByModelUUID(gBB.getServiceInstance().getModelInfoServiceInstance().getModelUuid());
161         doNothing().when(bbInputSetupUtils).updateInfraActiveRequestVnfId(request,
162                 lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID));
163         doReturn(aaiVnf).when(bbInputSetupUtils).getAAIGenericVnf(any(String.class));
164
165         // when
166         SPY_bbInputSetup.getGBBMacro(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId, vnfType);
167         // then
168         verify(SPY_bbInputSetup, times(1)).populateGenericVnf(isA(ModelInfo.class), any(String.class),
169                 isA(org.onap.so.serviceinstancebeans.Platform.class),
170                 isA(org.onap.so.serviceinstancebeans.LineOfBusiness.class), isA(Service.class), any(String.class),
171                 isA(ServiceInstance.class), any(), any(), any(String.class), eq(vnfType), any(), any(String.class),
172                 any(String.class), eq(false));
173     }
174
175     @Test
176     public void test_getGBBMacro_populateVfModule_shouldBeCalled() throws Exception {
177         // given
178         GeneralBuildingBlock gBB = mapper.readValue(new File(RESOURCE_PATH + "GeneralBuildingBlockWithVnf.json"),
179                 GeneralBuildingBlock.class);
180         RequestDetails requestDetails = mapper
181                 .readValue(new File(RESOURCE_PATH + "RequestDetailsInput_serviceMacro.json"), RequestDetails.class);
182         GenericVnf aaiVnf = new GenericVnf();
183         aaiVnf.setModelCustomizationId("modelCustId");
184         Map<ResourceKey, String> lookupKeyMap = prepareLookupKeyMap();
185         lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, null);
186
187         ConfigurationResourceKeys configResourceKeys = prepareConfigurationResourceKeys();
188         ExecuteBuildingBlock executeBB = mapper.readValue(new File(RESOURCE_PATH + "ExecuteBuildingBlockSimple.json"),
189                 ExecuteBuildingBlock.class);
190         executeBB.setConfigurationResourceKeys(configResourceKeys).setRequestDetails(requestDetails);
191         BuildingBlock buildingBlock = executeBB.getBuildingBlock();
192         buildingBlock.setBpmnFlowName(AssignFlows.VF_MODULE.toString()).setKey("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f");
193
194         doReturn(gBB).when(SPY_bbInputSetup).getGBBALaCarteService(executeBB, requestDetails, lookupKeyMap,
195                 requestAction, lookupKeyMap.get(ResourceKey.SERVICE_INSTANCE_ID));
196         doReturn(service).when(bbInputSetupUtils)
197                 .getCatalogServiceByModelUUID(gBB.getServiceInstance().getModelInfoServiceInstance().getModelUuid());
198         doReturn("vnfId").when(SPY_bbInputSetup).getVnfId(executeBB, lookupKeyMap);
199         doReturn(aaiVnf).when(bbInputSetupUtils).getAAIGenericVnf(any(String.class));
200         // when
201         SPY_bbInputSetup.getGBBMacro(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId, vnfType);
202         // then
203         verify(SPY_bbInputSetup, times(1)).populateVfModule(isA(ModelInfo.class), isA(Service.class), any(String.class),
204                 isA(ServiceInstance.class), any(), any(String.class), any(), any(String.class), any(),
205                 isA(CloudConfiguration.class), Mockito.anyBoolean(), isA(ServiceModel.class));
206     }
207
208     @Test
209     public void test_getGBBMacro_populateVolumeGroup_shouldBeCalled() throws Exception {
210         // given
211         GeneralBuildingBlock gBB = mapper.readValue(new File(RESOURCE_PATH + "GeneralBuildingBlockWithVnf.json"),
212                 GeneralBuildingBlock.class);
213         RequestDetails requestDetails = mapper
214                 .readValue(new File(RESOURCE_PATH + "RequestDetailsInput_serviceMacro.json"), RequestDetails.class);
215         GenericVnf aaiVnf = new GenericVnf();
216         aaiVnf.setModelCustomizationId("modelCustId");
217         Map<ResourceKey, String> lookupKeyMap = prepareLookupKeyMap();
218         lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, null);
219
220         ExecuteBuildingBlock executeBB = mapper.readValue(new File(RESOURCE_PATH + "ExecuteBuildingBlockSimple.json"),
221                 ExecuteBuildingBlock.class);
222         BuildingBlock buildingBlock = executeBB.getBuildingBlock();
223         buildingBlock.setBpmnFlowName(AssignFlows.VOLUME_GROUP.toString())
224                 .setKey("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
225
226         doReturn(gBB).when(SPY_bbInputSetup).getGBBALaCarteService(executeBB, requestDetails, lookupKeyMap,
227                 requestAction, lookupKeyMap.get(ResourceKey.SERVICE_INSTANCE_ID));
228         doReturn(service).when(bbInputSetupUtils)
229                 .getCatalogServiceByModelUUID(gBB.getServiceInstance().getModelInfoServiceInstance().getModelUuid());
230         doReturn("vnfId").when(SPY_bbInputSetup).getVnfId(executeBB, lookupKeyMap);
231         doReturn(aaiVnf).when(bbInputSetupUtils).getAAIGenericVnf(any(String.class));
232         // when
233         SPY_bbInputSetup.getGBBMacro(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId, vnfType);
234         // then
235         verify(SPY_bbInputSetup, times(1)).populateVolumeGroup(isA(ModelInfo.class), isA(Service.class),
236                 any(String.class), isA(ServiceInstance.class), any(), any(String.class), ArgumentMatchers.isNull(),
237                 ArgumentMatchers.isNull(), eq(vnfType), any());
238     }
239
240     @Test
241     public void test_getGBBMacro_populateConfiguration_shouldBeCalled() throws Exception {
242         // given
243         String requestAction = "createInstance";
244         Service service = Mockito.mock(Service.class);
245         GeneralBuildingBlock gBB = mapper.readValue(new File(RESOURCE_PATH + "GeneralBuildingBlockExpected.json"),
246                 GeneralBuildingBlock.class);
247         RequestDetails requestDetails = mapper
248                 .readValue(new File(RESOURCE_PATH + "RequestDetailsInput_serviceMacro.json"), RequestDetails.class);
249         GenericVnf aaiVnf = new GenericVnf();
250         aaiVnf.setModelCustomizationId("modelCustId");
251         Map<ResourceKey, String> lookupKeyMap = prepareLookupKeyMap();
252
253         ConfigurationResourceKeys configResourceKeys = prepareConfigurationResourceKeys();
254         ExecuteBuildingBlock executeBB = mapper.readValue(new File(RESOURCE_PATH + "ExecuteBuildingBlockSimple.json"),
255                 ExecuteBuildingBlock.class);
256         executeBB.setConfigurationResourceKeys(configResourceKeys).setRequestDetails(requestDetails);
257         BuildingBlock buildingBlock = executeBB.getBuildingBlock();
258         buildingBlock.setBpmnFlowName("AssignFabricConfigurationBB").setKey("72d9d1cd-f46d-447a-abdb-451d6fb05fa9");
259
260         Configuration configuration = new Configuration();
261         configuration.setConfigurationId("configurationId");
262         gBB.getServiceInstance().getConfigurations().add(configuration);
263         List<ConfigurationResourceCustomization> configurationCustList = new ArrayList<>();
264         ConfigurationResourceCustomization configurationCust = new ConfigurationResourceCustomization();
265         configurationCust.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa9");
266         configurationCustList.add(configurationCust);
267
268         doReturn(configurationCustList).when(service).getConfigurationCustomizations();
269         doReturn(gBB).when(SPY_bbInputSetup).getGBBALaCarteService(executeBB, requestDetails, lookupKeyMap,
270                 requestAction, lookupKeyMap.get(ResourceKey.SERVICE_INSTANCE_ID));
271         doReturn(service).when(bbInputSetupUtils)
272                 .getCatalogServiceByModelUUID(gBB.getServiceInstance().getModelInfoServiceInstance().getModelUuid());
273         doNothing().when(SPY_bbInputSetup).populateConfiguration(isA(ModelInfo.class), isA(Service.class),
274                 any(String.class), isA(ServiceInstance.class), any(), any(String.class), ArgumentMatchers.isNull(),
275                 isA(ConfigurationResourceKeys.class), isA(RequestDetails.class));
276         // when
277         SPY_bbInputSetup.getGBBMacro(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId, vnfType);
278         // then
279         verify(SPY_bbInputSetup, times(1)).populateConfiguration(isA(ModelInfo.class), isA(Service.class),
280                 any(String.class), isA(ServiceInstance.class), any(), any(String.class), ArgumentMatchers.isNull(),
281                 isA(ConfigurationResourceKeys.class), isA(RequestDetails.class));
282     }
283 }