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