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