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