401a56c58f9faa3402a4d22c27e9c1ef8d4f9b87
[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 com.google.common.collect.ImmutableList;
24 import com.google.common.collect.ImmutableMap;
25 import org.onap.vid.aai.AaiClientInterface;
26 import org.onap.vid.aai.ExceptionWithRequestInfo;
27 import org.onap.vid.model.Action;
28 import org.onap.vid.model.serviceInstantiation.*;
29 import org.onap.vid.mso.RestObject;
30 import org.onap.vid.mso.model.ModelInfo;
31 import org.onap.vid.mso.rest.AsyncRequestStatus;
32 import org.onap.vid.mso.rest.RequestStatus;
33 import org.onap.vid.utils.TimeUtils;
34 import org.springframework.http.HttpMethod;
35 import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
36 import org.togglz.core.manager.FeatureManager;
37
38 import javax.inject.Inject;
39 import java.time.ZonedDateTime;
40 import java.util.*;
41
42 import static java.util.Collections.emptyMap;
43 import static org.mockito.ArgumentMatchers.any;
44 import static org.mockito.Mockito.when;
45
46 public class AsyncInstantiationBaseTest extends AbstractTestNGSpringContextTests {
47
48     public static final String OWNING_ENTITY_ID = "038d99af-0427-42c2-9d15-971b99b9b489";
49     public static final String PACKET_CORE = "PACKET CORE";
50     public static final String PROJECT_NAME = "{some project name}";
51     public static final String SUBSCRIBER_ID = "{some subscriber id}";
52     public static final String SUBSCRIBER_NAME = "{some subscriber name}";
53     public static final String PRODUCT_FAMILY_ID = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb";
54     public static final String INSTANCE_NAME = "vPE_Service";
55     public static final String SUBSCRIPTION_SERVICE_TYPE = "VMX";
56     public static final String LCP_CLOUD_REGION_ID = "mdt1";
57     public static final String A6CA3EE0394ADE9403F075DB23167E = "88a6ca3ee0394ade9403f075db23167e";
58     public static final String TENANT_NAME = "USP-SIP-IC-24335-T-01";
59     public static final String AIC_ZONE_ID = "NFT1";
60     public static final String AIC_ZONE_NAME = "NFTJSSSS-NFT1";
61     public static final String TEST_API = "GR_API";
62     public static final String SERVICE_MODEL_VERSION_ID = "3c40d244-808e-42ca-b09a-256d83d19d0a";
63     public static final String VF_MODULE_0_MODEL_CUSTOMIZATION_NAME = "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f";
64     public static final String VF_MODULE_1_MODEL_CUSTOMIZATION_NAME = "72d9d1cd-f46d-447a-abdb-451d6fb05fa8";
65     public static final String VF_MODULE_0_MODEL_VERSION_ID = "4c75f813-fa91-45a4-89d0-790ff5f1ae79";
66     public static final String VF_MODULE_1_MODEL_VERSION_ID = "56e2b103-637c-4d1a-adc8-3a7f4a6c3240";
67     public static final String VNF_NAME = "vmxnjr001";
68     public static final String VNF_GROUP_NAME = "VNF_GROUP_NAME";
69
70     protected HashMap<String, String> instanceParamsMapWithoutParams;
71     protected HashMap<String, String> vfModuleInstanceParamsMapWithParamsToRemove;
72     protected HashMap<String, String> vnfInstanceParamsMapWithParamsToRemove;
73
74     @Inject
75     protected FeatureManager featureManager;
76
77     @Inject
78     protected AaiClientInterface aaiClient;
79
80     @Inject
81     protected CloudOwnerService cloudOwnerService;
82
83     public ServiceInstantiation generateMockMacroServiceInstantiationPayload(boolean isPause, Map<String, Vnf> vnfs, int bulkSize, boolean isUserProvidedNaming, String projectName, boolean rollbackOnFailure) {
84         return generateMockServiceInstantiationPayload(isPause, vnfs, Collections.EMPTY_MAP, Collections.EMPTY_MAP, bulkSize, isUserProvidedNaming, projectName, rollbackOnFailure, false, null, Action.Create, null);
85     }
86
87     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) {
88         return generateMockServiceInstantiationPayload(isPause, vnfs, networks, vnfGroups, bulkSize, isUserProvidedNaming, projectName, rollbackOnFailure, true, testApi, Action.Create, null);
89     }
90
91     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) {
92         return generateMockServiceInstantiationPayload(isPause, vnfs, networks, vnfGroups, bulkSize, isUserProvidedNaming, projectName, rollbackOnFailure, true, testApi, Action.Delete, instanceId);
93     }
94     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) {
95         ModelInfo modelInfo = createModelInfo();
96
97         List<Map<String,String>> instanceParams = createInstanceParams();
98
99         return new ServiceInstantiation ( modelInfo,
100                 AsyncInstantiationBusinessLogicTest.OWNING_ENTITY_ID,
101                 AsyncInstantiationBusinessLogicTest.PACKET_CORE,
102                 projectName,
103                 AsyncInstantiationBusinessLogicTest.SUBSCRIBER_ID,
104                 AsyncInstantiationBusinessLogicTest.SUBSCRIBER_NAME,
105                 AsyncInstantiationBusinessLogicTest.PRODUCT_FAMILY_ID,
106                 isUserProvidedNaming ? AsyncInstantiationBusinessLogicTest.INSTANCE_NAME : null,
107                 AsyncInstantiationBusinessLogicTest.SUBSCRIPTION_SERVICE_TYPE,
108                 AsyncInstantiationBusinessLogicTest.LCP_CLOUD_REGION_ID,
109                 null,
110                 AsyncInstantiationBusinessLogicTest.A6CA3EE0394ADE9403F075DB23167E,
111                 AsyncInstantiationBusinessLogicTest.TENANT_NAME,
112                 AsyncInstantiationBusinessLogicTest.AIC_ZONE_ID,
113                 AsyncInstantiationBusinessLogicTest.AIC_ZONE_NAME,
114                 vnfs,
115                 networks,
116                 vnfGroups,
117                 instanceParams,
118                 isPause,
119                 bulkSize,
120                 rollbackOnFailure,
121                 isAlacarte,
122                 testApi,
123                 instanceId,
124                 action.name()
125                 );
126     }
127
128     private List<Map<String,String>> createInstanceParams() {
129         List<Map<String, String>> instanceParams = new ArrayList<>();
130         HashMap<String, String> map = new HashMap<>();
131         map.put("instanceParams_test1" , "some text");
132         map.put("instanceParams_test2" , "another text");
133         instanceParams.add(map);
134         return instanceParams;
135     }
136
137     protected VfModule createVfModule(String modelName, String modelVersionId, String modelCustomizationId,
138                                     List<Map<String, String>> instanceParams, Map<String, String> supplementaryParams, String instanceName, String volumeGroupInstanceName, boolean isAlacarte) {
139         ModelInfo vfModuleInfo = new ModelInfo();
140         vfModuleInfo.setModelType("vfModule");
141         vfModuleInfo.setModelName(modelName);
142         vfModuleInfo.setModelVersionId(modelVersionId);
143         vfModuleInfo.setModelCustomizationId(modelCustomizationId);
144         vfModuleInfo.setModelCustomizationName(modelName);
145
146         if (isAlacarte) {
147             vfModuleInfo.setModelInvariantId("22222222-f63c-463e-ba94-286933b895f9");
148             vfModuleInfo.setModelVersion("10.0");
149             return new VfModule(vfModuleInfo, instanceName, volumeGroupInstanceName, Action.Create.name(), "mdt1", null, "88a6ca3ee0394ade9403f075db23167e", instanceParams, supplementaryParams, false, true, null);
150         }
151
152         return new VfModule(vfModuleInfo, instanceName, volumeGroupInstanceName, Action.Create.name(), null, null, null, instanceParams, supplementaryParams, false, false, null);
153     }
154
155     protected ModelInfo createVnfModelInfo(boolean isAlacarte) {
156         ModelInfo vnfModelInfo = new ModelInfo();
157         vnfModelInfo.setModelType("vnf");
158         vnfModelInfo.setModelName("2016-73_MOW-AVPN-vPE-BV-L");
159         vnfModelInfo.setModelVersionId("7f40c192-f63c-463e-ba94-286933b895f8");
160         vnfModelInfo.setModelCustomizationName("2016-73_MOW-AVPN-vPE-BV-L 0");
161         vnfModelInfo.setModelCustomizationId("ab153b6e-c364-44c0-bef6-1f2982117f04");
162         //added two conditional fields according to MSO AID - needed only in alacarte
163         if (isAlacarte) {
164             vnfModelInfo.setModelInvariantId("11111111-f63c-463e-ba94-286933b895f9");
165             vnfModelInfo.setModelVersion("10.0");
166         }
167         return vnfModelInfo;
168     }
169
170     private ModelInfo createNetworkModelInfo(boolean isAlacarte) {
171         ModelInfo vnfModelInfo = new ModelInfo();
172         vnfModelInfo.setModelType("network");
173         vnfModelInfo.setModelName("2016-73_MOW-AVPN-vPE-BV-L");
174         vnfModelInfo.setModelVersionId("7f40c192-f63c-463e-ba94-286933b895f8");
175         vnfModelInfo.setModelCustomizationName("2016-73_MOW-AVPN-vPE-BV-L 0");
176         vnfModelInfo.setModelCustomizationId("ab153b6e-c364-44c0-bef6-1f2982117f04");
177         //added two conditional fields according to MSO AID - needed only in alacarte
178         if (isAlacarte) {
179             vnfModelInfo.setModelInvariantId("11111111-f63c-463e-ba94-286933b895f9");
180             vnfModelInfo.setModelVersion("10.0");
181         }
182         return vnfModelInfo;
183     }
184
185     private ModelInfo createModelInfo() {
186         ModelInfo modelInfo = new ModelInfo();
187         modelInfo.setModelType("service");
188         modelInfo.setModelVersionId(SERVICE_MODEL_VERSION_ID);
189         modelInfo.setModelVersion("10.0");
190         modelInfo.setModelInvariantId("5d48acb5-097d-4982-aeb2-f4a3bd87d31b");
191         modelInfo.setModelName("MOW AVPN vMX BV vPE 1 Service");
192         return modelInfo;
193     }
194
195     protected Map<String, Vnf> createVnfList(HashMap<String, String> vfModuleInstanceParamsMap, List vnfInstanceParams, boolean isUserProvidedNaming) {
196         return createVnfList(vfModuleInstanceParamsMap, vnfInstanceParams, isUserProvidedNaming, false);
197     }
198
199     protected Map<String, Vnf> createVnfList(HashMap<String, String> vfModuleInstanceParamsMap, List vnfInstanceParams, boolean isUserProvidedNaming, boolean isAlacarte) {
200         Map<String, Vnf> vnfs = new HashMap<>();
201         ModelInfo vnfModelInfo = createVnfModelInfo(isAlacarte);
202
203         Map<String, Map<String, VfModule>> vfModules = new HashMap<>();
204
205         List<Map<String, String>> instanceParams1 = ImmutableList.of((ImmutableMap.of("vmx_int_net_len", "24")));
206         VfModule vfModule1 = createVfModule("201673MowAvpnVpeBvL..AVPN_base_vPE_BV..module-0", VF_MODULE_0_MODEL_VERSION_ID, VF_MODULE_0_MODEL_CUSTOMIZATION_NAME, instanceParams1, new HashMap<>(), (isUserProvidedNaming ? "vmxnjr001_AVPN_base_vPE_BV_base" : null), null, isAlacarte);
207         List<Map<String, String>> instanceParams2 = ImmutableList.of(vfModuleInstanceParamsMap);
208         VfModule vfModule2 = createVfModule("201673MowAvpnVpeBvL..AVPN_vRE_BV..module-1", VF_MODULE_1_MODEL_VERSION_ID, VF_MODULE_1_MODEL_CUSTOMIZATION_NAME, instanceParams2, new HashMap<>(), (isUserProvidedNaming ? "vmxnjr001_AVPN_base_vRE_BV_expansion": null), (isUserProvidedNaming ? "myVgName" : null), isAlacarte);
209
210         String vfModuleModelName = vfModule1.getModelInfo().getModelName();
211         vfModules.put(vfModuleModelName, new LinkedHashMap<>());
212
213         vfModules.get(vfModuleModelName).put(vfModuleModelName + ":001", vfModule1);
214         vfModules.get(vfModuleModelName).put(vfModuleModelName + ":002", vfModule2);
215
216         Vnf vnf = new Vnf(vnfModelInfo, "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", (isUserProvidedNaming ? VNF_NAME : null), Action.Create.name(),
217                 "platformName", "mdt1", null, "88a6ca3ee0394ade9403f075db23167e", vnfInstanceParams,"lineOfBusinessName" , false, null, vfModules);
218
219         vnfs.put(vnf.getModelInfo().getModelName(), vnf);
220         return vnfs;
221     }
222
223     protected Map<String, Network> createNetworkList(List vnfInstanceParams, boolean isUserProvidedNaming, boolean isALaCarte) {
224         Map<String, Network> networks = new HashMap<>();
225         ModelInfo networkModelInfo = createNetworkModelInfo(isALaCarte);
226
227         Network network = new Network(networkModelInfo, "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", isUserProvidedNaming ? VNF_NAME : null, Action.Create.name(),
228                 "platformName", "mdt1", null, "88a6ca3ee0394ade9403f075db23167e", vnfInstanceParams,"lineOfBusinessName" , false, null);
229
230         networks.put(network.getModelInfo().getModelName(), network);
231         return networks;
232     }
233
234     protected InstanceGroup createInstanceGroup(boolean isUserProvidedNaming, Action action) {
235         ModelInfo modelInfo = new ModelInfo();
236         modelInfo.setModelType("instanceGroup");
237         modelInfo.setModelName("2016-73_MOW-AVPN-vPE-BV-L");
238         modelInfo.setModelVersionId("7f40c192-f63c-463e-ba94-286933b895f8");
239         modelInfo.setModelCustomizationName("2016-73_MOW-AVPN-vPE-BV-L 0");
240         modelInfo.setModelCustomizationId("ab153b6e-c364-44c0-bef6-1f2982117f04");
241         modelInfo.setModelInvariantId("11111111-f63c-463e-ba94-286933b895f9");
242         modelInfo.setModelVersion("10.0");
243
244         return new InstanceGroup(modelInfo, (isUserProvidedNaming ? VNF_GROUP_NAME : null), action.name(), false, null);
245     }
246
247     protected ModelInfo createServiceModelInfo() {
248         ModelInfo siModelInfo = new ModelInfo();
249         siModelInfo.setModelName("sriov");
250         siModelInfo.setModelType("service");
251         siModelInfo.setModelInvariantId("ff3514e3-5a33-55df-13ab-12abad84e7ff");
252         siModelInfo.setModelVersionId("fe6985cd-ea33-3346-ac12-ab121484a3fe");
253         siModelInfo.setModelVersion("1.0");
254
255         return siModelInfo;
256     }
257
258     protected void createInstanceParamsMaps() {
259         instanceParamsMapWithoutParams = new HashMap<>();
260         instanceParamsMapWithoutParams.put("availability_zone_0" , "mtpocdv-kvm-az01");
261         instanceParamsMapWithoutParams.put("vre_a_volume_size_0" , "100");
262
263         vfModuleInstanceParamsMapWithParamsToRemove = new HashMap<>();
264         vfModuleInstanceParamsMapWithParamsToRemove.put(AsyncInstantiationBusinessLogic.PARAMS_TO_IGNORE.get(0), "should be removed");
265         vfModuleInstanceParamsMapWithParamsToRemove.put("availability_zone_0" , "mtpocdv-kvm-az01");
266         vfModuleInstanceParamsMapWithParamsToRemove.put("vre_a_volume_size_0" , "100");
267
268         vnfInstanceParamsMapWithParamsToRemove = new HashMap<>();
269         vnfInstanceParamsMapWithParamsToRemove.put(AsyncInstantiationBusinessLogic.PARAMS_TO_IGNORE.get(1), "should be removed");
270     }
271
272     public static AsyncRequestStatus asyncRequestStatusResponse(String msoStatus) {
273         AsyncRequestStatus asyncRequestStatus = new AsyncRequestStatus(new AsyncRequestStatus.Request(new RequestStatus()));
274         asyncRequestStatus.request.requestStatus.setRequestState(msoStatus);
275         asyncRequestStatus.request.requestId = UUID.randomUUID().toString();
276         asyncRequestStatus.request.startTime = TimeUtils.zonedDateTimeToString(ZonedDateTime.now());
277         return asyncRequestStatus;
278     }
279
280     protected RestObject<AsyncRequestStatus> asyncRequestStatusResponseAsRestObject(String msoStatus) {
281         return asyncRequestStatusResponseAsRestObject(msoStatus, 200);
282     }
283
284     protected RestObject<AsyncRequestStatus> asyncRequestStatusResponseAsRestObject(String msoStatus, int httpStatusCode) {
285         RestObject<AsyncRequestStatus> restObject = new RestObject<>();
286         restObject.set(asyncRequestStatusResponse(msoStatus));
287         restObject.setStatusCode(httpStatusCode);
288         return restObject;
289     }
290
291     protected void mockAaiClientAnyNameFree() {
292         when(aaiClient.isNodeTypeExistsByName(any(), any())).thenReturn(false);
293     }
294
295     protected ExceptionWithRequestInfo aaiNodeQueryBadResponseException() {
296         return new ExceptionWithRequestInfo(HttpMethod.GET, "url", "raw data", 500, null);
297     }
298
299     protected ServiceInstantiation generateALaCarteWithVnfsServiceInstantiationPayload() {
300         Map<String, Vnf> vnfs = createVnfList(vfModuleInstanceParamsMapWithParamsToRemove, Collections.singletonList(vnfInstanceParamsMapWithParamsToRemove) , true);
301         ServiceInstantiation serviceInstantiation = generateMockALaCarteServiceInstantiationPayload(false, vnfs, emptyMap(), emptyMap(), 1, true, PROJECT_NAME, false, "VNF_API");
302         return serviceInstantiation;
303     }
304
305     protected ServiceInstantiation generateALaCarteUpdateWith1ExistingGroup2NewGroupsPayload() {
306         final InstanceGroup instanceGroup1 = createInstanceGroup(true, Action.None);
307         final InstanceGroup instanceGroup2 = createInstanceGroup(false, Action.Create);
308         final InstanceGroup instanceGroup3 = createInstanceGroup(true, Action.Create);
309         Map<String, InstanceGroup> groups = ImmutableMap.of(
310                 "foo:001", instanceGroup1,
311                 "foo:002", instanceGroup2,
312                 "foo:003", instanceGroup3
313         );
314         return generateMockServiceInstantiationPayload(false, emptyMap(), emptyMap(), groups,
315                 1, true, PROJECT_NAME, false, true, "VNF_API",
316                 Action.None, "1234567890");
317     }
318 }