Add pause after completion for vfModule
[vid.git] / vid-app-common / src / test / java / org / onap / vid / services / AsyncInstantiationBaseTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * VID
4  * ================================================================================
5  * Copyright (C) 2017 - 2019 AT&T 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
21 package org.onap.vid.services;
22
23 import static java.util.Collections.emptyList;
24 import static java.util.Collections.emptyMap;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.ArgumentMatchers.anyString;
27 import static org.mockito.ArgumentMatchers.eq;
28 import static org.mockito.Mockito.when;
29 import static org.onap.vid.model.VidNotions.InstantiationType;
30 import static org.onap.vid.model.VidNotions.InstantiationUI;
31 import static org.onap.vid.model.VidNotions.ModelCategory;
32
33 import com.google.common.collect.ImmutableList;
34 import com.google.common.collect.ImmutableMap;
35 import java.time.LocalDateTime;
36 import java.time.ZoneId;
37 import java.time.ZonedDateTime;
38 import java.util.ArrayList;
39 import java.util.Collections;
40 import java.util.Date;
41 import java.util.HashMap;
42 import java.util.LinkedHashMap;
43 import java.util.List;
44 import java.util.Map;
45 import java.util.UUID;
46 import java.util.stream.Collectors;
47 import java.util.stream.Stream;
48 import javax.inject.Inject;
49 import org.hibernate.SessionFactory;
50 import org.jetbrains.annotations.NotNull;
51 import org.onap.portalsdk.core.domain.FusionObject;
52 import org.onap.portalsdk.core.service.DataAccessService;
53 import org.onap.vid.aai.AaiClientInterface;
54 import org.onap.vid.aai.ExceptionWithRequestInfo;
55 import org.onap.vid.job.Job.JobStatus;
56 import org.onap.vid.model.Action;
57 import org.onap.vid.model.ServiceInfo;
58 import org.onap.vid.model.ServiceInfo.ServiceAction;
59 import org.onap.vid.model.VidNotions;
60 import org.onap.vid.model.serviceInstantiation.InstanceGroup;
61 import org.onap.vid.model.serviceInstantiation.Network;
62 import org.onap.vid.model.serviceInstantiation.ServiceInstantiation;
63 import org.onap.vid.model.serviceInstantiation.VfModule;
64 import org.onap.vid.model.serviceInstantiation.Vnf;
65 import org.onap.vid.mso.RestObject;
66 import org.onap.vid.mso.model.ModelInfo;
67 import org.onap.vid.mso.model.ServiceInstantiationRequestDetails.UserParamNameAndValue;
68 import org.onap.vid.mso.rest.AsyncRequestStatus;
69 import org.onap.vid.mso.rest.RequestStatus;
70 import org.onap.vid.properties.Features;
71 import org.onap.vid.utils.DaoUtils;
72 import org.onap.vid.utils.TimeUtils;
73 import org.springframework.beans.factory.annotation.Autowired;
74 import org.springframework.http.HttpMethod;
75 import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
76 import org.togglz.core.manager.FeatureManager;
77
78 public class AsyncInstantiationBaseTest extends AbstractTestNGSpringContextTests {
79
80     public static final String MODEL_UUID = "337be3fc-293e-43ec-af0b-cf932dad07e6";
81     public static final String MODEL_UUID_2 = "ce052844-22ba-4030-a838-822f2b39eb9b";
82     public static final String MODEL_UUID_3 = "47a071cd-99f7-49bb-bc8b-f957979d6fe1";
83
84     public static final String OWNING_ENTITY_ID = "038d99af-0427-42c2-9d15-971b99b9b489";
85     public static final String JULIO_ERICKSON = "JULIO ERICKSON";
86     public static final String PROJECT_NAME = "{some project name}";
87     public static final String SUBSCRIBER_ID = "{some subscriber id}";
88     public static final String SUBSCRIBER_NAME = "{some subscriber name}";
89     public static final String PRODUCT_FAMILY_ID = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb";
90     public static final String INSTANCE_NAME = "vPE_Service";
91     public static final String SUBSCRIPTION_SERVICE_TYPE = "VMX";
92     public static final String LCP_CLOUD_REGION_ID = "mdt1";
93     public static final String A6CA3EE0394ADE9403F075DB23167E = "88a6ca3ee0394ade9403f075db23167e";
94     public static final String TENANT_NAME = "USP-SIP-IC-24335-T-01";
95     public static final String AIC_ZONE_ID = "NFT1";
96     public static final String AIC_ZONE_NAME = "NFTJSSSS-NFT1";
97     public static final String TEST_API = "GR_API";
98     public static final String SERVICE_MODEL_VERSION_ID = "3c40d244-808e-42ca-b09a-256d83d19d0a";
99     public static final String VF_MODULE_0_MODEL_CUSTOMIZATION_NAME = "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f";
100     public static final String VF_MODULE_1_MODEL_CUSTOMIZATION_NAME = "72d9d1cd-f46d-447a-abdb-451d6fb05fa8";
101     public static final String VF_MODULE_0_MODEL_VERSION_ID = "4c75f813-fa91-45a4-89d0-790ff5f1ae79";
102     public static final String VF_MODULE_1_MODEL_VERSION_ID = "56e2b103-637c-4d1a-adc8-3a7f4a6c3240";
103     public static final String VNF_NAME = "vmxnjr001";
104     public static final String VNF_GROUP_NAME = "VNF_GROUP_NAME";
105
106     protected HashMap<String, String> instanceParamsMapWithoutParams;
107     protected HashMap<String, String> vfModuleInstanceParamsMapWithParamsToRemove;
108     protected HashMap<String, String> vnfInstanceParamsMapWithParamsToRemove;
109
110     protected int serviceCount = 0;
111
112
113     @Inject
114     protected DataAccessService dataAccessService;
115
116     @Inject
117     protected FeatureManager featureManager;
118
119     @Inject
120     protected AaiClientInterface aaiClient;
121
122     @Inject
123     protected CloudOwnerService cloudOwnerService;
124
125     @Autowired
126     protected SessionFactory sessionFactory;
127
128
129     protected static Date toDate(LocalDateTime localDateTime) {
130         return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
131     }
132
133     protected HashMap<String, Object> getPropsMap() {
134         HashMap<String, Object> props = new HashMap<>();
135         props.put(FusionObject.Parameters.PARAM_USERID, 0);
136         return props;
137     }
138
139
140     private void setCreateDateToServiceInfo(UUID jobUuid, LocalDateTime createDate) {
141         List<ServiceInfo> serviceInfoList = dataAccessService.getList(ServiceInfo.class, getPropsMap());
142         DaoUtils.tryWithSessionAndTransaction(sessionFactory, session -> {
143             serviceInfoList.stream()
144                 .filter(serviceInfo -> jobUuid.equals(serviceInfo.getJobId()))
145                 .forEach(serviceInfo -> {
146                     serviceInfo.setCreated(toDate(createDate));
147                     session.saveOrUpdate(serviceInfo);
148                 });
149             return 1;
150         });
151     }
152
153
154     protected void addNewServiceInfo(UUID uuid, String userId, String serviceName, LocalDateTime createDate,
155         LocalDateTime statusModifiedDate, JobStatus status, boolean isHidden, boolean retryEnabled,
156         String modelUUID) {
157         ServiceInfo serviceInfo = createServiceInfo(uuid, userId, serviceName, createDate, statusModifiedDate, status,
158             isHidden, retryEnabled, modelUUID);
159         dataAccessService.saveDomainObject(serviceInfo, getPropsMap());
160         setCreateDateToServiceInfo(uuid, createDate);
161         serviceCount++;
162     }
163     @NotNull
164     private ServiceInfo createServiceInfo(UUID uuid, String userId, String serviceName, LocalDateTime createDate,
165         LocalDateTime statusModifiedDate, JobStatus status, boolean isHidden, boolean retryEnabled, String modelUUID) {
166         ServiceInfo serviceInfo = new ServiceInfo();
167         serviceInfo.setJobId(uuid);
168         serviceInfo.setUserId(userId);
169         serviceInfo.setServiceInstanceName(serviceName);
170         serviceInfo.setStatusModifiedDate(toDate(statusModifiedDate));
171         serviceInfo.setJobStatus(status);
172         serviceInfo.setPause(false);
173         serviceInfo.setOwningEntityId("1234");
174         serviceInfo.setCreatedBulkDate(toDate(createDate));
175         serviceInfo.setRetryEnabled(retryEnabled);
176         serviceInfo.setServiceModelId(modelUUID);
177         serviceInfo.setHidden(isHidden);
178         return serviceInfo;
179     }
180
181     protected void addNewServiceInfoWithAction(UUID uuid, String userId, String serviceName, LocalDateTime createDate,
182         LocalDateTime statusModifiedDate, JobStatus status, boolean isHidden, boolean retryEnabled,
183         String modelUUID, ServiceAction action) {
184         ServiceInfo serviceInfo = createServiceInfo(uuid, userId, serviceName, createDate, statusModifiedDate, status,
185             isHidden, retryEnabled, modelUUID);
186         serviceInfo.setAction(action);
187         dataAccessService.saveDomainObject(serviceInfo, getPropsMap());
188         setCreateDateToServiceInfo(uuid, createDate);
189         serviceCount++;
190     }
191
192
193     public ServiceInstantiation generateMockMacroServiceInstantiationPayload(boolean isPause, Map<String, Vnf> vnfs, int bulkSize, boolean isUserProvidedNaming, String projectName, boolean rollbackOnFailure) {
194         return generateMockServiceInstantiationPayload(isPause, vnfs, Collections.EMPTY_MAP, Collections.EMPTY_MAP, bulkSize, isUserProvidedNaming, projectName, rollbackOnFailure, false, null, Action.Create, null);
195     }
196
197     public ServiceInstantiation generateMockALaCarteServiceInstantiationPayload(boolean isPause, Map<String, Vnf> vnfs, Map<String, Network> networks, Map<String, InstanceGroup> vnfGroups, int bulkSize, boolean isUserProvidedNaming, String projectName, boolean rollbackOnFailure, String testApi) {
198         return generateMockServiceInstantiationPayload(isPause, vnfs, networks, vnfGroups, bulkSize, isUserProvidedNaming, projectName, rollbackOnFailure, true, testApi, Action.Create, null);
199     }
200
201     public ServiceInstantiation generateMockAlaCarteServiceDeletionPayload(boolean isPause, Map<String, Vnf> vnfs, Map<String, Network> networks, Map<String, InstanceGroup> vnfGroups, int bulkSize, boolean isUserProvidedNaming, String projectName, boolean rollbackOnFailure, String testApi, String instanceId) {
202         return generateMockServiceInstantiationPayload(isPause, vnfs, networks, vnfGroups, bulkSize, isUserProvidedNaming, projectName, rollbackOnFailure, true, testApi, Action.Delete, instanceId);
203     }
204
205     public ServiceInstantiation generateMockServiceDeletionPayload(boolean isPause, Map<String, Vnf> vnfs, Map<String, Network> networks, Map<String, InstanceGroup> vnfGroups, int bulkSize, boolean isUserProvidedNaming, String projectName, boolean rollbackOnFailure, String testApi, String instanceId) {
206         return generateMockServiceInstantiationPayload(isPause, vnfs, networks, vnfGroups, bulkSize, isUserProvidedNaming, projectName, rollbackOnFailure, false, testApi, Action.Delete, instanceId);
207     }
208     private ServiceInstantiation generateMockServiceInstantiationPayload(boolean isPause, Map<String, Vnf> vnfs, Map<String, Network> networks, Map<String, InstanceGroup> vnfGroups, int bulkSize, boolean isUserProvidedNaming, String projectName, boolean rollbackOnFailure, boolean isAlacarte, String testApi, Action action, String instanceId) {
209         ModelInfo modelInfo = createModelInfo();
210
211         List<Map<String,String>> instanceParams = createInstanceParams();
212
213         return new ServiceInstantiation( modelInfo,
214                 AsyncInstantiationBusinessLogicTest.OWNING_ENTITY_ID,
215                 AsyncInstantiationBusinessLogicTest.JULIO_ERICKSON,
216                 projectName,
217                 AsyncInstantiationBusinessLogicTest.SUBSCRIBER_ID,
218                 AsyncInstantiationBusinessLogicTest.SUBSCRIBER_NAME,
219                 AsyncInstantiationBusinessLogicTest.PRODUCT_FAMILY_ID,
220                 isUserProvidedNaming ? AsyncInstantiationBusinessLogicTest.INSTANCE_NAME : null,
221                 AsyncInstantiationBusinessLogicTest.SUBSCRIPTION_SERVICE_TYPE,
222                 AsyncInstantiationBusinessLogicTest.LCP_CLOUD_REGION_ID,
223                 null,
224                 AsyncInstantiationBusinessLogicTest.A6CA3EE0394ADE9403F075DB23167E,
225                 AsyncInstantiationBusinessLogicTest.TENANT_NAME,
226                 AsyncInstantiationBusinessLogicTest.AIC_ZONE_ID,
227                 AsyncInstantiationBusinessLogicTest.AIC_ZONE_NAME,
228                 vnfs,
229                 networks,
230                 vnfGroups,
231                 null,
232                 instanceParams,
233                 isPause,
234                 bulkSize,
235                 rollbackOnFailure,
236                 isAlacarte,
237                 testApi,
238                 instanceId,
239                 action.name(),
240                 UUID.randomUUID().toString(), null, null, null, null);
241     }
242
243     private List<Map<String,String>> createInstanceParams() {
244         List<Map<String, String>> instanceParams = new ArrayList<>();
245         HashMap<String, String> map = new HashMap<>();
246         map.put("instanceParams_test1" , "some text");
247         map.put("instanceParams_test2" , "another text");
248         instanceParams.add(map);
249         return instanceParams;
250     }
251
252     protected VfModule createVfModule(
253         String modelName, String modelVersionId, String modelCustomizationId,
254         List<Map<String, String>> instanceParams, List<UserParamNameAndValue> supplementaryParams, String instanceName,
255         String volumeGroupInstanceName, boolean isAlacarte, Boolean usePreload) {
256         ModelInfo vfModuleInfo = new ModelInfo();
257         vfModuleInfo.setModelType("vfModule");
258         vfModuleInfo.setModelName(modelName);
259         vfModuleInfo.setModelVersionId(modelVersionId);
260         vfModuleInfo.setModelCustomizationId(modelCustomizationId);
261         vfModuleInfo.setModelCustomizationName(modelName);
262
263         if (isAlacarte) {
264             vfModuleInfo.setModelInvariantId("22222222-f63c-463e-ba94-286933b895f9");
265             vfModuleInfo.setModelVersion("10.0");
266             return new VfModule(vfModuleInfo, instanceName, volumeGroupInstanceName, Action.Create.name(), "mdt1", null,
267                 "88a6ca3ee0394ade9403f075db23167e", instanceParams, supplementaryParams, false,
268                 usePreload, null, UUID.randomUUID().toString(), null, null,
269                 null, null, null, null, "originalName");
270         }
271
272         return new VfModule(vfModuleInfo, instanceName, volumeGroupInstanceName, Action.Create.name(), null, null, null,
273                 instanceParams, supplementaryParams, false, false, null, UUID.randomUUID().toString(), null,
274             null, null, null, null, null, "originalName");
275     }
276
277     protected ModelInfo createVfModuleModelInfo(String modelName, String modelVersion, String modelVersionId, String modelInvariantId, String modelCustomizationId, String modelCustomizationName) {
278         return createModelInfo("vfModule", modelName, modelVersion, modelVersionId, modelInvariantId, modelCustomizationId, modelCustomizationName);
279     }
280
281     protected VfModule createVfModuleForReplace(ModelInfo vfModuleModelInfo, String instanceName,
282         String lcpCloudRegionId, String tenantId, Boolean retainAssignments, Boolean retainVolumeGroups, List<UserParamNameAndValue> supplementaryParams) {
283         return new VfModule( vfModuleModelInfo, instanceName, null, Action.Upgrade.name(), lcpCloudRegionId, null, tenantId,
284                 null, supplementaryParams, true, null, null, UUID.randomUUID().toString(), null,
285                 null, retainAssignments, retainVolumeGroups, null, null, "originalName");
286     }
287
288     protected ModelInfo createVnfModelInfo(boolean isAlacarte) {
289         ModelInfo vnfModelInfo = new ModelInfo();
290         vnfModelInfo.setModelType("vnf");
291         vnfModelInfo.setModelName("2016-73_MOW-AVPN-vPE-BV-L");
292         vnfModelInfo.setModelVersionId("7f40c192-f63c-463e-ba94-286933b895f8");
293         vnfModelInfo.setModelCustomizationName("2016-73_MOW-AVPN-vPE-BV-L 0");
294         vnfModelInfo.setModelCustomizationId("ab153b6e-c364-44c0-bef6-1f2982117f04");
295         //added two conditional fields according to MSO AID - needed only in alacarte
296         if (isAlacarte) {
297             vnfModelInfo.setModelInvariantId("11111111-f63c-463e-ba94-286933b895f9");
298             vnfModelInfo.setModelVersion("10.0");
299         }
300         return vnfModelInfo;
301     }
302
303     protected ModelInfo createVnfModelInfo(String modelName, String modelVersion, String modelVersionId, String modelInvariantId, String modelCustomizationId, String modelCustomizationName) {
304         return createModelInfo("vnf", modelName, modelVersion, modelVersionId, modelInvariantId, modelCustomizationId, modelCustomizationName);
305     }
306
307     private ModelInfo createNetworkModelInfo(boolean isAlacarte, String modelCustomizationId)
308     {
309         ModelInfo modelInfo = new ModelInfo();
310         modelInfo.setModelType("network");
311         modelInfo.setModelName("2016-73_MOW-AVPN-vPE-BV-L");
312         modelInfo.setModelVersionId("7f40c192-f63c-463e-ba94-286933b895f8");
313         modelInfo.setModelCustomizationName("2016-73_MOW-AVPN-vPE-BV-L 0");
314         modelInfo.setModelCustomizationId(modelCustomizationId);
315         //added two conditional fields according to MSO AID - needed only in alacarte
316         if (isAlacarte) {
317             modelInfo.setModelInvariantId("11111111-f63c-463e-ba94-286933b895f9");
318             modelInfo.setModelVersion("10.0");
319         }
320         return modelInfo;
321     }
322
323     private ModelInfo createModelInfo() {
324         ModelInfo modelInfo = new ModelInfo();
325         modelInfo.setModelType("service");
326         modelInfo.setModelVersionId(SERVICE_MODEL_VERSION_ID);
327         modelInfo.setModelVersion("10.0");
328         modelInfo.setModelInvariantId("5d48acb5-097d-4982-aeb2-f4a3bd87d31b");
329         modelInfo.setModelName("MOW AVPN vMX BV vPE 1 Service");
330         return modelInfo;
331     }
332
333     private ModelInfo createModelInfo(String modelType, String modelName, String modelVersion, String modelVersionId, String modelInvariantId, String modelCustomizationId, String modelCustomizationName ) {
334         ModelInfo modelInfo = new ModelInfo();
335         modelInfo.setModelType(modelType);
336         modelInfo.setModelVersionId(modelVersionId);
337         modelInfo.setModelVersion(modelVersion);
338         modelInfo.setModelInvariantId(modelInvariantId);
339         modelInfo.setModelName(modelName);
340         modelInfo.setModelCustomizationId(modelCustomizationId);
341         modelInfo.setModelCustomizationName(modelCustomizationName);
342         return modelInfo;
343     }
344
345     protected Map<String, Vnf> createVnfList(HashMap<String, String> vfModuleInstanceParamsMap, List vnfInstanceParams, boolean isUserProvidedNaming) {
346         return createVnfList(vfModuleInstanceParamsMap, vnfInstanceParams, isUserProvidedNaming, false);
347     }
348
349     protected Map<String, Vnf> createVnfList(HashMap<String, String> vfModuleInstanceParamsMap, List vnfInstanceParams, boolean isUserProvidedNaming, boolean isAlacarte) {
350         Map<String, Vnf> vnfs = new HashMap<>();
351         ModelInfo vnfModelInfo = createVnfModelInfo(isAlacarte);
352
353         Map<String, Map<String, VfModule>> vfModules = new HashMap<>();
354
355         List<Map<String, String>> instanceParams1 = ImmutableList.of((ImmutableMap.of("vmx_int_net_len", "24")));
356         VfModule vfModule1 = createVfModule("201673MowAvpnVpeBvL..AVPN_base_vPE_BV..module-0", VF_MODULE_0_MODEL_VERSION_ID, VF_MODULE_0_MODEL_CUSTOMIZATION_NAME,
357             instanceParams1, emptyList(), (isUserProvidedNaming ? "vmxnjr001_AVPN_base_vPE_BV_base" : null), null, isAlacarte, true);
358         List<Map<String, String>> instanceParams2 = ImmutableList.of(vfModuleInstanceParamsMap);
359         VfModule vfModule2 = createVfModule("201673MowAvpnVpeBvL..AVPN_vRE_BV..module-1", VF_MODULE_1_MODEL_VERSION_ID, VF_MODULE_1_MODEL_CUSTOMIZATION_NAME,
360             instanceParams2, emptyList(), (isUserProvidedNaming ? "vmxnjr001_AVPN_base_vRE_BV_expansion": null), (isUserProvidedNaming ? "myVgName" : null), isAlacarte, true);
361
362         String vfModuleModelName = vfModule1.getModelInfo().getModelName();
363         vfModules.put(vfModuleModelName, new LinkedHashMap<>());
364
365         vfModules.get(vfModuleModelName).put(vfModuleModelName + ":001", vfModule1);
366         vfModules.get(vfModuleModelName).put(vfModuleModelName + ":002", vfModule2);
367
368         Vnf vnf = new Vnf(vnfModelInfo, "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", (isUserProvidedNaming ? VNF_NAME : null), Action.Create.name(),
369                 "platformName", "mdt1", null, "88a6ca3ee0394ade9403f075db23167e", vnfInstanceParams,"lineOfBusinessName" , false, null, vfModules,
370                 UUID.randomUUID().toString(), null, null, null, "originalName");
371
372         vnfs.put(vnf.getModelInfo().getModelName(), vnf);
373         return vnfs;
374     }
375
376     protected void mockAaiClientAaiStatusOK() {
377         when(aaiClient.isNodeTypeExistsByName(eq(AsyncInstantiationBusinessLogicImpl.NAME_FOR_CHECK_AAI_STATUS), any())).thenReturn(false);
378     }
379
380     protected void enableAddCloudOwnerOnMsoRequest(boolean isActive) {
381         // always turn on the feature flag
382         when(featureManager.isActive(Features.FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST)).thenReturn(isActive);
383         when(aaiClient.getCloudOwnerByCloudRegionId(anyString())).thenReturn("irma-aic");
384     }
385
386     protected void enableAddCloudOwnerOnMsoRequest() {
387         enableAddCloudOwnerOnMsoRequest(true);
388     }
389
390     protected ServiceInstantiation generateMacroMockServiceInstantiationPayload(boolean isPause, Map<String, Vnf> vnfs) {
391         return generateMockMacroServiceInstantiationPayload(isPause, vnfs, 1, true, PROJECT_NAME, false);
392     }
393
394     protected ServiceInstantiation generatePre1806MacroTransportServiceInstantiationPayload(String tenantId, String lcpCloudRegionId) {
395         List<Map<String, String>> instanceParams = ImmutableList
396             .of(ImmutableMap.of("someUserParam","someValue", "anotherUserParam","anotherValue"));
397         ServiceInstantiation serviceInstantiation = new ServiceInstantiation(createServiceModelInfo(), "038d99af-0427-42c2-9d15-971b99b9b489",
398                 "JULIO ERICKSON", "some_project_name", "some_subscriber_id", "some_subscriber_name",
399                 "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", null, "MOG", lcpCloudRegionId, null, tenantId,
400                 null, null, null, Collections.EMPTY_MAP, Collections.EMPTY_MAP, Collections.EMPTY_MAP, Collections.EMPTY_MAP, instanceParams, false, 1, false, false,
401                 null, null, null, null, null, null,
402                 new VidNotions(InstantiationUI.TRANSPORT_SERVICE, ModelCategory.Transport, InstantiationUI.TRANSPORT_SERVICE, InstantiationType.Macro), "originalName"
403         );
404         return serviceInstantiation;
405     }
406
407     public static class NetworkDetails {
408
409         public NetworkDetails(String name, String modelCustomizationId) {
410             this.name = name;
411             this.modelCustomizationId = modelCustomizationId;
412         }
413
414         public String name;
415         public String modelCustomizationId;
416     }
417
418     protected Map<String, Network> createNetworkList(List instanceParams, List<NetworkDetails> networkDetails, boolean isALaCarte) {
419         Stream<Network> networkStream = networkDetails.stream().map(
420                 details->new Network(createNetworkModelInfo(isALaCarte, details.modelCustomizationId), "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
421                 details.name, Action.Create.name(),
422                 "platformName", "mdt1", null, "88a6ca3ee0394ade9403f075db23167e", instanceParams,"lineOfBusinessName" ,
423                 false, null, UUID.randomUUID().toString(), null, null, null, "originalName"));
424 //        I can't tell why compiler don't like the statement if it's only one line...
425         return networkStream.collect(Collectors.toMap(network -> network.getModelInfo().getModelCustomizationId(), network -> network));
426     }
427
428     protected InstanceGroup createInstanceGroup(boolean isUserProvidedNaming, Action action) {
429         ModelInfo modelInfo = new ModelInfo();
430         modelInfo.setModelType("instanceGroup");
431         modelInfo.setModelName("2016-73_MOW-AVPN-vPE-BV-L");
432         modelInfo.setModelVersionId("7f40c192-f63c-463e-ba94-286933b895f8");
433         modelInfo.setModelCustomizationName("2016-73_MOW-AVPN-vPE-BV-L 0");
434         modelInfo.setModelCustomizationId("ab153b6e-c364-44c0-bef6-1f2982117f04");
435         modelInfo.setModelInvariantId("11111111-f63c-463e-ba94-286933b895f9");
436         modelInfo.setModelVersion("10.0");
437
438         return new InstanceGroup(modelInfo, (isUserProvidedNaming ? VNF_GROUP_NAME : null), action.name(), false, null, emptyMap(), UUID.randomUUID().toString(), null, null,
439             null, "originalName");
440     }
441
442     protected ModelInfo createServiceModelInfo() {
443         ModelInfo siModelInfo = new ModelInfo();
444         siModelInfo.setModelName("sriov");
445         siModelInfo.setModelType("service");
446         siModelInfo.setModelInvariantId("ff3514e3-5a33-55df-13ab-12abad84e7ff");
447         siModelInfo.setModelVersionId("fe6985cd-ea33-3346-ac12-ab121484a3fe");
448         siModelInfo.setModelVersion("1.0");
449
450         return siModelInfo;
451     }
452
453     protected ModelInfo createServiceModelInfo(String modelName, String modelVersion, String modelVersionId, String modelInvariantId, String modelCustomizationId, String modelCustomizationName) {
454         return createModelInfo("service", modelName, modelVersion, modelVersionId, modelInvariantId, modelCustomizationId, modelCustomizationName);
455     }
456
457     protected void createInstanceParamsMaps() {
458         instanceParamsMapWithoutParams = new HashMap<>();
459         instanceParamsMapWithoutParams.put("availability_zone_0" , "mtpocdv-kvm-az01");
460         instanceParamsMapWithoutParams.put("vre_a_volume_size_0" , "100");
461
462         vfModuleInstanceParamsMapWithParamsToRemove = new HashMap<>();
463         vfModuleInstanceParamsMapWithParamsToRemove.put(AsyncInstantiationBusinessLogic.PARAMS_TO_IGNORE.get(0), "should be removed");
464         vfModuleInstanceParamsMapWithParamsToRemove.put("availability_zone_0" , "mtpocdv-kvm-az01");
465         vfModuleInstanceParamsMapWithParamsToRemove.put("vre_a_volume_size_0" , "100");
466
467         vnfInstanceParamsMapWithParamsToRemove = new HashMap<>();
468         vnfInstanceParamsMapWithParamsToRemove.put(AsyncInstantiationBusinessLogic.PARAMS_TO_IGNORE.get(1), "should be removed");
469     }
470
471     public static AsyncRequestStatus asyncRequestStatusResponse(String msoStatus) {
472         AsyncRequestStatus asyncRequestStatus = new AsyncRequestStatus(new AsyncRequestStatus.Request(new RequestStatus()));
473         asyncRequestStatus.request.requestStatus.setRequestState(msoStatus);
474         asyncRequestStatus.request.requestId = UUID.randomUUID().toString();
475         asyncRequestStatus.request.startTime = TimeUtils.zonedDateTimeToString(ZonedDateTime.now());
476         return asyncRequestStatus;
477     }
478
479     public static RestObject<AsyncRequestStatus> asyncRequestStatusResponseAsRestObject(String msoStatus) {
480         return asyncRequestStatusResponseAsRestObject(msoStatus, 200);
481     }
482
483     public static RestObject<AsyncRequestStatus> asyncRequestStatusResponseAsRestObject(String msoStatus, int httpStatusCode) {
484         RestObject<AsyncRequestStatus> restObject = new RestObject<>();
485         restObject.set(asyncRequestStatusResponse(msoStatus));
486         restObject.setStatusCode(httpStatusCode);
487         return restObject;
488     }
489
490     protected void mockAaiClientAnyNameFree() {
491         when(aaiClient.isNodeTypeExistsByName(any(), any())).thenReturn(false);
492     }
493
494     protected ExceptionWithRequestInfo aaiNodeQueryBadResponseException() {
495         return new ExceptionWithRequestInfo(HttpMethod.GET, "url", "raw data", 500, null);
496     }
497
498     protected ServiceInstantiation generateALaCarteWithVnfsServiceInstantiationPayload() {
499         Map<String, Vnf> vnfs = createVnfList(vfModuleInstanceParamsMapWithParamsToRemove, Collections.singletonList(vnfInstanceParamsMapWithParamsToRemove) , true, true);
500         ServiceInstantiation serviceInstantiation = generateMockALaCarteServiceInstantiationPayload(false, vnfs, emptyMap(), emptyMap(), 1, true, PROJECT_NAME, false, "VNF_API");
501         return serviceInstantiation;
502     }
503
504     protected ServiceInstantiation generateALaCarteWithNetworksPayload(List<NetworkDetails> networkDetails) {
505         Map<String, Network> networks = createNetworkList(emptyList(), networkDetails, true);
506         ServiceInstantiation serviceInstantiation = generateMockALaCarteServiceInstantiationPayload(false, emptyMap(), networks, emptyMap(), 1, true, PROJECT_NAME, false, "VNF_API");
507         return serviceInstantiation;
508     }
509
510     protected ServiceInstantiation generateALaCarteUpdateWith1ExistingGroup2NewGroupsPayload() {
511         final InstanceGroup instanceGroup1 = createInstanceGroup(true, Action.None);
512         final InstanceGroup instanceGroup2 = createInstanceGroup(false, Action.Create);
513         final InstanceGroup instanceGroup3 = createInstanceGroup(true, Action.Create);
514         Map<String, InstanceGroup> groups = ImmutableMap.of(
515                 "foo:001", instanceGroup1,
516                 "foo:002", instanceGroup2,
517                 "foo:003", instanceGroup3
518         );
519         return generateMockServiceInstantiationPayload(false, emptyMap(), emptyMap(), groups,
520                 1, true, PROJECT_NAME, false, true, "VNF_API",
521                 Action.None, "1234567890");
522     }
523
524     protected ServiceInstantiation generateALaCarteServiceInstantiationPayload() {
525         return generateMockALaCarteServiceInstantiationPayload(false, Collections.EMPTY_MAP, Collections.EMPTY_MAP, Collections.EMPTY_MAP, 1, true, PROJECT_NAME, false, "VNF_API");
526     }
527 }