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=========================================================
21 package org.onap.so.bpmn.common;
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;
29 import java.io.IOException;
30 import java.util.ArrayList;
31 import java.util.HashMap;
32 import java.util.List;
34 import java.util.UUID;
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;
53 * Test the OOF Homing subflow building block.
56 public class OofHomingIT extends BaseIntegrationTest {
58 ServiceDecomposition serviceDecomposition = new ServiceDecomposition();
59 String subscriber = "";
60 String subscriber2 = "";
62 private final CallbackSet callbacks = new CallbackSet();
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");
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");
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);
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");
92 ServiceInstance si = new ServiceInstance();
93 si.setInstanceId("testServiceInstanceId123");
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);
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);
140 System.out.println("SERVICE DECOMP: " + serviceDecomposition.getServiceResourcesJsonString());
141 serviceDecomposition.setModelInfo(sModel);
142 serviceDecomposition.setAllottedResources(arList);
143 serviceDecomposition.setVnfResources(vnfList);
144 serviceDecomposition.setServiceInstance(si);
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\"}";
152 public void testHoming_success_2AR1Vnf() throws Exception {
156 String businessKey = UUID.randomUUID().toString();
157 Map<String, Object> variables = new HashMap<>();
158 setVariables(variables);
160 invokeSubProcess("Homing", businessKey, variables);
162 injectWorkflowMessages(callbacks, "oof2");
164 waitForProcessEnd(businessKey, 10000);
167 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
168 "WorkflowException");
169 ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey,
170 "serviceDecomposition");
171 String expectedOofRequest = (String) getVariableFromHistory(businessKey, "oofRequest");
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+", "");
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);
204 public void testHoming_success_2AR1Vnf2Net() throws Exception {
208 String businessKey = UUID.randomUUID().toString();
209 Map<String, Object> variables = new HashMap<>();
210 setVariables2(variables);
212 invokeSubProcess("Homing", businessKey, variables);
214 injectWorkflowMessages(callbacks, "oof3");
216 waitForProcessEnd(businessKey, 10000);
219 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
220 "WorkflowException");
221 ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey,
222 "serviceDecomposition");
223 String expectedOofRequest = (String) getVariableFromHistory(businessKey, "oofRequest");
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();
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+", "");
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);
278 public void testHoming_success_vnfResourceList() throws Exception {
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);
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");
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");
317 invokeSubProcess("Homing", businessKey, variables);
318 injectWorkflowMessages(callbacks, "oof3");
319 waitForProcessEnd(businessKey, 10000);
323 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
324 "WorkflowException");
325 ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey,
326 "serviceDecomposition");
327 System.out.println("serviceDecompositionExp is: " + serviceDecompositionExp);
329 Resource resourceVnf = serviceDecompositionExp.getServiceResource("test-resource-id-000");
330 System.out.println("resourceVnf is: " + resourceVnf);
331 HomingSolution resourceVnfHoming = resourceVnf.getHomingSolution();
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);
338 assertNull(workflowException);
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", ""));
348 //System.out.println("resourceVnfHoming.getVnf().getResourceId() is: " + resourceVnfHoming.getVnf().getResourceId());
350 assertEquals(homingSolutionService("service", "service-instance-01234",
351 "MDTNJ01", "test-resource-id-000","att-aic",
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);
360 public void testHoming_success_existingLicense() throws Exception {
364 String businessKey = UUID.randomUUID().toString();
365 Map<String, Object> variables = new HashMap<String, Object>();
366 setVariablesExistingLicense(variables);
368 invokeSubProcess("Homing", businessKey, variables);
370 injectWorkflowMessages(callbacks, "sniro");
372 waitForProcessEnd(businessKey, 10000);
375 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
376 ServiceDecomposition serviceDecompositionExp = (ServiceDecomposition) getVariableFromHistory(businessKey, "serviceDecomposition");
377 String oofRequest = (String) getVariableFromHistory(businessKey, "sniroRequest");
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+", "");
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);
412 public void testHoming_error_inputVariable() throws Exception {
414 String businessKey = UUID.randomUUID().toString();
415 Map<String, Object> variables = new HashMap<>();
416 setVariables3(variables);
418 invokeSubProcess("Homing", businessKey, variables);
420 waitForProcessEnd(businessKey, 10000);
423 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
424 "WorkflowException");
426 assertEquals("WorkflowException[processKey=Homing,errorCode=4000,errorMessage=A required " +
427 "input variable is missing or null,workStep=*]", workflowException.toString());
431 public void testHoming_error_badResponse() throws Exception {
434 String businessKey = UUID.randomUUID().toString();
435 Map<String, Object> variables = new HashMap<>();
436 setVariables(variables);
438 invokeSubProcess("Homing", businessKey, variables);
440 waitForProcessEnd(businessKey, 10000);
443 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
444 "WorkflowException");
446 assertEquals("WorkflowException[processKey=Homing,errorCode=401,errorMessage=Internal Error - BasicAuth value null,workStep=*]", workflowException.toString());
450 public void testHoming_error_oofNoSolution() throws Exception {
453 String businessKey = UUID.randomUUID().toString();
454 Map<String, Object> variables = new HashMap<>();
455 setVariables(variables);
457 invokeSubProcess("Homing", businessKey, variables);
459 injectWorkflowMessages(callbacks, "oofNoSol");
461 waitForProcessEnd(businessKey, 10000);
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:");
472 public void testHoming_error_oofPolicyException() throws Exception {
475 String businessKey = UUID.randomUUID().toString();
476 Map<String, Object> variables = new HashMap<>();
477 setVariables(variables);
479 invokeSubProcess("Homing", businessKey, variables);
481 injectWorkflowMessages(callbacks, "oofPolicyEx");
483 waitForProcessEnd(businessKey, 10000);
486 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
487 "WorkflowException");
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());
495 public void testHoming_error_oofServiceException() throws Exception {
498 String businessKey = UUID.randomUUID().toString();
499 Map<String, Object> variables = new HashMap<>();
500 setVariables(variables);
502 invokeSubProcess("Homing", businessKey, variables);
503 injectWorkflowMessages(callbacks, "oofServiceEx");
504 waitForProcessEnd(businessKey, 10000);
507 WorkflowException workflowException = (WorkflowException) getVariableFromHistory(businessKey,
508 "WorkflowException");
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());
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);
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);
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);
561 serviceDecomposition.setNetworkResources(netList);
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);
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);
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");
613 serviceDecomposition.getVnfResources().get(0).getCurrentHomingSolution().getLicense().addLicenseKeyGroup("testLicenseKeyGroupId1");
614 serviceDecomposition.getVnfResources().get(0).getCurrentHomingSolution().getLicense().addLicenseKeyGroup("testLicenseKeyGroupId2");
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);
624 private String homingSolutionService(String type, String serviceInstanceId, String vnfHostname,
625 String vnfResourceId, String cloudOwner,
626 String cloudRegionId, String enList,
629 String solution = "";
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 } }";
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 } }";
649 private String homingSolutionCloud(String type, String cloudOwner,
650 String cloudRegionId, Boolean flavors, String enList,
652 String solution = "";
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 } }";
671 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
672 cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
673 "\", \"license\" : { \"entitlementPoolList\" : [ " + enList + " ], \"licenseKeyGroupList\" : [ " +
674 licenseList + " ] }, \"rehome\" : false } }";
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");
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);
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\":\"" +
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}\"}}";