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.List;
46 import java.util.UUID;
48 import static org.junit.Assert.assertEquals;
49 import static org.junit.Assert.assertNull;
50 import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.MockGetServiceResourcesCatalogDataByModelUuid;
51 import static org.openecomp.mso.bpmn.mock.StubResponseOof.mockOof;
52 import static org.openecomp.mso.bpmn.mock.StubResponseOof.mockOof_500;
56 * Test the OOF Homing subflow building block.
58 public class OofHomingTest extends WorkflowTest {
60 ServiceDecomposition serviceDecomposition = new ServiceDecomposition();
61 String subscriber = "";
62 String subscriber2 = "";
64 private final CallbackSet callbacks = new CallbackSet();
66 public OofHomingTest() throws IOException {
67 String oofCallback = FileUtil.readResourceFile("__files/BuildingBlocks/oofCallbackInfraVnf");
68 String oofCallback2 = FileUtil.readResourceFile("__files/BuildingBlocks/oofCallback2AR1Vnf");
69 String oofCallback3 = FileUtil.readResourceFile("__files/BuildingBlocks/oofCallback2AR1Vnf2Net");
71 String oofCallbackNoSolution = FileUtil.
72 readResourceFile("__files/BuildingBlocks/oofCallbackNoSolutionFound");
73 String oofCallbackPolicyException = FileUtil.
74 readResourceFile("__files/BuildingBlocks/oofCallbackPolicyException");
75 String oofCallbackServiceException = FileUtil.
76 readResourceFile("__files/BuildingBlocks/oofCallbackServiceException");
78 callbacks.put("oof", JSON, "oofResponse", oofCallback);
79 callbacks.put("oof2", JSON, "oofResponse", oofCallback2);
80 callbacks.put("oof3", JSON, "oofResponse", oofCallback3);
81 callbacks.put("oofNoSol", JSON, "oofResponse", oofCallbackNoSolution);
82 callbacks.put("oofPolicyEx", JSON, "oofResponse", oofCallbackPolicyException);
83 callbacks.put("oofServiceEx", JSON, "oofResponse", oofCallbackServiceException);
86 ModelInfo sModel = new ModelInfo();
87 sModel.setModelCustomizationName("testModelCustomizationName");
88 sModel.setModelInstanceName("testModelInstanceName");
89 sModel.setModelInvariantUuid("testModelInvariantId");
90 sModel.setModelName("testModelName");
91 sModel.setModelUuid("testModelUuid");
92 sModel.setModelVersion("testModelVersion");
94 ServiceInstance si = new ServiceInstance();
95 si.setInstanceId("testServiceInstanceId123");
97 List<AllottedResource> arList = new ArrayList<AllottedResource>();
98 AllottedResource ar = new AllottedResource();
99 ar.setResourceId("testResourceIdAR");
100 ar.setResourceInstanceName("testARInstanceName");
101 ModelInfo arModel = new ModelInfo();
102 arModel.setModelCustomizationUuid("testModelCustomizationUuidAR");
103 arModel.setModelInvariantUuid("testModelInvariantIdAR");
104 arModel.setModelName("testModelNameAR");
105 arModel.setModelVersion("testModelVersionAR");
106 arModel.setModelUuid("testARModelUuid");
107 arModel.setModelType("testModelTypeAR");
108 ar.setModelInfo(arModel);
109 AllottedResource ar2 = new AllottedResource();
110 ar2.setResourceId("testResourceIdAR2");
111 ar2.setResourceInstanceName("testAR2InstanceName");
112 ModelInfo arModel2 = new ModelInfo();
113 arModel2.setModelCustomizationUuid("testModelCustomizationUuidAR2");
114 arModel2.setModelInvariantUuid("testModelInvariantIdAR2");
115 arModel2.setModelName("testModelNameAR2");
116 arModel2.setModelVersion("testModelVersionAR2");
117 arModel2.setModelUuid("testAr2ModelUuid");
118 arModel2.setModelType("testModelTypeAR2");
119 ar2.setModelInfo(arModel2);
123 List<VnfResource> vnfList = new ArrayList<VnfResource>();
124 VnfResource vnf = new VnfResource();
125 vnf.setResourceId("testResourceIdVNF");
126 vnf.setResourceInstanceName("testVnfInstanceName");
127 ArrayList<CloudFlavor> flavors = new ArrayList<>();
128 CloudFlavor flavor1 = new CloudFlavor("flavorLabel1xxx", "vimFlavorxxx");
129 CloudFlavor flavor2 = new CloudFlavor("flavorLabel2xxx", "vimFlavorxxx");
130 flavors.add(flavor1);
131 flavors.add(flavor2);
132 vnf.getHomingSolution().setFlavors(flavors);
133 ModelInfo vnfModel = new ModelInfo();
134 vnfModel.setModelCustomizationUuid("testModelCustomizationUuidVNF");
135 vnfModel.setModelInvariantUuid("testModelInvariantIdVNF");
136 vnfModel.setModelName("testModelNameVNF");
137 vnfModel.setModelVersion("testModelVersionVNF");
138 vnfModel.setModelUuid("testVnfModelUuid");
139 vnfModel.setModelType("testModelTypeVNF");
140 vnf.setModelInfo(vnfModel);
142 System.out.println("SERVICE DECOMP: " + serviceDecomposition.getServiceResourcesJsonString());
143 serviceDecomposition.setModelInfo(sModel);
144 serviceDecomposition.setServiceAllottedResources(arList);
145 serviceDecomposition.setServiceVnfs(vnfList);
146 serviceDecomposition.setServiceInstance(si);
149 subscriber = "{\"globalSubscriberId\": \"SUB12_0322_DS_1201\",\"subscriberCommonSiteId\": \"DALTX0101\",\"subscriberName\": \"SUB_12_0322_DS_1201\"}";
150 subscriber2 = "{\"globalSubscriberId\": \"SUB12_0322_DS_1201\",\"subscriberName\": \"SUB_12_0322_DS_1201\"}";
154 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
155 public void testHoming_success_2AR1Vnf() throws Exception {
159 String businessKey = UUID.randomUUID().toString();
160 Map<String, Object> variables = new HashMap<>();
161 setVariables(variables);
163 invokeSubProcess("Homing", businessKey, variables);
165 injectWorkflowMessages(callbacks, "oof2");
167 waitForProcessEnd(businessKey, 10000);
170 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
171 "WorkflowException");
172 ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey,
173 "serviceDecomposition");
174 String expectedOofRequest = (String) getVariableFromHistory(businessKey, "oofRequest");
176 Resource resourceAR = serviceDecompositionExp.getServiceResource("testResourceIdAR");
177 HomingSolution resourceARHoming = resourceAR.getHomingSolution();
178 Resource resourceAR2 = serviceDecompositionExp.getServiceResource("testResourceIdAR2");
179 HomingSolution resourceARHoming2 = resourceAR2.getHomingSolution();
180 Resource resourceVNF = serviceDecompositionExp.getServiceResource("testResourceIdVNF");
181 HomingSolution resourceVNFHoming = resourceVNF.getHomingSolution();
182 String resourceARHomingString = resourceARHoming.toString();
183 resourceARHomingString = resourceARHomingString.replaceAll("\\s+", " ");
184 String resourceARHoming2String = resourceARHoming2.toString();
185 resourceARHoming2String = resourceARHoming2String.replaceAll("\\s+", " ");
186 String resourceVNFHomingString = resourceVNFHoming.toString();
187 resourceVNFHomingString = resourceVNFHomingString.replaceAll("\\s+", " ");
188 expectedOofRequest = expectedOofRequest.replaceAll("\\s+", "");
190 assertNull(workflowException);
191 assertEquals(homingSolutionService("service", "testSIID1", "MDTNJ01",
192 resourceARHoming.getVnf().getResourceId(),"aic", "dfwtx",
193 "\"f1d563e8-e714-4393-8f99-cc480144a05e\", \"j1d563e8-e714-4393-8f99-cc480144a05e\"",
194 "\"s1d563e8-e714-4393-8f99-cc480144a05e\", \"b1d563e8-e714-4393-8f99-cc480144a05e\""),
195 resourceARHomingString);
196 assertEquals(homingSolutionService("service", "testSIID2", "testVnfHostname2",
197 resourceARHoming2.getVnf().getResourceId(),"aic", "testCloudRegionId2",
198 null, null), resourceARHoming2String);
199 assertEquals(homingSolutionCloud("cloud","aic", "testCloudRegionId3",
200 true, "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
201 "\"31d563e8-e714-4393-8f99-cc480144a05e\", \"71d563e8-e714-4393-8f99-cc480144a05e\""),
202 resourceVNFHomingString);
203 assertEquals(verifyOofRequest(), expectedOofRequest);
207 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
208 public void testHoming_success_2AR1Vnf2Net() throws Exception {
212 String businessKey = UUID.randomUUID().toString();
213 Map<String, Object> variables = new HashMap<>();
214 setVariables2(variables);
216 invokeSubProcess("Homing", businessKey, variables);
218 injectWorkflowMessages(callbacks, "oof3");
220 waitForProcessEnd(businessKey, 10000);
223 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
224 "WorkflowException");
225 ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey,
226 "serviceDecomposition");
227 String expectedOofRequest = (String) getVariableFromHistory(businessKey, "oofRequest");
229 Resource resourceAR = serviceDecompositionExp.getServiceResource("testResourceIdAR");
230 HomingSolution resourceARHoming = resourceAR.getHomingSolution();
231 Resource resourceAR2 = serviceDecompositionExp.getServiceResource("testResourceIdAR2");
232 HomingSolution resourceARHoming2 = resourceAR2.getHomingSolution();
233 Resource resourceVNF = serviceDecompositionExp.getServiceResource("testResourceIdVNF");
234 HomingSolution resourceVNFHoming = resourceVNF.getHomingSolution();
235 Resource resourceNet = serviceDecompositionExp.getServiceResource("testResourceIdNet");
236 HomingSolution resourceNetHoming = resourceNet.getHomingSolution();
237 Resource resourceNet2 = serviceDecompositionExp.getServiceResource("testResourceIdNet2");
238 HomingSolution resourceNetHoming2 = resourceNet2.getHomingSolution();
240 String resourceARHomingString = resourceARHoming.toString();
241 resourceARHomingString = resourceARHomingString.replaceAll("\\s+", " ");
242 String resourceARHoming2String = resourceARHoming2.toString();
243 resourceARHoming2String = resourceARHoming2String.replaceAll("\\s+", " ");
244 String resourceVNFHomingString = resourceVNFHoming.toString();
245 resourceVNFHomingString = resourceVNFHomingString.replaceAll("\\s+", " ");
246 String resourceNetHomingString = resourceNetHoming.toString();
247 resourceNetHomingString = resourceNetHomingString.replaceAll("\\s+", " ");
248 String resourceNetHoming2String = resourceNetHoming2.toString();
249 resourceNetHoming2String = resourceNetHoming2String.replaceAll("\\s+", " ");
250 expectedOofRequest = expectedOofRequest.replaceAll("\\s+", "");
253 assertNull(workflowException);
254 assertEquals(homingSolutionService("service", "testSIID1", "MDTNJ01",
255 resourceARHoming.getVnf().getResourceId(),"aic", "dfwtx",
256 "\"f1d563e8-e714-4393-8f99-cc480144a05e\", \"j1d563e8-e714-4393-8f99-cc480144a05e\"",
257 "\"s1d563e8-e714-4393-8f99-cc480144a05e\", \"b1d563e8-e714-4393-8f99-cc480144a05e\""),
258 resourceARHomingString);
259 assertEquals(homingSolutionService("service", "testSIID2", "testVnfHostname2",
260 resourceARHoming2.getVnf().getResourceId(),
261 "aic", "testCloudRegionId2",
262 null, null), resourceARHoming2String);
263 assertEquals(homingSolutionCloud("cloud","aic",
264 "testCloudRegionId3",
265 true, "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
266 "\"31d563e8-e714-4393-8f99-cc480144a05e\", \"71d563e8-e714-4393-8f99-cc480144a05e\""),
267 resourceVNFHomingString);
268 assertEquals(homingSolutionService("service", "testServiceInstanceIdNet",
269 "testVnfHostNameNet", resourceNetHoming.getVnf().getResourceId(),"aic",
270 "testCloudRegionIdNet",
271 null, null), resourceNetHomingString);
272 assertEquals(homingSolutionCloud("cloud", "aic",
273 "testCloudRegionIdNet2",
274 false, "\"f1d563e8-e714-4393-8f99-cc480144a05n\", \"j1d563e8-e714-4393-8f99-cc480144a05n\"",
275 "\"s1d563e8-e714-4393-8f99-cc480144a05n\", \"b1d563e8-e714-4393-8f99-cc480144a05n\""),
276 resourceNetHoming2String);
277 assertEquals(verifyOofRequest(), expectedOofRequest);
283 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/BuildingBlock/DecomposeService.bpmn",
284 "subprocess/ReceiveWorkflowMessage.bpmn"})
285 public void testHoming_success_vnfResourceList() throws Exception {
287 // Create a Service Decomposition
288 MockGetServiceResourcesCatalogDataByModelUuid("2f7f309d-c842-4644-a2e4-34167be5eeb4",
289 "/BuildingBlocks/oofCatalogResp.json");
290 String busKey = UUID.randomUUID().toString();
291 Map<String, Object> vars = new HashMap<>();
292 setVariablesForServiceDecomposition(vars, "testRequestId123",
293 "ff5256d2-5a33-55df-13ab-12abad84e7ff");
294 invokeSubProcess("DecomposeService", busKey, vars);
296 ServiceDecomposition sd = (ServiceDecomposition) getVariableFromHistory(busKey,
297 "serviceDecomposition");
298 System.out.println("In testHoming_success_vnfResourceList, ServiceDecomposition = " + sd);
299 List<VnfResource> vnfResourceList = sd.getServiceVnfs();
300 //System.out.println(" vnfResourceList = " + vnfResourceList);
301 vnfResourceList.get(0).setResourceId("test-resource-id-000");
307 String businessKey = UUID.randomUUID().toString();
308 Map<String, Object> variables = new HashMap<>();
309 variables.put("homingService", "oof");
310 variables.put("isDebugLogEnabled", "true");
311 variables.put("msoRequestId", "testRequestId");
312 variables.put("serviceInstanceId", "testServiceInstanceId");
313 variables.put("serviceDecomposition", sd);
314 variables.put("subscriberInfo", subscriber2);
315 HashMap customerLocation = new HashMap<String, Object>();
316 customerLocation.put("customerLatitude", "32.89748");
317 customerLocation.put("customerLongitude", "-97.040443");
318 customerLocation.put("customerName", "xyz");
319 variables.put("customerLatitude", "32.89748");
320 variables.put("customerLongitude", "-97.040443");
321 variables.put("customerName", "xyz");
322 variables.put("customerLocation", customerLocation);
323 variables.put("cloudOwner", "amazon");
324 variables.put("cloudRegionId", "TNZED");
326 invokeSubProcess("Homing", businessKey, variables);
327 injectWorkflowMessages(callbacks, "oof3");
328 waitForProcessEnd(businessKey, 10000);
332 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
333 "WorkflowException");
334 ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey,
335 "serviceDecomposition");
336 System.out.println("serviceDecompositionExp is: " + serviceDecompositionExp);
338 Resource resourceVnf = serviceDecompositionExp.getServiceResource("test-resource-id-000");
339 System.out.println("resourceVnf is: " + resourceVnf);
340 HomingSolution resourceVnfHoming = resourceVnf.getHomingSolution();
342 String resourceVnfHomingString = resourceVnfHoming.toString();
343 System.out.println("resourceVnfHomingString is: " + resourceVnfHomingString);
344 resourceVnfHomingString = resourceVnfHomingString.replaceAll("\\s+", " ");
345 System.out.println("Now resourceVnfHomingString is: " + resourceVnfHomingString);
347 assertNull(workflowException);
350 String oofRequest = (String) getVariableFromHistory(businessKey, "oofRequest");
351 System.out.println("oofRequest is: " + oofRequest);
352 assertEquals(FileUtil.readResourceFile("__files/BuildingBlocks/oofRequest_infravnf").
353 replaceAll("\n", "").replaceAll("\r", "").
354 replaceAll("\t", ""), oofRequest.replaceAll("\n", "").
355 replaceAll("\r", "").replaceAll("\t", ""));
357 //System.out.println("resourceVnfHoming.getVnf().getResourceId() is: " + resourceVnfHoming.getVnf().getResourceId());
359 assertEquals(homingSolutionService("service", "service-instance-01234",
360 "MDTNJ01", "test-resource-id-000","att-aic",
362 "\"f1d563e8-e714-4393-8f99-cc480144a05e\"," +
363 " \"j1d563e8-e714-4393-8f99-cc480144a05e\"",
364 "\"s1d563e8-e714-4393-8f99-cc480144a05e\"," +
365 " \"b1d563e8-e714-4393-8f99-cc480144a05e\""), resourceVnfHomingString);
369 @Ignore // 1802 merge
370 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
371 public void testHoming_success_existingLicense() throws Exception {
375 String businessKey = UUID.randomUUID().toString();
376 Map<String, Object> variables = new HashMap<String, Object>();
377 setVariablesExistingLicense(variables);
379 invokeSubProcess("Homing", businessKey, variables);
381 injectWorkflowMessages(callbacks, "sniro");
383 waitForProcessEnd(businessKey, 10000);
386 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
387 ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey, "serviceDecomposition");
388 String oofRequest = (String) getVariableFromHistory(businessKey, "sniroRequest");
390 Resource resourceAR = serviceDecompositionExp.getServiceResource("testResourceIdAR");
391 HomingSolution resourceARHoming = (HomingSolution) resourceAR.getHomingSolution();
392 Resource resourceAR2 = serviceDecompositionExp.getServiceResource("testResourceIdAR2");
393 HomingSolution resourceARHoming2 = (HomingSolution) resourceAR2.getHomingSolution();
394 Resource resourceVNF = serviceDecompositionExp.getServiceResource("testResourceIdVNF");
395 HomingSolution resourceVNFHoming = (HomingSolution) resourceVNF.getHomingSolution();
396 String resourceARHomingString = resourceARHoming.toString();
397 resourceARHomingString = resourceARHomingString.replaceAll("\\s+", " ");
398 String resourceARHoming2String = resourceARHoming2.toString();
399 resourceARHoming2String = resourceARHoming2String.replaceAll("\\s+", " ");
400 String resourceVNFHomingString = resourceVNFHoming.toString();
401 resourceVNFHomingString = resourceVNFHomingString.replaceAll("\\s+", " ");
402 oofRequest = oofRequest.replaceAll("\\s+", "");
404 assertNull(workflowException);
405 assertEquals(homingSolutionService("service", "testSIID1", "MDTNJ01",
406 "aic", "dfwtx", "KDTNJ01",
407 "\"f1d563e8-e714-4393-8f99-cc480144a05e\", \"j1d563e8-e714-4393-8f99-cc480144a05e\"",
408 "\"s1d563e8-e714-4393-8f99-cc480144a05e\", \"b1d563e8-e714-4393-8f99-cc480144a05e\""),
409 resourceARHomingString);
410 assertEquals(homingSolutionService("service", "testSIID2", "testVnfHostname2",
411 resourceARHoming2.getVnf().getResourceId(),"aic", "testCloudRegionId2",
412 null, null), resourceARHoming2String);
413 assertEquals(homingSolutionCloud("cloud", "aic",
414 "testCloudRegionId3",
415 false, "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
416 "\"31d563e8-e714-4393-8f99-cc480144a05e\", \"71d563e8-e714-4393-8f99-cc480144a05e\""),
417 resourceVNFHomingString);
418 assertEquals(verifyOofRequestExistingLicense(), oofRequest);
423 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
424 public void testHoming_error_inputVariable() throws Exception {
426 String businessKey = UUID.randomUUID().toString();
427 Map<String, Object> variables = new HashMap<>();
428 setVariables3(variables);
430 invokeSubProcess("Homing", businessKey, variables);
432 waitForProcessEnd(businessKey, 10000);
435 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
436 "WorkflowException");
438 assertEquals("WorkflowException[processKey=Homing,errorCode=4000,errorMessage=A required " +
439 "input variable is missing or null]", workflowException.toString());
443 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
444 public void testHoming_error_badResponse() throws Exception {
447 String businessKey = UUID.randomUUID().toString();
448 Map<String, Object> variables = new HashMap<>();
449 setVariables(variables);
451 invokeSubProcess("Homing", businessKey, variables);
453 waitForProcessEnd(businessKey, 10000);
456 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
457 "WorkflowException");
459 assertEquals("WorkflowException[processKey=Homing,errorCode=500,errorMessage=Received a " +
460 "Bad Sync Response from Sniro/OOF.]", workflowException.toString());
464 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
465 public void testHoming_error_oofNoSolution() throws Exception {
468 String businessKey = UUID.randomUUID().toString();
469 Map<String, Object> variables = new HashMap<>();
470 setVariables(variables);
472 invokeSubProcess("Homing", businessKey, variables);
474 injectWorkflowMessages(callbacks, "oofNoSol");
476 waitForProcessEnd(businessKey, 10000);
479 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
480 "WorkflowException");
482 assertEquals("WorkflowException[processKey=Homing,errorCode=400,errorMessage=No solution found " +
483 "for plan 08e1b8cf-144a-4bac-b293-d5e2eedc97e8]", workflowException.toString());
487 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
488 public void testHoming_error_oofPolicyException() throws Exception {
491 String businessKey = UUID.randomUUID().toString();
492 Map<String, Object> variables = new HashMap<>();
493 setVariables(variables);
495 invokeSubProcess("Homing", businessKey, variables);
497 injectWorkflowMessages(callbacks, "oofPolicyEx");
499 waitForProcessEnd(businessKey, 10000);
502 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
503 "WorkflowException");
505 assertEquals("WorkflowException[processKey=Homing,errorCode=400,errorMessage=OOF Async Callback " +
506 "Response contains a Request Error Policy Exception: Message content size exceeds the allowable " +
507 "limit]", workflowException.toString());
511 @Deployment(resources = {"subprocess/BuildingBlock/Homing.bpmn", "subprocess/ReceiveWorkflowMessage.bpmn"})
512 public void testHoming_error_oofServiceException() throws Exception {
515 String businessKey = UUID.randomUUID().toString();
516 Map<String, Object> variables = new HashMap<>();
517 setVariables(variables);
519 invokeSubProcess("Homing", businessKey, variables);
521 injectWorkflowMessages(callbacks, "oofServiceEx");
523 waitForProcessEnd(businessKey, 10000);
526 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
527 "WorkflowException");
529 assertEquals("WorkflowException[processKey=Homing,errorCode=400,errorMessage=OOF Async Callback " +
530 "Response contains a Request Error Service Exception: OOF PlacementError: " +
531 "requests.exceptions.HTTPError: 404 Client Error: Not Found for " +
532 "url: http://135.21.171.200:8091/v1/plans/97b4e303-5f75-492c-8fb2-21098281c8b8]",
533 workflowException.toString());
537 private void setVariables(Map<String, Object> variables) {
538 variables.put("homingService", "oof");
539 HashMap customerLocation = new HashMap<String, Object>();
540 customerLocation.put("customerLatitude", "32.89748");
541 customerLocation.put("customerLongitude", "-97.040443");
542 customerLocation.put("customerName", "xyz");
543 variables.put("customerLatitude", "32.89748");
544 variables.put("customerLongitude", "-97.040443");
545 variables.put("customerName", "xyz");
546 variables.put("customerLocation", customerLocation);
547 variables.put("cloudOwner", "amazon");
548 variables.put("cloudRegionId", "TNZED");
549 variables.put("isDebugLogEnabled", "true");
550 // variables.put("mso-request-id", "testRequestId");
551 variables.put("msoRequestId", "testRequestId");
552 variables.put("serviceInstanceId", "testServiceInstanceId");
553 variables.put("serviceDecomposition", serviceDecomposition);
554 variables.put("subscriberInfo", subscriber2);
557 private void setVariables2(Map<String, Object> variables) {
558 List<NetworkResource> netList = new ArrayList<NetworkResource>();
559 NetworkResource net = new NetworkResource();
560 net.setResourceId("testResourceIdNet");
561 ModelInfo netModel = new ModelInfo();
562 netModel.setModelCustomizationUuid("testModelCustomizationUuidNet");
563 netModel.setModelInvariantUuid("testModelInvariantIdNet");
564 netModel.setModelName("testModelNameNet");
565 netModel.setModelVersion("testModelVersionNet");
566 net.setModelInfo(netModel);
568 NetworkResource net2 = new NetworkResource();
569 net2.setResourceId("testResourceIdNet2");
570 ModelInfo netModel2 = new ModelInfo();
571 netModel2.setModelCustomizationUuid("testModelCustomizationUuidNet2");
572 netModel2.setModelCustomizationName("testModelCustomizationNameNet2");
573 netModel2.setModelInvariantUuid("testModelInvariantIdNet2");
574 netModel2.setModelName("testModelNameNet2");
575 netModel2.setModelVersion("testModelVersionNet2");
576 net2.setModelInfo(netModel2);
578 serviceDecomposition.setServiceNetworks(netList);
580 variables.put("homingService", "oof");
581 HashMap customerLocation = new HashMap<String, Object>();
582 customerLocation.put("customerLatitude", "32.89748");
583 customerLocation.put("customerLongitude", "-97.040443");
584 customerLocation.put("customerName", "xyz");
585 variables.put("customerLatitude", "32.89748");
586 variables.put("customerLongitude", "-97.040443");
587 variables.put("customerName", "xyz");
588 variables.put("customerLocation", customerLocation);
589 variables.put("cloudOwner", "amazon");
590 variables.put("cloudRegionId", "TNZED");
591 variables.put("isDebugLogEnabled", "true");
592 variables.put("msoRequestId", "testRequestId");
593 variables.put("serviceInstanceId", "testServiceInstanceId");
594 variables.put("serviceDecomposition", serviceDecomposition);
595 variables.put("subscriberInfo", subscriber2);
598 private void setVariables3(Map<String, Object> variables) {
599 variables.put("homingService", "oof");
600 HashMap customerLocation = new HashMap<String, Object>();
601 customerLocation.put("customerLatitude", "32.89748");
602 customerLocation.put("customerLongitude", "-97.040443");
603 customerLocation.put("customerName", "xyz");
604 variables.put("customerLatitude", "32.89748");
605 variables.put("customerLongitude", "-97.040443");
606 variables.put("customerName", "xyz");
607 variables.put("customerLocation", customerLocation);
608 variables.put("cloudOwner", "amazon");
609 variables.put("cloudRegionId", "TNZED");
610 variables.put("isDebugLogEnabled", "true");
611 // variables.put("mso-request-id", "testRequestId");
612 variables.put("msoRequestId", "testRequestId");
613 variables.put("serviceInstanceId", "testServiceInstanceId");
614 variables.put("serviceDecomposition", null);
615 variables.put("subscriberInfo", subscriber2);
618 private void setVariablesExistingLicense(Map<String, Object> variables) {
619 HomingSolution currentHomingSolution = new HomingSolution();
620 serviceDecomposition.getServiceVnfs().get(0).setCurrentHomingSolution(currentHomingSolution);
621 serviceDecomposition.getServiceVnfs().get(0).getCurrentHomingSolution().getLicense().addEntitlementPool("testEntitlementPoolId1");
622 serviceDecomposition.getServiceVnfs().get(0).getCurrentHomingSolution().getLicense().addEntitlementPool("testEntitlementPoolId2");
624 serviceDecomposition.getServiceVnfs().get(0).getCurrentHomingSolution().getLicense().addLicenseKeyGroup("testLicenseKeyGroupId1");
625 serviceDecomposition.getServiceVnfs().get(0).getCurrentHomingSolution().getLicense().addLicenseKeyGroup("testLicenseKeyGroupId2");
627 variables.put("isDebugLogEnabled", "true");
628 variables.put("msoRequestId", "testRequestId");
629 variables.put("serviceInstanceId", "testServiceInstanceId");
630 variables.put("serviceDecomposition", serviceDecomposition);
631 variables.put("subscriberInfo", subscriber2);
635 private String homingSolutionService(String type, String serviceInstanceId, String vnfHostname,
636 String vnfResourceId, String cloudOwner,
637 String cloudRegionId, String enList,
640 String solution = "";
642 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"serviceInstanceId\" : \"" +
643 serviceInstanceId + "\", \"cloudOwner\" : \"" + cloudOwner + "\", \"cloudRegionId\" : \"" +
644 cloudRegionId + "\", " + "\"vnf\" : { \"resourceId\" : \"" + vnfResourceId +
645 "\", \"resourceType\" : \"VNF\", \"resourceInstance\" : { }, \"homingSolution\" : { \"license\" :" +
646 " { }, \"rehome\" : false }, \"vnfHostname\" : \"" + vnfHostname + "\" }, \"license\" : { }," +
647 " \"rehome\" : false } }";
650 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"serviceInstanceId\" : \"" +
651 serviceInstanceId + "\", \"cloudOwner\" : \"" + cloudOwner + "\", \"cloudRegionId\" : \"" +
652 cloudRegionId + "\", \"vnf\" : { \"resourceId\" : \"" + vnfResourceId + "\", \"resourceType\" :" +
653 " \"VNF\", \"resourceInstance\" : { }, \"homingSolution\" : { \"license\" : { }, \"rehome\" :" +
654 " false }, \"vnfHostname\" : \"" + vnfHostname + "\" }, \"license\" : { \"entitlementPoolList\" :" +
655 " [ " + enList + " ], \"licenseKeyGroupList\" : [ " + licenseList + " ] }, \"rehome\" : false } }";
660 private String homingSolutionCloud(String type, String cloudOwner,
661 String cloudRegionId, Boolean flavors, String enList,
663 String solution = "";
665 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
666 cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
667 "\", \"license\" : { }, \"rehome\" : false } }";
668 } else if (flavors && enList == null){
669 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
670 cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
671 "\", \"flavors\" : [ { \"flavorLabel\" : \"flavorLabel2xxx\", \"flavor\" : \"vimFlavorxxx\" }, " +
672 "{ \"flavorLabel\" : \"flavorLabel1xxx\", \"flavor\" : \"vimFlavorxxx\" } ], " +
673 "\"license\" : { }, \"rehome\" : false } }";
674 } else if (flavors) {
675 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
676 cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
677 "\", \"flavors\" : [ { \"flavorLabel\" : \"flavorLabel2xxx\", \"flavor\" : \"vimFlavorxxx\" }, " +
678 "{ \"flavorLabel\" : \"flavorLabel1xxx\", \"flavor\" : \"vimFlavorxxx\" } ], " +
679 "\"license\" : { \"entitlementPoolList\" : [ " + enList + " ], \"licenseKeyGroupList\" : [ " +
680 licenseList + " ] }, \"rehome\" : false } }";
682 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
683 cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
684 "\", \"license\" : { \"entitlementPoolList\" : [ " + enList + " ], \"licenseKeyGroupList\" : [ " +
685 licenseList + " ] }, \"rehome\" : false } }";
690 private void setVariablesForServiceDecomposition(Map<String, Object> variables, String requestId, String siId) {
691 variables.put("homingService", "oof");
692 variables.put("isDebugLogEnabled", "true");
693 variables.put("mso-request-id", requestId);
694 variables.put("msoRequestId", requestId);
695 variables.put("serviceInstanceId", siId);
696 HashMap customerLocation = new HashMap<String, Object>();
697 customerLocation.put("customerLatitude", "32.89748");
698 customerLocation.put("customerLongitude", "-97.040443");
699 customerLocation.put("customerName", "xyz");
700 variables.put("customerLatitude", "32.89748");
701 variables.put("customerLongitude", "-97.040443");
702 variables.put("customerName", "xyz");
703 variables.put("customerLocation", customerLocation);
704 variables.put("cloudOwner", "amazon");
705 variables.put("cloudRegionId", "TNZED");
708 String serviceModelInfo = "{\"modelInvariantId\":\"1cc4e2e4-eb6e-404d-a66f-c8733cedcce8\",\"modelUuid\":" +
709 "\"2f7f309d-c842-4644-a2e4-34167be5eeb4\",\"modelName\":\"vCPE Service\",\"modelVersion\":\"2.0\",}";
710 variables.put("serviceModelInfo", serviceModelInfo);
713 private String verifyOofRequest() {
714 String request = "{\"requestInfo\":{\"transactionId\":\"testRequestId\",\"requestId\":\"testRequestId\"," +
715 "\"callbackUrl\":\"http://localhost:28090/workflows/messages/message/oofResponse/testRequestId\"," +
716 "\"sourceId\":\"so\",\"requestType\":\"create\",\"numSolutions\":1,\"optimizers\":[\"placement\"]," +
717 "\"timeout\":600},\"placementInfo\":{\"requestParameters\":{\"customerLatitude\":" +
718 "\"32.89748\",\"customerLongitude\":\"-97.040443\",\"customerName\":\"xyz\"},\"subscriberInfo\":" +
719 "{\"globalSubscriberId\":\"SUB12_0322_DS_1201\",\"subscriberName\":\"SUB_12_0322_DS_1201\"," +
720 "\"subscriberCommonSiteId\":\"\"},\"placementDemands\":[{\"resourceModuleName\":\"ALLOTTED_RESOURCE\"" +
721 ",\"serviceResourceId\":\"testResourceIdAR\",\"tenantId\":" +
722 "\"null\",\"resourceModelInfo\":{\"modelInvariantId\":\"testModelInvariantIdAR\"," +
723 "\"modelVersionId\":\"testARModelUuid\",\"modelName\":\"testModelNameAR\",\"modelType\":" +
724 "\"testModelTypeAR\",\"modelVersion\":\"testModelVersionAR\",\"modelCustomizationName\":\"\"}}," +
725 "{\"resourceModuleName\":\"ALLOTTED_RESOURCE\",\"serviceResourceId\":\"testResourceIdAR2\"," +
726 "\"tenantId\":\"null\",\"resourceModelInfo\":{\"modelInvariantId\":\"testModelInvariantIdAR2\"," +
727 "\"modelVersionId\":\"testAr2ModelUuid\",\"modelName\":\"testModelNameAR2\"," +
728 "\"modelType\":\"testModelTypeAR2\",\"modelVersion\":\"testModelVersionAR2\"," +
729 "\"modelCustomizationName\":\"\"}}]},\"serviceInfo\":" +
730 "{\"serviceInstanceId\":\"testServiceInstanceId123\"," +
731 "\"serviceName\":\"null\",\"modelInfo\":{\"modelType\":\"\",\"modelInvariantId\":" +
732 "\"testModelInvariantId\",\"modelVersionId\":\"testModelUuid\",\"modelName\":\"testModelName\"," +
733 "\"modelVersion\":\"testModelVersion\",\"modelCustomizationName\":\"" +
738 private String verifyOofRequestExistingLicense(){
739 String request = "{\"requestInfo\":{\"transactionId\":\"testRequestId\",\"requestId\":\"testRequestId\"," +
740 "\"callbackUrl\":\"http://localhost:28090/workflows/messages/message/SNIROResponse/testRequestId\"," +
741 "\"sourceId\":\"mso\",\"requestType\":\"speedchanged\",\"optimizer\":[\"placement\",\"license\"]," +
742 "\"numSolutions\":1,\"timeout\":1800},\"placementInfo\":{\"serviceModelInfo\":{\"modelType\":\"\"," +
743 "\"modelInvariantId\":\"testModelInvariantId\",\"modelVersionId\":\"testModelUuid\",\"modelName\":" +
744 "\"testModelName\",\"modelVersion\":\"testModelVersion\"},\"subscriberInfo\":" +
745 "{\"globalSubscriberId\":\"SUB12_0322_DS_1201\",\"subscriberName\":\"SUB_12_0322_DS_1201\"," +
746 "\"subscriberCommonSiteId\":\"\"},\"demandInfo\":{\"placementDemand\":[{\"resourceInstanceType\":" +
747 "\"ALLOTTED_RESOURCE\",\"serviceResourceId\":\"testResourceIdAR\",\"resourceModuleName\":\"\"," +
748 "\"resourceModelInfo\":{\"modelCustomizationId\":\"testModelCustomizationUuidAR\"," +
749 "\"modelInvariantId\":\"testModelInvariantIdAR\",\"modelName\":\"testModelNameAR\"," +
750 "\"modelVersion\":\"testModelVersionAR\",\"modelVersionId\":\"testARModelUuid\",\"modelType\":" +
751 "\"testModelTypeAR\"},\"tenantId\":\"\",\"tenantName\":\"\"},{\"resourceInstanceType\":" +
752 "\"ALLOTTED_RESOURCE\",\"serviceResourceId\":\"testResourceIdAR2\",\"resourceModuleName\":" +
753 "\"\",\"resourceModelInfo\":{\"modelCustomizationId\":\"testModelCustomizationUuidAR2\"," +
754 "\"modelInvariantId\":\"testModelInvariantIdAR2\",\"modelName\":\"testModelNameAR2\"," +
755 "\"modelVersion\":\"testModelVersionAR2\",\"modelVersionId\":\"testAr2ModelUuid\"," +
756 "\"modelType\":\"testModelTypeAR2\"},\"tenantId\":\"\",\"tenantName\":\"\"}],\"licenseDemand\":" +
757 "[{\"resourceInstanceType\":\"VNF\",\"serviceResourceId\":\"testResourceIdVNF\"," +
758 "\"resourceModuleName\":\"\",\"resourceModelInfo\":{\"modelCustomizationId\":" +
759 "\"testModelCustomizationUuidVNF\",\"modelInvariantId\":\"testModelInvariantIdVNF\"," +
760 "\"modelName\":\"testModelNameVNF\",\"modelVersion\":\"testModelVersionVNF\"," +
761 "\"modelVersionId\":\"testVnfModelUuid\",\"modelType\":\"testModelTypeVNF\"}," +
762 "\"existingLicense\":[{\"entitlementPoolUUID\":[\"testEntitlementPoolId1\"," +
763 "\"testEntitlementPoolId2\"],\"licenseKeyGroupUUID\":[\"testLicenseKeyGroupId1\"," +
764 "\"testLicenseKeyGroupId2\"]}]}]},\"policyId\":[],\"serviceInstanceId\":" +
765 "\"testServiceInstanceId123\",\"orderInfo\":\"{\\\"requestParameters\\\":null}\"}}";