Containerization feature of SO
[so.git] / bpmn / mso-infrastructure-bpmn / src / test / java / org / onap / so / bpmn / common / OofHomingTestIT.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 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.so.bpmn.common;
22
23
24 import org.junit.Ignore;
25 import org.junit.Test;
26 import org.onap.so.BaseIntegrationTest;
27 import org.onap.so.bpmn.core.WorkflowException;
28 import org.onap.so.bpmn.core.domain.AllottedResource;
29 import org.onap.so.bpmn.core.domain.CloudFlavor;
30 import org.onap.so.bpmn.core.domain.HomingSolution;
31 import org.onap.so.bpmn.core.domain.ModelInfo;
32 import org.onap.so.bpmn.core.domain.NetworkResource;
33 import org.onap.so.bpmn.core.domain.Resource;
34 import org.onap.so.bpmn.core.domain.ServiceDecomposition;
35 import org.onap.so.bpmn.core.domain.ServiceInstance;
36 import org.onap.so.bpmn.core.domain.VnfResource;
37 import org.onap.so.bpmn.mock.FileUtil;
38 import org.onap.so.logger.MsoLogger;
39
40 import java.io.IOException;
41 import java.util.ArrayList;
42 import java.util.HashMap;
43 import java.util.List;
44 import java.util.Map;
45 import java.util.UUID;
46
47 import static org.junit.Assert.assertEquals;
48 import static org.junit.Assert.assertNull;
49 import static org.onap.so.bpmn.mock.StubResponseDatabase.MockGetServiceResourcesCatalogDataByModelUuid;
50 import static org.onap.so.bpmn.mock.StubResponseOof.mockOof;
51 import static org.onap.so.bpmn.mock.StubResponseOof.mockOof_500;
52
53
54 /**
55  * Test the OOF Homing subflow building block.
56  */
57 @Ignore
58 public class OofHomingTestIT extends BaseIntegrationTest {
59
60         MsoLogger logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL,CreateAAIVfModuleIT.class);
61
62     ServiceDecomposition serviceDecomposition = new ServiceDecomposition();
63     String subscriber = "";
64     String subscriber2 = "";
65
66     private final CallbackSet callbacks = new CallbackSet();
67
68     public OofHomingTestIT() throws IOException {
69         String oofCallback = FileUtil.readResourceFile("__files/BuildingBlocks/oofCallbackInfraVnf");
70         String oofCallback2 = FileUtil.readResourceFile("__files/BuildingBlocks/oofCallback2AR1Vnf");
71         String oofCallback3 = FileUtil.readResourceFile("__files/BuildingBlocks/oofCallback2AR1Vnf2Net");
72
73         String oofCallbackNoSolution = FileUtil.
74                 readResourceFile("__files/BuildingBlocks/oofCallbackNoSolutionFound");
75         String oofCallbackPolicyException = FileUtil.
76                 readResourceFile("__files/BuildingBlocks/oofCallbackPolicyException");
77         String oofCallbackServiceException = FileUtil.
78                 readResourceFile("__files/BuildingBlocks/oofCallbackServiceException");
79
80         callbacks.put("oof", JSON, "oofResponse", oofCallback);
81         callbacks.put("oof2", JSON, "oofResponse", oofCallback2);
82         callbacks.put("oof3", JSON, "oofResponse", oofCallback3);
83         callbacks.put("oofNoSol", JSON, "oofResponse", oofCallbackNoSolution);
84         callbacks.put("oofPolicyEx", JSON, "oofResponse", oofCallbackPolicyException);
85         callbacks.put("oofServiceEx", JSON, "oofResponse", oofCallbackServiceException);
86
87         // Service Model
88         ModelInfo sModel = new ModelInfo();
89         sModel.setModelCustomizationName("testModelCustomizationName");
90         sModel.setModelInstanceName("testModelInstanceName");
91         sModel.setModelInvariantUuid("testModelInvariantId");
92         sModel.setModelName("testModelName");
93         sModel.setModelUuid("testModelUuid");
94         sModel.setModelVersion("testModelVersion");
95         // Service Instance
96         ServiceInstance si = new ServiceInstance();
97         si.setInstanceId("testServiceInstanceId123");
98         // Allotted Resources
99         List<AllottedResource> arList = new ArrayList<AllottedResource>();
100         AllottedResource ar = new AllottedResource();
101         ar.setResourceId("testResourceIdAR");
102         ar.setResourceInstanceName("testARInstanceName");
103         ModelInfo arModel = new ModelInfo();
104         arModel.setModelCustomizationUuid("testModelCustomizationUuidAR");
105         arModel.setModelInvariantUuid("testModelInvariantIdAR");
106         arModel.setModelName("testModelNameAR");
107         arModel.setModelVersion("testModelVersionAR");
108         arModel.setModelUuid("testARModelUuid");
109         arModel.setModelType("testModelTypeAR");
110         ar.setModelInfo(arModel);
111         AllottedResource ar2 = new AllottedResource();
112         ar2.setResourceId("testResourceIdAR2");
113         ar2.setResourceInstanceName("testAR2InstanceName");
114         ModelInfo arModel2 = new ModelInfo();
115         arModel2.setModelCustomizationUuid("testModelCustomizationUuidAR2");
116         arModel2.setModelInvariantUuid("testModelInvariantIdAR2");
117         arModel2.setModelName("testModelNameAR2");
118         arModel2.setModelVersion("testModelVersionAR2");
119         arModel2.setModelUuid("testAr2ModelUuid");
120         arModel2.setModelType("testModelTypeAR2");
121         ar2.setModelInfo(arModel2);
122         arList.add(ar);
123         arList.add(ar2);
124         // Vnfs
125         List<VnfResource> vnfList = new ArrayList<VnfResource>();
126         VnfResource vnf = new VnfResource();
127         vnf.setResourceId("testResourceIdVNF");
128         vnf.setResourceInstanceName("testVnfInstanceName");
129         ArrayList<CloudFlavor> flavors = new ArrayList<>();
130         CloudFlavor flavor1 = new CloudFlavor("flavorLabel1xxx", "vimFlavorxxx");
131         CloudFlavor flavor2 = new CloudFlavor("flavorLabel2xxx", "vimFlavorxxx");
132         flavors.add(flavor1);
133         flavors.add(flavor2);
134         vnf.getHomingSolution().setFlavors(flavors);
135         ModelInfo vnfModel = new ModelInfo();
136         vnfModel.setModelCustomizationUuid("testModelCustomizationUuidVNF");
137         vnfModel.setModelInvariantUuid("testModelInvariantIdVNF");
138         vnfModel.setModelName("testModelNameVNF");
139         vnfModel.setModelVersion("testModelVersionVNF");
140         vnfModel.setModelUuid("testVnfModelUuid");
141         vnfModel.setModelType("testModelTypeVNF");
142         vnf.setModelInfo(vnfModel);
143         vnfList.add(vnf);
144         logger.debug("SERVICE DECOMP: " + serviceDecomposition.getServiceResourcesJsonString());
145         serviceDecomposition.setModelInfo(sModel);
146         serviceDecomposition.setAllottedResources(arList);
147         serviceDecomposition.setVnfResources(vnfList);
148         serviceDecomposition.setServiceInstance(si);
149
150         // Subscriber
151         subscriber = "{\"globalSubscriberId\": \"SUB12_0322_DS_1201\",\"subscriberCommonSiteId\": \"DALTX0101\",\"subscriberName\": \"SUB_12_0322_DS_1201\"}";
152         subscriber2 = "{\"globalSubscriberId\": \"SUB12_0322_DS_1201\",\"subscriberName\": \"SUB_12_0322_DS_1201\"}";
153     }
154
155     @Test
156
157     public void testHoming_success_2AR1Vnf() throws Exception {
158
159         mockOof();
160
161         String businessKey = UUID.randomUUID().toString();
162         Map<String, Object> variables = new HashMap<>();
163         setVariables(variables);
164
165        invokeSubProcess("Homing", businessKey, variables);
166
167         injectWorkflowMessages(callbacks, "oof2");
168
169         waitForProcessEnd(businessKey, 10000);
170
171         //Get Variables
172         WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
173                 "WorkflowException");
174         ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey,
175                 "serviceDecomposition");
176         String expectedOofRequest = (String) getVariableFromHistory(businessKey, "oofRequest");
177
178         Resource resourceAR = serviceDecompositionExp.getServiceResource("testResourceIdAR");
179         HomingSolution resourceARHoming = resourceAR.getHomingSolution();
180         Resource resourceAR2 = serviceDecompositionExp.getServiceResource("testResourceIdAR2");
181         HomingSolution resourceARHoming2 = resourceAR2.getHomingSolution();
182         Resource resourceVNF = serviceDecompositionExp.getServiceResource("testResourceIdVNF");
183         HomingSolution resourceVNFHoming = resourceVNF.getHomingSolution();
184         String resourceARHomingString = resourceARHoming.toString();
185         resourceARHomingString = resourceARHomingString.replaceAll("\\s+", " ");
186         String resourceARHoming2String = resourceARHoming2.toString();
187         resourceARHoming2String = resourceARHoming2String.replaceAll("\\s+", " ");
188         String resourceVNFHomingString = resourceVNFHoming.toString();
189         resourceVNFHomingString = resourceVNFHomingString.replaceAll("\\s+", " ");
190         expectedOofRequest = expectedOofRequest.replaceAll("\\s+", "");
191
192         assertNull(workflowException);
193         assertEquals(homingSolutionService("service", "testSIID1", "MDTNJ01",
194                 resourceARHoming.getVnf().getResourceId(),"aic", "dfwtx",
195                 "\"f1d563e8-e714-4393-8f99-cc480144a05e\", \"j1d563e8-e714-4393-8f99-cc480144a05e\"",
196                 "\"s1d563e8-e714-4393-8f99-cc480144a05e\", \"b1d563e8-e714-4393-8f99-cc480144a05e\""),
197                 resourceARHomingString);
198         assertEquals(homingSolutionService("service", "testSIID2", "testVnfHostname2",
199                 resourceARHoming2.getVnf().getResourceId(),"aic", "testCloudRegionId2",
200                 null, null), resourceARHoming2String);
201         assertEquals(homingSolutionCloud("cloud","aic", "testCloudRegionId3",
202                 true, "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
203                 "\"31d563e8-e714-4393-8f99-cc480144a05e\", \"71d563e8-e714-4393-8f99-cc480144a05e\""),
204                 resourceVNFHomingString);
205         assertEquals(verifyOofRequest(), expectedOofRequest);
206     }
207
208     @Test
209
210     public void testHoming_success_2AR1Vnf2Net() throws Exception {
211
212         mockOof();
213
214         String businessKey = UUID.randomUUID().toString();
215         Map<String, Object> variables = new HashMap<>();
216         setVariables2(variables);
217
218        invokeSubProcess("Homing", businessKey, variables);
219
220         injectWorkflowMessages(callbacks, "oof3");
221
222         waitForProcessEnd(businessKey, 10000);
223
224         //Get Variables
225         WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
226                 "WorkflowException");
227         ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey,
228                 "serviceDecomposition");
229         String expectedOofRequest = (String) getVariableFromHistory(businessKey, "oofRequest");
230
231         Resource resourceAR = serviceDecompositionExp.getServiceResource("testResourceIdAR");
232         HomingSolution resourceARHoming = resourceAR.getHomingSolution();
233         Resource resourceAR2 = serviceDecompositionExp.getServiceResource("testResourceIdAR2");
234         HomingSolution resourceARHoming2 = resourceAR2.getHomingSolution();
235         Resource resourceVNF = serviceDecompositionExp.getServiceResource("testResourceIdVNF");
236         HomingSolution resourceVNFHoming = resourceVNF.getHomingSolution();
237         Resource resourceNet = serviceDecompositionExp.getServiceResource("testResourceIdNet");
238         HomingSolution resourceNetHoming = resourceNet.getHomingSolution();
239         Resource resourceNet2 = serviceDecompositionExp.getServiceResource("testResourceIdNet2");
240         HomingSolution resourceNetHoming2 = resourceNet2.getHomingSolution();
241
242         String resourceARHomingString = resourceARHoming.toString();
243         resourceARHomingString = resourceARHomingString.replaceAll("\\s+", " ");
244         String resourceARHoming2String = resourceARHoming2.toString();
245         resourceARHoming2String = resourceARHoming2String.replaceAll("\\s+", " ");
246         String resourceVNFHomingString = resourceVNFHoming.toString();
247         resourceVNFHomingString = resourceVNFHomingString.replaceAll("\\s+", " ");
248         String resourceNetHomingString = resourceNetHoming.toString();
249         resourceNetHomingString = resourceNetHomingString.replaceAll("\\s+", " ");
250         String resourceNetHoming2String = resourceNetHoming2.toString();
251         resourceNetHoming2String = resourceNetHoming2String.replaceAll("\\s+", " ");
252         expectedOofRequest = expectedOofRequest.replaceAll("\\s+", "");
253
254
255         assertNull(workflowException);
256         assertEquals(homingSolutionService("service", "testSIID1", "MDTNJ01",
257                 resourceARHoming.getVnf().getResourceId(),"aic", "dfwtx",
258                 "\"f1d563e8-e714-4393-8f99-cc480144a05e\", \"j1d563e8-e714-4393-8f99-cc480144a05e\"",
259                 "\"s1d563e8-e714-4393-8f99-cc480144a05e\", \"b1d563e8-e714-4393-8f99-cc480144a05e\""),
260                 resourceARHomingString);
261         assertEquals(homingSolutionService("service", "testSIID2", "testVnfHostname2",
262                 resourceARHoming2.getVnf().getResourceId(),
263                 "aic", "testCloudRegionId2",
264                 null, null), resourceARHoming2String);
265         assertEquals(homingSolutionCloud("cloud","aic",
266                 "testCloudRegionId3",
267                 true, "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
268                 "\"31d563e8-e714-4393-8f99-cc480144a05e\", \"71d563e8-e714-4393-8f99-cc480144a05e\""),
269                 resourceVNFHomingString);
270         assertEquals(homingSolutionService("service", "testServiceInstanceIdNet",
271                 "testVnfHostNameNet", resourceNetHoming.getVnf().getResourceId(),"aic",
272                 "testCloudRegionIdNet",
273                 null, null), resourceNetHomingString);
274         assertEquals(homingSolutionCloud("cloud", "aic",
275                 "testCloudRegionIdNet2",
276                 false, "\"f1d563e8-e714-4393-8f99-cc480144a05n\", \"j1d563e8-e714-4393-8f99-cc480144a05n\"",
277                 "\"s1d563e8-e714-4393-8f99-cc480144a05n\", \"b1d563e8-e714-4393-8f99-cc480144a05n\""),
278                 resourceNetHoming2String);
279         assertEquals(verifyOofRequest(), expectedOofRequest);
280
281     }
282
283     @Test
284
285
286     public void testHoming_success_vnfResourceList() throws Exception {
287
288         // Create a Service Decomposition
289         MockGetServiceResourcesCatalogDataByModelUuid("2f7f309d-c842-4644-a2e4-34167be5eeb4",
290                 "/BuildingBlocks/oofCatalogResp.json");
291         String busKey = UUID.randomUUID().toString();
292         Map<String, Object> vars = new HashMap<>();
293         setVariablesForServiceDecomposition(vars, "testRequestId123",
294                 "ff5256d2-5a33-55df-13ab-12abad84e7ff");
295         invokeSubProcess("DecomposeService", busKey, vars);
296
297         ServiceDecomposition sd = (ServiceDecomposition) getVariableFromHistory(busKey,
298                 "serviceDecomposition");
299         logger.debug("In testHoming_success_vnfResourceList, ServiceDecomposition = " + sd);
300         List<VnfResource> vnfResourceList = sd.getVnfResources();
301 //logger.debug(" vnfResourceList = " + vnfResourceList);
302         vnfResourceList.get(0).setResourceId("test-resource-id-000");
303
304         // Invoke Homing
305
306         mockOof();
307
308         String businessKey = UUID.randomUUID().toString();
309         Map<String, Object> variables = new HashMap<>();
310         variables.put("homingService", "oof");
311         variables.put("isDebugLogEnabled", "true");
312         variables.put("msoRequestId", "testRequestId");
313         variables.put("serviceInstanceId", "testServiceInstanceId");
314         variables.put("serviceDecomposition", sd);
315         variables.put("subscriberInfo", subscriber2);
316         HashMap customerLocation = new HashMap<String, Object>();
317         customerLocation.put("customerLatitude", "32.89748");
318         customerLocation.put("customerLongitude", "-97.040443");
319         customerLocation.put("customerName", "xyz");
320         variables.put("customerLatitude", "32.89748");
321         variables.put("customerLongitude", "-97.040443");
322         variables.put("customerName", "xyz");
323         variables.put("customerLocation", customerLocation);
324         variables.put("cloudOwner", "amazon");
325         variables.put("cloudRegionId", "TNZED");
326
327         invokeSubProcess("Homing", businessKey, variables);
328         injectWorkflowMessages(callbacks, "oof3");
329         waitForProcessEnd(businessKey, 10000);
330
331         //Get Variables
332
333         WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
334                 "WorkflowException");
335         ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey,
336                 "serviceDecomposition");
337         logger.debug("serviceDecompositionExp is: " + serviceDecompositionExp);
338
339         Resource resourceVnf = serviceDecompositionExp.getServiceResource("test-resource-id-000");
340         logger.debug("resourceVnf is: " + resourceVnf);
341         HomingSolution resourceVnfHoming = resourceVnf.getHomingSolution();
342
343         String resourceVnfHomingString = resourceVnfHoming.toString();
344         logger.debug("resourceVnfHomingString is: " + resourceVnfHomingString);
345         resourceVnfHomingString = resourceVnfHomingString.replaceAll("\\s+", " ");
346         logger.debug("Now resourceVnfHomingString is: " + resourceVnfHomingString);
347
348         assertNull(workflowException);
349
350         //Verify request
351         String oofRequest = (String) getVariableFromHistory(businessKey, "oofRequest");
352         logger.debug("oofRequest is: " + oofRequest);
353         assertEquals(FileUtil.readResourceFile("__files/BuildingBlocks/oofRequest_infravnf").
354                 replaceAll("\n", "").replaceAll("\r", "").
355                 replaceAll("\t", ""), oofRequest.replaceAll("\n", "").
356                 replaceAll("\r", "").replaceAll("\t", ""));
357
358         //logger.debug("resourceVnfHoming.getVnf().getResourceId() is: " + resourceVnfHoming.getVnf().getResourceId());
359
360         assertEquals(homingSolutionService("service", "service-instance-01234",
361                 "MDTNJ01", "test-resource-id-000","att-aic",
362                 "mtmnj1a",
363                 "\"f1d563e8-e714-4393-8f99-cc480144a05e\"," +
364                         " \"j1d563e8-e714-4393-8f99-cc480144a05e\"",
365                 "\"s1d563e8-e714-4393-8f99-cc480144a05e\"," +
366                         " \"b1d563e8-e714-4393-8f99-cc480144a05e\""), resourceVnfHomingString);
367     }
368
369     @Test
370     public void testHoming_success_existingLicense() throws Exception {
371
372         mockOof();
373
374         String businessKey = UUID.randomUUID().toString();
375         Map<String, Object> variables = new HashMap<String, Object>();
376         setVariablesExistingLicense(variables);
377
378         invokeSubProcess("Homing", businessKey, variables);
379
380         injectWorkflowMessages(callbacks, "sniro");
381
382         waitForProcessEnd(businessKey, 10000);
383
384         //Get Variables
385         WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
386         ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey, "serviceDecomposition");
387         String oofRequest = (String) getVariableFromHistory(businessKey, "sniroRequest");
388
389         Resource resourceAR = serviceDecompositionExp.getServiceResource("testResourceIdAR");
390         HomingSolution resourceARHoming = (HomingSolution) resourceAR.getHomingSolution();
391         Resource resourceAR2 = serviceDecompositionExp.getServiceResource("testResourceIdAR2");
392         HomingSolution resourceARHoming2 = (HomingSolution) resourceAR2.getHomingSolution();
393         Resource resourceVNF = serviceDecompositionExp.getServiceResource("testResourceIdVNF");
394         HomingSolution resourceVNFHoming = (HomingSolution) resourceVNF.getHomingSolution();
395         String resourceARHomingString = resourceARHoming.toString();
396         resourceARHomingString = resourceARHomingString.replaceAll("\\s+", " ");
397         String resourceARHoming2String = resourceARHoming2.toString();
398         resourceARHoming2String = resourceARHoming2String.replaceAll("\\s+", " ");
399         String resourceVNFHomingString = resourceVNFHoming.toString();
400         resourceVNFHomingString = resourceVNFHomingString.replaceAll("\\s+", " ");
401         oofRequest = oofRequest.replaceAll("\\s+", "");
402
403         assertNull(workflowException);
404         assertEquals(homingSolutionService("service", "testSIID1", "MDTNJ01",
405                 "aic", "dfwtx", "KDTNJ01",
406                 "\"f1d563e8-e714-4393-8f99-cc480144a05e\", \"j1d563e8-e714-4393-8f99-cc480144a05e\"",
407                 "\"s1d563e8-e714-4393-8f99-cc480144a05e\", \"b1d563e8-e714-4393-8f99-cc480144a05e\""),
408                 resourceARHomingString);
409         assertEquals(homingSolutionService("service", "testSIID2", "testVnfHostname2",
410                 resourceARHoming2.getVnf().getResourceId(),"aic", "testCloudRegionId2",
411                 null, null), resourceARHoming2String);
412         assertEquals(homingSolutionCloud("cloud", "aic",
413                 "testCloudRegionId3",
414                 false, "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
415                 "\"31d563e8-e714-4393-8f99-cc480144a05e\", \"71d563e8-e714-4393-8f99-cc480144a05e\""),
416                 resourceVNFHomingString);
417         assertEquals(verifyOofRequestExistingLicense(), oofRequest);
418
419     }
420
421     @Test
422
423     public void testHoming_error_inputVariable() throws Exception {
424
425         String businessKey = UUID.randomUUID().toString();
426         Map<String, Object> variables = new HashMap<>();
427         setVariables3(variables);
428
429         invokeSubProcess("Homing", businessKey, variables);
430
431         waitForProcessEnd(businessKey, 10000);
432
433         //Get Variables
434         WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
435                 "WorkflowException");
436
437         assertEquals("WorkflowException[processKey=Homing,errorCode=4000,errorMessage=A required " +
438                 "input variable is missing or null]", workflowException.toString());
439     }
440
441     @Test
442
443     public void testHoming_error_badResponse() throws Exception {
444         mockOof_500();
445
446         String businessKey = UUID.randomUUID().toString();
447         Map<String, Object> variables = new HashMap<>();
448         setVariables(variables);
449
450         invokeSubProcess("Homing", businessKey, variables);
451
452         waitForProcessEnd(businessKey, 10000);
453
454         //Get Variables
455         WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
456                 "WorkflowException");
457
458         assertEquals("WorkflowException[processKey=Homing,errorCode=500,errorMessage=Received a " +
459                 "Bad Sync Response from Sniro/OOF.]", workflowException.toString());
460     }
461
462     @Test
463
464     public void testHoming_error_oofNoSolution() throws Exception {
465         mockOof();
466
467         String businessKey = UUID.randomUUID().toString();
468         Map<String, Object> variables = new HashMap<>();
469         setVariables(variables);
470
471         invokeSubProcess("Homing", businessKey, variables);
472
473         injectWorkflowMessages(callbacks, "oofNoSol");
474
475         waitForProcessEnd(businessKey, 10000);
476
477         //Get Variables
478         WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
479                 "WorkflowException");
480
481         assertEquals("WorkflowException[processKey=Homing,errorCode=400,errorMessage=No solution found " +
482                 "for plan 08e1b8cf-144a-4bac-b293-d5e2eedc97e8]", workflowException.toString());
483     }
484
485     @Test
486
487     public void testHoming_error_oofPolicyException() throws Exception {
488         mockOof();
489
490         String businessKey = UUID.randomUUID().toString();
491         Map<String, Object> variables = new HashMap<>();
492         setVariables(variables);
493
494         invokeSubProcess("Homing", businessKey, variables);
495
496         injectWorkflowMessages(callbacks, "oofPolicyEx");
497
498         waitForProcessEnd(businessKey, 10000);
499
500         //Get Variables
501         WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
502                 "WorkflowException");
503
504         assertEquals("WorkflowException[processKey=Homing,errorCode=400,errorMessage=OOF Async Callback " +
505                 "Response contains a Request Error Policy Exception: Message content size exceeds the allowable " +
506                 "limit]", workflowException.toString());
507     }
508
509     @Test
510
511     public void testHoming_error_oofServiceException() throws Exception {
512         mockOof();
513
514         String businessKey = UUID.randomUUID().toString();
515         Map<String, Object> variables = new HashMap<>();
516         setVariables(variables);
517
518         invokeSubProcess("Homing", businessKey, variables);
519
520         injectWorkflowMessages(callbacks, "oofServiceEx");
521
522         waitForProcessEnd(businessKey, 10000);
523
524         //Get Variables
525         WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
526                 "WorkflowException");
527
528         assertEquals("WorkflowException[processKey=Homing,errorCode=400,errorMessage=OOF Async Callback " +
529                         "Response contains a Request Error Service Exception: OOF PlacementError: " +
530                         "requests.exceptions.HTTPError: 404 Client Error: Not Found for " +
531                         "url: http://192.168.171.200:8091/v1/plans/97b4e303-5f75-492c-8fb2-21098281c8b8]",
532                 workflowException.toString());
533     }
534
535
536     private void setVariables(Map<String, Object> variables) {
537         variables.put("homingService", "oof");
538         HashMap customerLocation = new HashMap<String, Object>();
539         customerLocation.put("customerLatitude", "32.89748");
540         customerLocation.put("customerLongitude", "-97.040443");
541         customerLocation.put("customerName", "xyz");
542         variables.put("customerLatitude", "32.89748");
543         variables.put("customerLongitude", "-97.040443");
544         variables.put("customerName", "xyz");
545         variables.put("customerLocation", customerLocation);
546         variables.put("cloudOwner", "amazon");
547         variables.put("cloudRegionId", "TNZED");
548         variables.put("isDebugLogEnabled", "true");
549         //      variables.put("mso-request-id", "testRequestId");
550         variables.put("msoRequestId", "testRequestId");
551         variables.put("serviceInstanceId", "testServiceInstanceId");
552         variables.put("serviceDecomposition", serviceDecomposition);
553         variables.put("subscriberInfo", subscriber2);
554     }
555
556     private void setVariables2(Map<String, Object> variables) {
557         List<NetworkResource> netList = new ArrayList<NetworkResource>();
558         NetworkResource net = new NetworkResource();
559         net.setResourceId("testResourceIdNet");
560         ModelInfo netModel = new ModelInfo();
561         netModel.setModelCustomizationUuid("testModelCustomizationUuidNet");
562         netModel.setModelInvariantUuid("testModelInvariantIdNet");
563         netModel.setModelName("testModelNameNet");
564         netModel.setModelVersion("testModelVersionNet");
565         net.setModelInfo(netModel);
566         netList.add(net);
567         NetworkResource net2 = new NetworkResource();
568         net2.setResourceId("testResourceIdNet2");
569         ModelInfo netModel2 = new ModelInfo();
570         netModel2.setModelCustomizationUuid("testModelCustomizationUuidNet2");
571         netModel2.setModelCustomizationName("testModelCustomizationNameNet2");
572         netModel2.setModelInvariantUuid("testModelInvariantIdNet2");
573         netModel2.setModelName("testModelNameNet2");
574         netModel2.setModelVersion("testModelVersionNet2");
575         net2.setModelInfo(netModel2);
576         netList.add(net2);
577         serviceDecomposition.setNetworkResources(netList);
578
579         variables.put("homingService", "oof");
580         HashMap customerLocation = new HashMap<String, Object>();
581         customerLocation.put("customerLatitude", "32.89748");
582         customerLocation.put("customerLongitude", "-97.040443");
583         customerLocation.put("customerName", "xyz");
584         variables.put("customerLatitude", "32.89748");
585         variables.put("customerLongitude", "-97.040443");
586         variables.put("customerName", "xyz");
587         variables.put("customerLocation", customerLocation);
588         variables.put("cloudOwner", "amazon");
589         variables.put("cloudRegionId", "TNZED");
590         variables.put("isDebugLogEnabled", "true");
591         variables.put("msoRequestId", "testRequestId");
592         variables.put("serviceInstanceId", "testServiceInstanceId");
593         variables.put("serviceDecomposition", serviceDecomposition);
594         variables.put("subscriberInfo", subscriber2);
595     }
596
597     private void setVariables3(Map<String, Object> variables) {
598         variables.put("homingService", "oof");
599         HashMap customerLocation = new HashMap<String, Object>();
600         customerLocation.put("customerLatitude", "32.89748");
601         customerLocation.put("customerLongitude", "-97.040443");
602         customerLocation.put("customerName", "xyz");
603         variables.put("customerLatitude", "32.89748");
604         variables.put("customerLongitude", "-97.040443");
605         variables.put("customerName", "xyz");
606         variables.put("customerLocation", customerLocation);
607         variables.put("cloudOwner", "amazon");
608         variables.put("cloudRegionId", "TNZED");
609         variables.put("isDebugLogEnabled", "true");
610         //      variables.put("mso-request-id", "testRequestId");
611         variables.put("msoRequestId", "testRequestId");
612         variables.put("serviceInstanceId", "testServiceInstanceId");
613         variables.put("serviceDecomposition", null);
614         variables.put("subscriberInfo", subscriber2);
615     }
616
617     private void setVariablesExistingLicense(Map<String, Object> variables) {
618         HomingSolution currentHomingSolution = new HomingSolution();
619         serviceDecomposition.getVnfResources().get(0).setCurrentHomingSolution(currentHomingSolution);
620         serviceDecomposition.getVnfResources().get(0).getCurrentHomingSolution().getLicense().addEntitlementPool("testEntitlementPoolId1");
621         serviceDecomposition.getVnfResources().get(0).getCurrentHomingSolution().getLicense().addEntitlementPool("testEntitlementPoolId2");
622
623         serviceDecomposition.getVnfResources().get(0).getCurrentHomingSolution().getLicense().addLicenseKeyGroup("testLicenseKeyGroupId1");
624         serviceDecomposition.getVnfResources().get(0).getCurrentHomingSolution().getLicense().addLicenseKeyGroup("testLicenseKeyGroupId2");
625
626         variables.put("isDebugLogEnabled", "true");
627         variables.put("msoRequestId", "testRequestId");
628         variables.put("serviceInstanceId", "testServiceInstanceId");
629         variables.put("serviceDecomposition", serviceDecomposition);
630         variables.put("subscriberInfo", subscriber2);
631
632     }
633
634     private String homingSolutionService(String type, String serviceInstanceId, String vnfHostname,
635                                          String vnfResourceId, String cloudOwner,
636                                          String cloudRegionId, String enList,
637                                          String licenseList){
638
639         String solution = "";
640         if(enList == null){
641             solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"serviceInstanceId\" : \"" +
642                     serviceInstanceId + "\", \"cloudOwner\" : \"" + cloudOwner + "\", \"cloudRegionId\" : \"" +
643                     cloudRegionId + "\", " + "\"vnf\" : { \"resourceId\" : \"" + vnfResourceId +
644                     "\", \"resourceType\" : \"VNF\", \"resourceInstance\" : { }, \"homingSolution\" : { \"license\" :" +
645                     " { }, \"rehome\" : false }, \"vnfHostname\" : \"" + vnfHostname + "\" }, \"license\" : { }," +
646                     " \"rehome\" : false } }";
647         }else{
648             //language=JSON
649             solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"serviceInstanceId\" : \"" +
650                     serviceInstanceId + "\", \"cloudOwner\" : \"" + cloudOwner + "\", \"cloudRegionId\" : \"" +
651                     cloudRegionId + "\", \"vnf\" : { \"resourceId\" : \"" + vnfResourceId + "\", \"resourceType\" :" +
652                     " \"VNF\", \"resourceInstance\" : { }, \"homingSolution\" : { \"license\" : { }, \"rehome\" :" +
653                     " false }, \"vnfHostname\" : \"" + vnfHostname + "\" }, \"license\" : { \"entitlementPoolList\" :" +
654                     " [ " + enList + " ], \"licenseKeyGroupList\" : [ " + licenseList + " ] }, \"rehome\" : false } }";
655         }
656         return solution;
657     }
658
659     private String homingSolutionCloud(String type, String cloudOwner,
660                                        String cloudRegionId, Boolean flavors, String enList,
661                                        String licenseList){
662         String solution = "";
663         if(enList == null){
664             solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
665                     cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
666                     "\", \"license\" : { }, \"rehome\" : false } }";
667         } else if (flavors && enList == null){
668             solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
669                     cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
670                     "\", \"flavors\" :  [ { \"flavorLabel\" : \"flavorLabel2xxx\", \"flavor\" : \"vimFlavorxxx\" }, " +
671                     "{ \"flavorLabel\" : \"flavorLabel1xxx\", \"flavor\" : \"vimFlavorxxx\" } ], " +
672                     "\"license\" : { }, \"rehome\" : false } }";
673         } else if (flavors) {
674             solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
675                     cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
676                     "\", \"flavors\" : [ { \"flavorLabel\" : \"flavorLabel2xxx\", \"flavor\" : \"vimFlavorxxx\" }, " +
677                     "{ \"flavorLabel\" : \"flavorLabel1xxx\", \"flavor\" : \"vimFlavorxxx\" } ], " +
678                     "\"license\" : { \"entitlementPoolList\" : [ " + enList +  " ], \"licenseKeyGroupList\" : [ " +
679                     licenseList +  " ] }, \"rehome\" : false } }";
680         } else {
681             solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
682                     cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
683                     "\", \"license\" : { \"entitlementPoolList\" : [ " + enList +  " ], \"licenseKeyGroupList\" : [ " +
684                     licenseList +  " ] }, \"rehome\" : false } }";
685         }
686         return solution;
687     }
688
689     private void setVariablesForServiceDecomposition(Map<String, Object> variables, String requestId, String siId) {
690         variables.put("homingService", "oof");
691         variables.put("isDebugLogEnabled", "true");
692         variables.put("mso-request-id", requestId);
693         variables.put("msoRequestId", requestId);
694         variables.put("serviceInstanceId", siId);
695         HashMap customerLocation = new HashMap<String, Object>();
696         customerLocation.put("customerLatitude", "32.89748");
697         customerLocation.put("customerLongitude", "-97.040443");
698         customerLocation.put("customerName", "xyz");
699         variables.put("customerLatitude", "32.89748");
700         variables.put("customerLongitude", "-97.040443");
701         variables.put("customerName", "xyz");
702         variables.put("customerLocation", customerLocation);
703         variables.put("cloudOwner", "amazon");
704         variables.put("cloudRegionId", "TNZED");
705
706
707         String serviceModelInfo = "{\"modelInvariantId\":\"1cc4e2e4-eb6e-404d-a66f-c8733cedcce8\",\"modelUuid\":" +
708                 "\"2f7f309d-c842-4644-a2e4-34167be5eeb4\",\"modelName\":\"vCPE Service\",\"modelVersion\":\"2.0\",}";
709         variables.put("serviceModelInfo", serviceModelInfo);
710     }
711
712     private String verifyOofRequest() {
713         String request = "{\"requestInfo\":{\"transactionId\":\"testRequestId\",\"requestId\":\"testRequestId\"," +
714                 "\"callbackUrl\":\"http://localhost:28090/workflows/messages/message/oofResponse/testRequestId\"," +
715                 "\"sourceId\":\"so\",\"requestType\":\"create\",\"numSolutions\":1,\"optimizers\":[\"placement\"]," +
716                 "\"timeout\":600},\"placementInfo\":{\"requestParameters\":{\"customerLatitude\":" +
717                 "\"32.89748\",\"customerLongitude\":\"-97.040443\",\"customerName\":\"xyz\"},\"subscriberInfo\":" +
718                 "{\"globalSubscriberId\":\"SUB12_0322_DS_1201\",\"subscriberName\":\"SUB_12_0322_DS_1201\"," +
719                 "\"subscriberCommonSiteId\":\"\"},\"placementDemands\":[{\"resourceModuleName\":\"ALLOTTED_RESOURCE\"" +
720                 ",\"serviceResourceId\":\"testResourceIdAR\",\"tenantId\":" +
721                 "\"null\",\"resourceModelInfo\":{\"modelInvariantId\":\"testModelInvariantIdAR\"," +
722                 "\"modelVersionId\":\"testARModelUuid\",\"modelName\":\"testModelNameAR\",\"modelType\":" +
723                 "\"testModelTypeAR\",\"modelVersion\":\"testModelVersionAR\",\"modelCustomizationName\":\"\"}}," +
724                 "{\"resourceModuleName\":\"ALLOTTED_RESOURCE\",\"serviceResourceId\":\"testResourceIdAR2\"," +
725                 "\"tenantId\":\"null\",\"resourceModelInfo\":{\"modelInvariantId\":\"testModelInvariantIdAR2\"," +
726                 "\"modelVersionId\":\"testAr2ModelUuid\",\"modelName\":\"testModelNameAR2\"," +
727                 "\"modelType\":\"testModelTypeAR2\",\"modelVersion\":\"testModelVersionAR2\"," +
728                 "\"modelCustomizationName\":\"\"}}]},\"serviceInfo\":" +
729                 "{\"serviceInstanceId\":\"testServiceInstanceId123\"," +
730                 "\"serviceName\":\"null\",\"modelInfo\":{\"modelType\":\"\",\"modelInvariantId\":" +
731                 "\"testModelInvariantId\",\"modelVersionId\":\"testModelUuid\",\"modelName\":\"testModelName\"," +
732                 "\"modelVersion\":\"testModelVersion\",\"modelCustomizationName\":\"" +
733                 "\"}},\"licenseInfo\":{\"licenseDemands\":[{\"resourceModuleName\":\"VNF\",\"serviceResourceId\":" +
734                 "\"testResourceIdVNF\",\"resourceInstanceType\":\"VNF\",\"resourceModelInfo\":{\"modelInvariantId\":" +
735                 "\"testModelInvariantIdVNF\",\"modelVersionId\":\"testVnfModelUuid\",\"modelName\":" +
736                 "\"testModelNameVNF\",\"modelType\":\"testModelTypeVNF\",\"modelVersion\":\"testModelVersionVNF\"," +
737                 "\"modelCustomizationName\":\"\"}}]}}";
738         return request;
739     }
740
741     private String verifyOofRequestExistingLicense(){
742         String request = "{\"requestInfo\":{\"transactionId\":\"testRequestId\",\"requestId\":\"testRequestId\"," +
743                 "\"callbackUrl\":\"http://localhost:28090/workflows/messages/message/SNIROResponse/testRequestId\"," +
744                 "\"sourceId\":\"mso\",\"requestType\":\"speedchanged\",\"optimizer\":[\"placement\",\"license\"]," +
745                 "\"numSolutions\":1,\"timeout\":1800},\"placementInfo\":{\"serviceModelInfo\":{\"modelType\":\"\"," +
746                 "\"modelInvariantId\":\"testModelInvariantId\",\"modelVersionId\":\"testModelUuid\",\"modelName\":" +
747                 "\"testModelName\",\"modelVersion\":\"testModelVersion\"},\"subscriberInfo\":" +
748                 "{\"globalSubscriberId\":\"SUB12_0322_DS_1201\",\"subscriberName\":\"SUB_12_0322_DS_1201\"," +
749                 "\"subscriberCommonSiteId\":\"\"},\"demandInfo\":{\"placementDemand\":[{\"resourceInstanceType\":" +
750                 "\"ALLOTTED_RESOURCE\",\"serviceResourceId\":\"testResourceIdAR\",\"resourceModuleName\":\"\"," +
751                 "\"resourceModelInfo\":{\"modelCustomizationId\":\"testModelCustomizationUuidAR\"," +
752                 "\"modelInvariantId\":\"testModelInvariantIdAR\",\"modelName\":\"testModelNameAR\"," +
753                 "\"modelVersion\":\"testModelVersionAR\",\"modelVersionId\":\"testARModelUuid\",\"modelType\":" +
754                 "\"testModelTypeAR\"},\"tenantId\":\"\",\"tenantName\":\"\"},{\"resourceInstanceType\":" +
755                 "\"ALLOTTED_RESOURCE\",\"serviceResourceId\":\"testResourceIdAR2\",\"resourceModuleName\":" +
756                 "\"\",\"resourceModelInfo\":{\"modelCustomizationId\":\"testModelCustomizationUuidAR2\"," +
757                 "\"modelInvariantId\":\"testModelInvariantIdAR2\",\"modelName\":\"testModelNameAR2\"," +
758                 "\"modelVersion\":\"testModelVersionAR2\",\"modelVersionId\":\"testAr2ModelUuid\"," +
759                 "\"modelType\":\"testModelTypeAR2\"},\"tenantId\":\"\",\"tenantName\":\"\"}],\"licenseDemand\":" +
760                 "[{\"resourceInstanceType\":\"VNF\",\"serviceResourceId\":\"testResourceIdVNF\"," +
761                 "\"resourceModuleName\":\"\",\"resourceModelInfo\":{\"modelCustomizationId\":" +
762                 "\"testModelCustomizationUuidVNF\",\"modelInvariantId\":\"testModelInvariantIdVNF\"," +
763                 "\"modelName\":\"testModelNameVNF\",\"modelVersion\":\"testModelVersionVNF\"," +
764                 "\"modelVersionId\":\"testVnfModelUuid\",\"modelType\":\"testModelTypeVNF\"}," +
765                 "\"existingLicense\":[{\"entitlementPoolUUID\":[\"testEntitlementPoolId1\"," +
766                 "\"testEntitlementPoolId2\"],\"licenseKeyGroupUUID\":[\"testLicenseKeyGroupId1\"," +
767                 "\"testLicenseKeyGroupId2\"]}]}]},\"policyId\":[],\"serviceInstanceId\":" +
768                 "\"testServiceInstanceId123\",\"orderInfo\":\"{\\\"requestParameters\\\":null}\"}}";
769         return request;
770     }
771 }