2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
22 * © 2014 AT&T Intellectual Property. All rights reserved. Used under license from AT&T Intellectual Property.
24 package org.openecomp.mso.bpmn.common;
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;
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;
47 import java.util.UUID;
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;
57 * Test the OOF Homing subflow building block.
59 public class OofHomingTest extends WorkflowTest {
61 ServiceDecomposition serviceDecomposition = new ServiceDecomposition();
62 String subscriber = "";
63 String subscriber2 = "";
65 private final CallbackSet callbacks = new CallbackSet();
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");
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");
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);
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");
95 ServiceInstance si = new ServiceInstance();
96 si.setInstanceId("testServiceInstanceId123");
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);
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);
143 System.out.println("SERVICE DECOMP: " + serviceDecomposition.getServiceResourcesJsonString());
144 serviceDecomposition.setModelInfo(sModel);
145 serviceDecomposition.setServiceAllottedResources(arList);
146 serviceDecomposition.setServiceVnfs(vnfList);
147 serviceDecomposition.setServiceInstance(si);
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\"}";
155 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
156 public void testHoming_success_2AR1Vnf() throws Exception {
160 String businessKey = UUID.randomUUID().toString();
161 Map<String, Object> variables = new HashMap<>();
162 setVariables(variables);
164 invokeSubProcess("Homing", businessKey, variables);
166 injectWorkflowMessages(callbacks, "oof2");
168 waitForProcessEnd(businessKey, 10000);
171 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
172 "WorkflowException");
173 ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey,
174 "serviceDecomposition");
175 String expectedOofRequest = (String) getVariableFromHistory(businessKey, "oofRequest");
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+", "");
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);
208 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
209 public void testHoming_success_2AR1Vnf2Net() throws Exception {
213 String businessKey = UUID.randomUUID().toString();
214 Map<String, Object> variables = new HashMap<>();
215 setVariables2(variables);
217 invokeSubProcess("Homing", businessKey, variables);
219 injectWorkflowMessages(callbacks, "oof3");
221 waitForProcessEnd(businessKey, 10000);
224 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
225 "WorkflowException");
226 ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey,
227 "serviceDecomposition");
228 String expectedOofRequest = (String) getVariableFromHistory(businessKey, "oofRequest");
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();
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+", "");
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);
284 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/BuildingBlock/DecomposeService.bpmn",
285 "subprocess/ReceiveWorkflowMessage.bpmn"})
286 public void testHoming_success_vnfResourceList() throws Exception {
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);
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");
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");
327 invokeSubProcess("Homing", businessKey, variables);
328 injectWorkflowMessages(callbacks, "oof3");
329 waitForProcessEnd(businessKey, 10000);
333 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
334 "WorkflowException");
335 ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey,
336 "serviceDecomposition");
337 System.out.println("serviceDecompositionExp is: " + serviceDecompositionExp);
339 Resource resourceVnf = serviceDecompositionExp.getServiceResource("test-resource-id-000");
340 System.out.println("resourceVnf is: " + resourceVnf);
341 HomingSolution resourceVnfHoming = resourceVnf.getHomingSolution();
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);
348 assertNull(workflowException);
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", ""));
358 //System.out.println("resourceVnfHoming.getVnf().getResourceId() is: " + resourceVnfHoming.getVnf().getResourceId());
360 assertEquals(homingSolutionService("service", "service-instance-01234",
361 "MDTNJ01", "test-resource-id-000","att-aic",
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);
370 @Ignore // 1802 merge
371 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
372 public void testHoming_success_existingLicense() throws Exception {
376 String businessKey = UUID.randomUUID().toString();
377 Map<String, Object> variables = new HashMap<String, Object>();
378 setVariablesExistingLicense(variables);
380 invokeSubProcess("Homing", businessKey, variables);
382 injectWorkflowMessages(callbacks, "sniro");
384 waitForProcessEnd(businessKey, 10000);
387 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
388 ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey, "serviceDecomposition");
389 String oofRequest = (String) getVariableFromHistory(businessKey, "sniroRequest");
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+", "");
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);
424 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
425 public void testHoming_error_inputVariable() throws Exception {
427 String businessKey = UUID.randomUUID().toString();
428 Map<String, Object> variables = new HashMap<>();
429 setVariables3(variables);
431 invokeSubProcess("Homing", businessKey, variables);
433 waitForProcessEnd(businessKey, 10000);
436 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
437 "WorkflowException");
439 assertEquals("WorkflowException[processKey=Homing,errorCode=4000,errorMessage=A required " +
440 "input variable is missing or null]", workflowException.toString());
444 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
445 public void testHoming_error_badResponse() throws Exception {
448 String businessKey = UUID.randomUUID().toString();
449 Map<String, Object> variables = new HashMap<>();
450 setVariables(variables);
452 invokeSubProcess("Homing", businessKey, variables);
454 waitForProcessEnd(businessKey, 10000);
457 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
458 "WorkflowException");
460 assertEquals("WorkflowException[processKey=Homing,errorCode=500,errorMessage=Received a " +
461 "Bad Sync Response from Sniro/OOF.]", workflowException.toString());
465 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
466 public void testHoming_error_oofNoSolution() throws Exception {
469 String businessKey = UUID.randomUUID().toString();
470 Map<String, Object> variables = new HashMap<>();
471 setVariables(variables);
473 invokeSubProcess("Homing", businessKey, variables);
475 injectWorkflowMessages(callbacks, "oofNoSol");
477 waitForProcessEnd(businessKey, 10000);
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:");
488 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
489 public void testHoming_error_oofPolicyException() throws Exception {
492 String businessKey = UUID.randomUUID().toString();
493 Map<String, Object> variables = new HashMap<>();
494 setVariables(variables);
496 invokeSubProcess("Homing", businessKey, variables);
498 injectWorkflowMessages(callbacks, "oofPolicyEx");
500 waitForProcessEnd(businessKey, 10000);
503 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
504 "WorkflowException");
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());
512 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
513 public void testHoming_error_oofServiceException() throws Exception {
516 String businessKey = UUID.randomUUID().toString();
517 Map<String, Object> variables = new HashMap<>();
518 setVariables(variables);
520 invokeSubProcess("Homing", businessKey, variables);
522 injectWorkflowMessages(callbacks, "oofServiceEx");
524 waitForProcessEnd(businessKey, 10000);
527 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
528 "WorkflowException");
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());
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);
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);
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);
581 serviceDecomposition.setServiceNetworks(netList);
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);
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);
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");
633 serviceDecomposition.getServiceVnfs().get(0).getCurrentHomingSolution().getLicense().addLicenseKeyGroup("testLicenseKeyGroupId1");
634 serviceDecomposition.getServiceVnfs().get(0).getCurrentHomingSolution().getLicense().addLicenseKeyGroup("testLicenseKeyGroupId2");
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);
644 private String homingSolutionService(String type, String serviceInstanceId, String vnfHostname,
645 String vnfResourceId, String cloudOwner,
646 String cloudRegionId, String enList,
649 String solution = "";
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 } }";
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 } }";
669 private String homingSolutionCloud(String type, String cloudOwner,
670 String cloudRegionId, Boolean flavors, String enList,
672 String solution = "";
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 } }";
691 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
692 cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
693 "\", \"license\" : { \"entitlementPoolList\" : [ " + enList + " ], \"licenseKeyGroupList\" : [ " +
694 licenseList + " ] }, \"rehome\" : false } }";
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");
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);
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\":\"" +
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}\"}}";