2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (c) 2019 Samsung
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.so.bpmn.common;
26 import org.junit.Ignore;
27 import org.junit.Test;
28 import org.onap.so.BaseIntegrationTest;
29 import org.onap.so.bpmn.core.WorkflowException;
30 import org.onap.so.bpmn.core.domain.AllottedResource;
31 import org.onap.so.bpmn.core.domain.HomingSolution;
32 import org.onap.so.bpmn.core.domain.ModelInfo;
33 import org.onap.so.bpmn.core.domain.NetworkResource;
34 import org.onap.so.bpmn.core.domain.Resource;
35 import org.onap.so.bpmn.core.domain.ServiceDecomposition;
36 import org.onap.so.bpmn.core.domain.ServiceInstance;
37 import org.onap.so.bpmn.core.domain.VnfResource;
38 import org.onap.so.bpmn.mock.FileUtil;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
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;
47 import static org.junit.Assert.assertEquals;
48 import static org.junit.Assert.assertNull;
49 import static org.onap.so.bpmn.mock.StubResponseDatabase.MockGetServiceResourcesCatalogDataByModelUuid;
50 import static org.onap.so.bpmn.mock.StubResponseOof.mockOof;
51 import static org.onap.so.bpmn.mock.StubResponseOof.mockOof_500;
55 * Test the OOF Homing subflow building block.
58 public class OofHomingTestIT extends BaseIntegrationTest {
60 Logger logger = LoggerFactory.getLogger(CreateAAIVfModuleIT.class);
62 ServiceDecomposition serviceDecomposition = new ServiceDecomposition();
63 String subscriber = "";
64 String subscriber2 = "";
66 private final CallbackSet callbacks = new CallbackSet();
68 public OofHomingTestIT() throws IOException {
69 String oofCallback = FileUtil.readResourceFile("__files/BuildingBlocks/oofCallbackInfraVnf");
70 String oofCallback2 = FileUtil.readResourceFile("__files/BuildingBlocks/oofCallback2AR1Vnf");
71 String oofCallback3 = FileUtil.readResourceFile("__files/BuildingBlocks/oofCallback2AR1Vnf2Net");
73 String oofCallbackNoSolution = FileUtil.readResourceFile("__files/BuildingBlocks/oofCallbackNoSolutionFound");
74 String oofCallbackPolicyException =
75 FileUtil.readResourceFile("__files/BuildingBlocks/oofCallbackPolicyException");
76 String oofCallbackServiceException =
77 FileUtil.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.setResourceInstanceName("testARInstanceName");
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.setResourceInstanceName("testAR2InstanceName");
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.setResourceInstanceName("testVnfInstanceName");
128 vnf.getHomingSolution().setOofDirectives("{ \n" + " \"directives\":[ \n" + " { \n"
129 + " \"vnfc_directives\":[ \n" + " { \n"
130 + " \"vnfc_id\":\"<ID of VNFC>\",\n" + " \"directives\":[ \n"
132 + " \"directive_name\":\"<Name of directive,example flavor_directive>\",\n"
133 + " \"attributes\":[ \n" + " { \n"
134 + " \"attribute_name\":\"<name of attribute, such as flavor label>\",\n"
135 + " \"attribute_value\":\"<value such as cloud specific flavor>\"\n"
136 + " }\n" + " ]\n" + " },\n"
138 + " \"directive_name\":\"<Name of directive,example vnic-info>\",\n"
139 + " \"attributes\":[ \n" + " { \n"
140 + " \"attribute_name\":\"<name of attribute, such as vnic-type>\",\n"
141 + " \"attribute_value\":\"<value such as direct/normal>\"\n"
143 + " \"attribute_name\":\"<name of attribute, such as provider netweork>\",\n"
144 + " \"attribute_value\":\"<value such as physnet>\"\n"
145 + " }\n" + " ]\n" + " }\n"
146 + " ]\n" + " }\n" + " ]\n" + " },\n" + " { \n"
147 + " \"vnf_directives\":{ \n" + " \"directives\":[ \n"
148 + " { \n" + " \"directive_name\":\"<Name of directive>\",\n"
149 + " \"attributes\":[ \n" + " { \n"
150 + " \"attribute_name\":\"<name of attribute>\",\n"
151 + " \"attribute_value\":\"<value>\"\n" + " }\n"
152 + " ]\n" + " },\n" + " { \n"
153 + " \"directive_name\":\"<Name of directive>\",\n"
154 + " \"attributes\":[ \n" + " { \n"
155 + " \"attribute_name\":\"<name of attribute>\",\n"
156 + " \"attribute_value\":\"<value >\"\n" + " },\n"
158 + " \"attribute_name\":\"<name of attribute>\",\n"
159 + " \"attribute_value\":\"<value >\"\n" + " }\n"
160 + " ]\n" + " }\n" + " ]\n" + " }\n"
161 + " }\n" + " ]\n" + " },\n" + " \"sdnc_directives\":{ \n" + " \"directives\":[ \n"
162 + " { \n" + " \"vnfc_directives\":[ \n" + " { \n"
163 + " \"vnfc_id\":\"<ID of VNFC>\",\n" + " \"directives\":[ \n"
165 + " \"directive_name\":\"<Name of directive,example flavor_directive>\",\n"
166 + " \"attributes\":[ \n" + " { \n"
167 + " \"attribute_name\":\"<name of attribute, such as flavor label>\",\n"
168 + " \"attribute_value\":\"<value such as cloud specific flavor>\"\n"
169 + " }\n" + " ]\n" + " },\n"
171 + " \"directive_name\":\"<Name of directive,example vnic-info>\",\n"
172 + " \"attributes\":[ \n" + " { \n"
173 + " \"attribute_name\":\"<name of attribute, such as vnic-type>\",\n"
174 + " \"attribute_value\":\"<value such as direct/normal>\"\n"
176 + " \"attribute_name\":\"<name of attribute, such as provider netweork>\",\n"
177 + " \"attribute_value\":\"<value such as physnet>\"\n"
178 + " }\n" + " ]\n" + " }\n"
179 + " ]\n" + " }\n" + " ]\n" + " },\n" + " { \n"
180 + " \"vnf_directives\":{ \n" + " \"directives\":[ \n"
181 + " { \n" + " \"directive_name\":\"<Name of directive>\",\n"
182 + " \"attributes\":[ \n" + " { \n"
183 + " \"attribute_name\":\"<name of attribute>\",\n"
184 + " \"attribute_value\":\"<value>\"\n" + " }\n"
185 + " ]\n" + " },\n" + " { \n"
186 + " \"directive_name\":\"<Name of directive>\",\n"
187 + " \"attributes\":[ \n" + " { \n"
188 + " \"attribute_name\":\"<name of attribute>\",\n"
189 + " \"attribute_value\":\"<value >\"\n" + " },\n"
191 + " \"attribute_name\":\"<name of attribute>\",\n"
192 + " \"attribute_value\":\"<value >\"\n" + " }\n"
193 + " ]\n" + " }\n" + " ]\n" + " }\n"
194 + " }\n" + " ]\n" + " }");
195 ModelInfo vnfModel = new ModelInfo();
196 vnfModel.setModelCustomizationUuid("testModelCustomizationUuidVNF");
197 vnfModel.setModelInvariantUuid("testModelInvariantIdVNF");
198 vnfModel.setModelName("testModelNameVNF");
199 vnfModel.setModelVersion("testModelVersionVNF");
200 vnfModel.setModelUuid("testVnfModelUuid");
201 vnfModel.setModelType("testModelTypeVNF");
202 vnf.setModelInfo(vnfModel);
204 logger.debug("SERVICE DECOMP: {}", serviceDecomposition.getServiceResourcesJsonString());
205 serviceDecomposition.setModelInfo(sModel);
206 serviceDecomposition.setAllottedResources(arList);
207 serviceDecomposition.setVnfResources(vnfList);
208 serviceDecomposition.setServiceInstance(si);
212 "{\"globalSubscriberId\": \"SUB12_0322_DS_1201\",\"subscriberCommonSiteId\": \"DALTX0101\",\"subscriberName\": \"SUB_12_0322_DS_1201\"}";
213 subscriber2 = "{\"globalSubscriberId\": \"SUB12_0322_DS_1201\",\"subscriberName\": \"SUB_12_0322_DS_1201\"}";
218 public void testHoming_success_2AR1Vnf() throws Exception {
220 mockOof(wireMockServer);
222 String businessKey = UUID.randomUUID().toString();
223 Map<String, Object> variables = new HashMap<>();
224 setVariables(variables);
226 invokeSubProcess("Homing", businessKey, variables);
228 injectWorkflowMessages(callbacks, "oof2");
230 waitForProcessEnd(businessKey, 10000);
233 WorkflowException workflowException =
234 (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
235 ServiceDecomposition serviceDecompositionExp =
236 (ServiceDecomposition) getVariableFromHistory(businessKey, "serviceDecomposition");
237 String expectedOofRequest = (String) getVariableFromHistory(businessKey, "oofRequest");
239 Resource resourceAR = serviceDecompositionExp.getServiceResource("testResourceIdAR");
240 HomingSolution resourceARHoming = resourceAR.getHomingSolution();
241 Resource resourceAR2 = serviceDecompositionExp.getServiceResource("testResourceIdAR2");
242 HomingSolution resourceARHoming2 = resourceAR2.getHomingSolution();
243 Resource resourceVNF = serviceDecompositionExp.getServiceResource("testResourceIdVNF");
244 HomingSolution resourceVNFHoming = resourceVNF.getHomingSolution();
245 String resourceARHomingString = resourceARHoming.toString();
246 resourceARHomingString = resourceARHomingString.replaceAll("\\s+", " ");
247 String resourceARHoming2String = resourceARHoming2.toString();
248 resourceARHoming2String = resourceARHoming2String.replaceAll("\\s+", " ");
249 String resourceVNFHomingString = resourceVNFHoming.toString();
250 resourceVNFHomingString = resourceVNFHomingString.replaceAll("\\s+", " ");
251 expectedOofRequest = expectedOofRequest.replaceAll("\\s+", "");
253 assertNull(workflowException);
254 assertEquals(homingSolutionService("service", "testSIID1", "MDTNJ01", resourceARHoming.getVnf().getResourceId(),
255 "aic", "dfwtx", "\"f1d563e8-e714-4393-8f99-cc480144a05e\", \"j1d563e8-e714-4393-8f99-cc480144a05e\"",
256 "\"s1d563e8-e714-4393-8f99-cc480144a05e\", \"b1d563e8-e714-4393-8f99-cc480144a05e\""),
257 resourceARHomingString);
259 homingSolutionService("service", "testSIID2", "testVnfHostname2",
260 resourceARHoming2.getVnf().getResourceId(), "aic", "testCloudRegionId2", null, null),
261 resourceARHoming2String);
263 homingSolutionCloud("cloud", "aic", "testCloudRegionId3", true,
264 "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
265 "\"31d563e8-e714-4393-8f99-cc480144a05e\", \"71d563e8-e714-4393-8f99-cc480144a05e\""),
266 resourceVNFHomingString);
267 assertEquals(verifyOofRequest(), expectedOofRequest);
272 public void testHoming_success_2AR1Vnf2Net() throws Exception {
274 mockOof(wireMockServer);
276 String businessKey = UUID.randomUUID().toString();
277 Map<String, Object> variables = new HashMap<>();
278 setVariables2(variables);
280 invokeSubProcess("Homing", businessKey, variables);
282 injectWorkflowMessages(callbacks, "oof3");
284 waitForProcessEnd(businessKey, 10000);
287 WorkflowException workflowException =
288 (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
289 ServiceDecomposition serviceDecompositionExp =
290 (ServiceDecomposition) getVariableFromHistory(businessKey, "serviceDecomposition");
291 String expectedOofRequest = (String) getVariableFromHistory(businessKey, "oofRequest");
293 Resource resourceAR = serviceDecompositionExp.getServiceResource("testResourceIdAR");
294 HomingSolution resourceARHoming = resourceAR.getHomingSolution();
295 Resource resourceAR2 = serviceDecompositionExp.getServiceResource("testResourceIdAR2");
296 HomingSolution resourceARHoming2 = resourceAR2.getHomingSolution();
297 Resource resourceVNF = serviceDecompositionExp.getServiceResource("testResourceIdVNF");
298 HomingSolution resourceVNFHoming = resourceVNF.getHomingSolution();
299 Resource resourceNet = serviceDecompositionExp.getServiceResource("testResourceIdNet");
300 HomingSolution resourceNetHoming = resourceNet.getHomingSolution();
301 Resource resourceNet2 = serviceDecompositionExp.getServiceResource("testResourceIdNet2");
302 HomingSolution resourceNetHoming2 = resourceNet2.getHomingSolution();
304 String resourceARHomingString = resourceARHoming.toString();
305 resourceARHomingString = resourceARHomingString.replaceAll("\\s+", " ");
306 String resourceARHoming2String = resourceARHoming2.toString();
307 resourceARHoming2String = resourceARHoming2String.replaceAll("\\s+", " ");
308 String resourceVNFHomingString = resourceVNFHoming.toString();
309 resourceVNFHomingString = resourceVNFHomingString.replaceAll("\\s+", " ");
310 String resourceNetHomingString = resourceNetHoming.toString();
311 resourceNetHomingString = resourceNetHomingString.replaceAll("\\s+", " ");
312 String resourceNetHoming2String = resourceNetHoming2.toString();
313 resourceNetHoming2String = resourceNetHoming2String.replaceAll("\\s+", " ");
314 expectedOofRequest = expectedOofRequest.replaceAll("\\s+", "");
317 assertNull(workflowException);
318 assertEquals(homingSolutionService("service", "testSIID1", "MDTNJ01", resourceARHoming.getVnf().getResourceId(),
319 "aic", "dfwtx", "\"f1d563e8-e714-4393-8f99-cc480144a05e\", \"j1d563e8-e714-4393-8f99-cc480144a05e\"",
320 "\"s1d563e8-e714-4393-8f99-cc480144a05e\", \"b1d563e8-e714-4393-8f99-cc480144a05e\""),
321 resourceARHomingString);
323 homingSolutionService("service", "testSIID2", "testVnfHostname2",
324 resourceARHoming2.getVnf().getResourceId(), "aic", "testCloudRegionId2", null, null),
325 resourceARHoming2String);
327 homingSolutionCloud("cloud", "aic", "testCloudRegionId3", true,
328 "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
329 "\"31d563e8-e714-4393-8f99-cc480144a05e\", \"71d563e8-e714-4393-8f99-cc480144a05e\""),
330 resourceVNFHomingString);
332 homingSolutionService("service", "testServiceInstanceIdNet", "testVnfHostNameNet",
333 resourceNetHoming.getVnf().getResourceId(), "aic", "testCloudRegionIdNet", null, null),
334 resourceNetHomingString);
336 homingSolutionCloud("cloud", "aic", "testCloudRegionIdNet2", false,
337 "\"f1d563e8-e714-4393-8f99-cc480144a05n\", \"j1d563e8-e714-4393-8f99-cc480144a05n\"",
338 "\"s1d563e8-e714-4393-8f99-cc480144a05n\", \"b1d563e8-e714-4393-8f99-cc480144a05n\""),
339 resourceNetHoming2String);
340 assertEquals(verifyOofRequest(), expectedOofRequest);
347 public void testHoming_success_vnfResourceList() throws Exception {
349 // Create a Service Decomposition
350 MockGetServiceResourcesCatalogDataByModelUuid(wireMockServer, "2f7f309d-c842-4644-a2e4-34167be5eeb4",
351 "/BuildingBlocks/oofCatalogResp.json");
352 String busKey = UUID.randomUUID().toString();
353 Map<String, Object> vars = new HashMap<>();
354 setVariablesForServiceDecomposition(vars, "testRequestId123", "ff5256d2-5a33-55df-13ab-12abad84e7ff");
355 invokeSubProcess("DecomposeService", busKey, vars);
357 ServiceDecomposition sd = (ServiceDecomposition) getVariableFromHistory(busKey, "serviceDecomposition");
358 logger.debug("In testHoming_success_vnfResourceList, ServiceDecomposition = {}", sd);
359 List<VnfResource> vnfResourceList = sd.getVnfResources();
360 vnfResourceList.get(0).setResourceId("test-resource-id-000");
364 mockOof(wireMockServer);
366 String businessKey = UUID.randomUUID().toString();
367 Map<String, Object> variables = new HashMap<>();
368 variables.put("homingService", "oof");
369 variables.put("isDebugLogEnabled", "true");
370 variables.put("msoRequestId", "testRequestId");
371 variables.put("serviceInstanceId", "testServiceInstanceId");
372 variables.put("serviceDecomposition", sd);
373 variables.put("subscriberInfo", subscriber2);
374 HashMap customerLocation = new HashMap<String, Object>();
375 customerLocation.put("customerLatitude", "32.89748");
376 customerLocation.put("customerLongitude", "-97.040443");
377 customerLocation.put("customerName", "xyz");
378 variables.put("customerLatitude", "32.89748");
379 variables.put("customerLongitude", "-97.040443");
380 variables.put("customerName", "xyz");
381 variables.put("customerLocation", customerLocation);
382 variables.put("cloudOwner", "amazon");
383 variables.put("cloudRegionId", "TNZED");
385 invokeSubProcess("Homing", businessKey, variables);
386 injectWorkflowMessages(callbacks, "oof3");
387 waitForProcessEnd(businessKey, 10000);
391 WorkflowException workflowException =
392 (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
393 ServiceDecomposition serviceDecompositionExp =
394 (ServiceDecomposition) getVariableFromHistory(businessKey, "serviceDecomposition");
395 logger.debug("serviceDecompositionExp is: {}", serviceDecompositionExp);
397 Resource resourceVnf = serviceDecompositionExp.getServiceResource("test-resource-id-000");
398 logger.debug("resourceVnf is: {}", resourceVnf);
399 HomingSolution resourceVnfHoming = resourceVnf.getHomingSolution();
401 String resourceVnfHomingString = resourceVnfHoming.toString();
402 logger.debug("resourceVnfHomingString is: {}", resourceVnfHomingString);
403 resourceVnfHomingString = resourceVnfHomingString.replaceAll("\\s+", " ");
404 logger.debug("Now resourceVnfHomingString is: {}", resourceVnfHomingString);
406 assertNull(workflowException);
409 String oofRequest = (String) getVariableFromHistory(businessKey, "oofRequest");
410 logger.debug("oofRequest is: {}", oofRequest);
412 FileUtil.readResourceFile("__files/BuildingBlocks/oofRequest_infravnf").replaceAll("\n", "")
413 .replaceAll("\r", "").replaceAll("\t", ""),
414 oofRequest.replaceAll("\n", "").replaceAll("\r", "").replaceAll("\t", ""));
417 homingSolutionService("service", "service-instance-01234", "MDTNJ01", "test-resource-id-000",
418 "CloudOwner", "mtmnj1a",
419 "\"f1d563e8-e714-4393-8f99-cc480144a05e\"," + " \"j1d563e8-e714-4393-8f99-cc480144a05e\"",
420 "\"s1d563e8-e714-4393-8f99-cc480144a05e\"," + " \"b1d563e8-e714-4393-8f99-cc480144a05e\""),
421 resourceVnfHomingString);
425 public void testHoming_success_existingLicense() throws Exception {
427 mockOof(wireMockServer);
429 String businessKey = UUID.randomUUID().toString();
430 Map<String, Object> variables = new HashMap<String, Object>();
431 setVariablesExistingLicense(variables);
433 invokeSubProcess("Homing", businessKey, variables);
435 injectWorkflowMessages(callbacks, "sniro");
437 waitForProcessEnd(businessKey, 10000);
440 WorkflowException workflowException =
441 (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
442 ServiceDecomposition serviceDecompositionExp =
443 (ServiceDecomposition) getVariableFromHistory(businessKey, "serviceDecomposition");
444 String oofRequest = (String) getVariableFromHistory(businessKey, "sniroRequest");
446 Resource resourceAR = serviceDecompositionExp.getServiceResource("testResourceIdAR");
447 HomingSolution resourceARHoming = (HomingSolution) resourceAR.getHomingSolution();
448 Resource resourceAR2 = serviceDecompositionExp.getServiceResource("testResourceIdAR2");
449 HomingSolution resourceARHoming2 = (HomingSolution) resourceAR2.getHomingSolution();
450 Resource resourceVNF = serviceDecompositionExp.getServiceResource("testResourceIdVNF");
451 HomingSolution resourceVNFHoming = (HomingSolution) resourceVNF.getHomingSolution();
452 String resourceARHomingString = resourceARHoming.toString();
453 resourceARHomingString = resourceARHomingString.replaceAll("\\s+", " ");
454 String resourceARHoming2String = resourceARHoming2.toString();
455 resourceARHoming2String = resourceARHoming2String.replaceAll("\\s+", " ");
456 String resourceVNFHomingString = resourceVNFHoming.toString();
457 resourceVNFHomingString = resourceVNFHomingString.replaceAll("\\s+", " ");
458 oofRequest = oofRequest.replaceAll("\\s+", "");
460 assertNull(workflowException);
462 homingSolutionService("service", "testSIID1", "MDTNJ01", "aic", "dfwtx", "KDTNJ01",
463 "\"f1d563e8-e714-4393-8f99-cc480144a05e\", \"j1d563e8-e714-4393-8f99-cc480144a05e\"",
464 "\"s1d563e8-e714-4393-8f99-cc480144a05e\", \"b1d563e8-e714-4393-8f99-cc480144a05e\""),
465 resourceARHomingString);
467 homingSolutionService("service", "testSIID2", "testVnfHostname2",
468 resourceARHoming2.getVnf().getResourceId(), "aic", "testCloudRegionId2", null, null),
469 resourceARHoming2String);
471 homingSolutionCloud("cloud", "aic", "testCloudRegionId3", false,
472 "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
473 "\"31d563e8-e714-4393-8f99-cc480144a05e\", \"71d563e8-e714-4393-8f99-cc480144a05e\""),
474 resourceVNFHomingString);
475 assertEquals(verifyOofRequestExistingLicense(), oofRequest);
480 public void testHoming_error_inputVariable() throws Exception {
482 String businessKey = UUID.randomUUID().toString();
483 Map<String, Object> variables = new HashMap<>();
484 setVariables3(variables);
486 invokeSubProcess("Homing", businessKey, variables);
488 waitForProcessEnd(businessKey, 10000);
491 WorkflowException workflowException =
492 (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
494 assertEquals("WorkflowException[processKey=Homing,errorCode=4000,errorMessage=A required "
495 + "input variable is missing or null]", workflowException.toString());
500 public void testHoming_error_badResponse() throws Exception {
501 mockOof_500(wireMockServer);
503 String businessKey = UUID.randomUUID().toString();
504 Map<String, Object> variables = new HashMap<>();
505 setVariables(variables);
507 invokeSubProcess("Homing", businessKey, variables);
509 waitForProcessEnd(businessKey, 10000);
512 WorkflowException workflowException =
513 (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
515 assertEquals("WorkflowException[processKey=Homing,errorCode=500,errorMessage=Received a "
516 + "Bad Sync Response from Sniro/OOF.]", workflowException.toString());
521 public void testHoming_error_oofNoSolution() throws Exception {
522 mockOof(wireMockServer);
524 String businessKey = UUID.randomUUID().toString();
525 Map<String, Object> variables = new HashMap<>();
526 setVariables(variables);
528 invokeSubProcess("Homing", businessKey, variables);
530 injectWorkflowMessages(callbacks, "oofNoSol");
532 waitForProcessEnd(businessKey, 10000);
535 WorkflowException workflowException =
536 (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
538 assertEquals("WorkflowException[processKey=Homing,errorCode=400,errorMessage=No solution found "
539 + "for plan 08e1b8cf-144a-4bac-b293-d5e2eedc97e8]", workflowException.toString());
544 public void testHoming_error_oofPolicyException() throws Exception {
545 mockOof(wireMockServer);
547 String businessKey = UUID.randomUUID().toString();
548 Map<String, Object> variables = new HashMap<>();
549 setVariables(variables);
551 invokeSubProcess("Homing", businessKey, variables);
553 injectWorkflowMessages(callbacks, "oofPolicyEx");
555 waitForProcessEnd(businessKey, 10000);
558 WorkflowException workflowException =
559 (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
561 assertEquals("WorkflowException[processKey=Homing,errorCode=400,errorMessage=OOF Async Callback "
562 + "Response contains a Request Error Policy Exception: Message content size exceeds the allowable "
563 + "limit]", workflowException.toString());
568 public void testHoming_error_oofServiceException() throws Exception {
569 mockOof(wireMockServer);
571 String businessKey = UUID.randomUUID().toString();
572 Map<String, Object> variables = new HashMap<>();
573 setVariables(variables);
575 invokeSubProcess("Homing", businessKey, variables);
577 injectWorkflowMessages(callbacks, "oofServiceEx");
579 waitForProcessEnd(businessKey, 10000);
582 WorkflowException workflowException =
583 (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
586 "WorkflowException[processKey=Homing,errorCode=400,errorMessage=OOF Async Callback "
587 + "Response contains a Request Error Service Exception: OOF PlacementError: "
588 + "requests.exceptions.HTTPError: 404 Client Error: Not Found for "
589 + "url: http://192.168.171.200:8091/v1/plans/97b4e303-5f75-492c-8fb2-21098281c8b8]",
590 workflowException.toString());
594 private void setVariables(Map<String, Object> variables) {
595 variables.put("homingService", "oof");
596 HashMap customerLocation = new HashMap<String, Object>();
597 customerLocation.put("customerLatitude", "32.89748");
598 customerLocation.put("customerLongitude", "-97.040443");
599 customerLocation.put("customerName", "xyz");
600 variables.put("customerLatitude", "32.89748");
601 variables.put("customerLongitude", "-97.040443");
602 variables.put("customerName", "xyz");
603 variables.put("customerLocation", customerLocation);
604 variables.put("cloudOwner", "amazon");
605 variables.put("cloudRegionId", "TNZED");
606 variables.put("isDebugLogEnabled", "true");
607 // variables.put("mso-request-id", "testRequestId");
608 variables.put("msoRequestId", "testRequestId");
609 variables.put("serviceInstanceId", "testServiceInstanceId");
610 variables.put("serviceDecomposition", serviceDecomposition);
611 variables.put("subscriberInfo", subscriber2);
614 private void setVariables2(Map<String, Object> variables) {
615 List<NetworkResource> netList = new ArrayList<NetworkResource>();
616 NetworkResource net = new NetworkResource();
617 net.setResourceId("testResourceIdNet");
618 ModelInfo netModel = new ModelInfo();
619 netModel.setModelCustomizationUuid("testModelCustomizationUuidNet");
620 netModel.setModelInvariantUuid("testModelInvariantIdNet");
621 netModel.setModelName("testModelNameNet");
622 netModel.setModelVersion("testModelVersionNet");
623 net.setModelInfo(netModel);
625 NetworkResource net2 = new NetworkResource();
626 net2.setResourceId("testResourceIdNet2");
627 ModelInfo netModel2 = new ModelInfo();
628 netModel2.setModelCustomizationUuid("testModelCustomizationUuidNet2");
629 netModel2.setModelCustomizationName("testModelCustomizationNameNet2");
630 netModel2.setModelInvariantUuid("testModelInvariantIdNet2");
631 netModel2.setModelName("testModelNameNet2");
632 netModel2.setModelVersion("testModelVersionNet2");
633 net2.setModelInfo(netModel2);
635 serviceDecomposition.setNetworkResources(netList);
637 variables.put("homingService", "oof");
638 HashMap customerLocation = new HashMap<String, Object>();
639 customerLocation.put("customerLatitude", "32.89748");
640 customerLocation.put("customerLongitude", "-97.040443");
641 customerLocation.put("customerName", "xyz");
642 variables.put("customerLatitude", "32.89748");
643 variables.put("customerLongitude", "-97.040443");
644 variables.put("customerName", "xyz");
645 variables.put("customerLocation", customerLocation);
646 variables.put("cloudOwner", "amazon");
647 variables.put("cloudRegionId", "TNZED");
648 variables.put("isDebugLogEnabled", "true");
649 variables.put("msoRequestId", "testRequestId");
650 variables.put("serviceInstanceId", "testServiceInstanceId");
651 variables.put("serviceDecomposition", serviceDecomposition);
652 variables.put("subscriberInfo", subscriber2);
655 private void setVariables3(Map<String, Object> variables) {
656 variables.put("homingService", "oof");
657 HashMap customerLocation = new HashMap<String, Object>();
658 customerLocation.put("customerLatitude", "32.89748");
659 customerLocation.put("customerLongitude", "-97.040443");
660 customerLocation.put("customerName", "xyz");
661 variables.put("customerLatitude", "32.89748");
662 variables.put("customerLongitude", "-97.040443");
663 variables.put("customerName", "xyz");
664 variables.put("customerLocation", customerLocation);
665 variables.put("cloudOwner", "amazon");
666 variables.put("cloudRegionId", "TNZED");
667 variables.put("isDebugLogEnabled", "true");
668 // variables.put("mso-request-id", "testRequestId");
669 variables.put("msoRequestId", "testRequestId");
670 variables.put("serviceInstanceId", "testServiceInstanceId");
671 variables.put("serviceDecomposition", null);
672 variables.put("subscriberInfo", subscriber2);
675 private void setVariablesExistingLicense(Map<String, Object> variables) {
676 HomingSolution currentHomingSolution = new HomingSolution();
677 serviceDecomposition.getVnfResources().get(0).setCurrentHomingSolution(currentHomingSolution);
678 serviceDecomposition.getVnfResources().get(0).getCurrentHomingSolution().getLicense()
679 .addEntitlementPool("testEntitlementPoolId1");
680 serviceDecomposition.getVnfResources().get(0).getCurrentHomingSolution().getLicense()
681 .addEntitlementPool("testEntitlementPoolId2");
683 serviceDecomposition.getVnfResources().get(0).getCurrentHomingSolution().getLicense()
684 .addLicenseKeyGroup("testLicenseKeyGroupId1");
685 serviceDecomposition.getVnfResources().get(0).getCurrentHomingSolution().getLicense()
686 .addLicenseKeyGroup("testLicenseKeyGroupId2");
688 variables.put("isDebugLogEnabled", "true");
689 variables.put("msoRequestId", "testRequestId");
690 variables.put("serviceInstanceId", "testServiceInstanceId");
691 variables.put("serviceDecomposition", serviceDecomposition);
692 variables.put("subscriberInfo", subscriber2);
696 private String homingSolutionService(String type, String serviceInstanceId, String vnfHostname,
697 String vnfResourceId, String cloudOwner, String cloudRegionId, String enList, String licenseList) {
699 String solution = "";
700 if (enList == null) {
701 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"serviceInstanceId\" : \""
702 + serviceInstanceId + "\", \"cloudOwner\" : \"" + cloudOwner + "\", \"cloudRegionId\" : \""
703 + cloudRegionId + "\", " + "\"vnf\" : { \"resourceId\" : \"" + vnfResourceId
704 + "\", \"resourceType\" : \"VNF\", \"resourceInstance\" : { }, \"homingSolution\" : { \"license\" :"
705 + " { }, \"rehome\" : false }, \"vnfHostname\" : \"" + vnfHostname + "\" }, \"license\" : { },"
706 + " \"rehome\" : false } }";
709 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"serviceInstanceId\" : \""
710 + serviceInstanceId + "\", \"cloudOwner\" : \"" + cloudOwner + "\", \"cloudRegionId\" : \""
711 + cloudRegionId + "\", \"vnf\" : { \"resourceId\" : \"" + vnfResourceId + "\", \"resourceType\" :"
712 + " \"VNF\", \"resourceInstance\" : { }, \"homingSolution\" : { \"license\" : { }, \"rehome\" :"
713 + " false }, \"vnfHostname\" : \"" + vnfHostname + "\" }, \"license\" : { \"entitlementPoolList\" :"
714 + " [ " + enList + " ], \"licenseKeyGroupList\" : [ " + licenseList
715 + " ] }, \"rehome\" : false } }";
720 private String homingSolutionCloud(String type, String cloudOwner, String cloudRegionId, Boolean flavors,
721 String enList, String licenseList) {
722 String solution = "";
723 if (enList == null) {
724 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" + cloudOwner
725 + "\", \"cloudRegionId\" : \"" + cloudRegionId + "\", \"license\" : { }, \"rehome\" : false } }";
726 } else if (flavors && enList == null) {
727 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" + cloudOwner
728 + "\", \"cloudRegionId\" : \"" + cloudRegionId
729 + "\", \"flavors\" : [ { \"flavorLabel\" : \"flavorLabel2xxx\", \"flavor\" : \"vimFlavorxxx\" }, "
730 + "{ \"flavorLabel\" : \"flavorLabel1xxx\", \"flavor\" : \"vimFlavorxxx\" } ], "
731 + "\"license\" : { }, \"rehome\" : false } }";
732 } else if (flavors) {
733 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" + cloudOwner
734 + "\", \"cloudRegionId\" : \"" + cloudRegionId
735 + "\", \"flavors\" : [ { \"flavorLabel\" : \"flavorLabel2xxx\", \"flavor\" : \"vimFlavorxxx\" }, "
736 + "{ \"flavorLabel\" : \"flavorLabel1xxx\", \"flavor\" : \"vimFlavorxxx\" } ], "
737 + "\"license\" : { \"entitlementPoolList\" : [ " + enList + " ], \"licenseKeyGroupList\" : [ "
738 + licenseList + " ] }, \"rehome\" : false } }";
740 solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" + cloudOwner
741 + "\", \"cloudRegionId\" : \"" + cloudRegionId + "\", \"license\" : { \"entitlementPoolList\" : [ "
742 + enList + " ], \"licenseKeyGroupList\" : [ " + licenseList + " ] }, \"rehome\" : false } }";
747 private void setVariablesForServiceDecomposition(Map<String, Object> variables, String requestId, String siId) {
748 variables.put("homingService", "oof");
749 variables.put("isDebugLogEnabled", "true");
750 variables.put("mso-request-id", requestId);
751 variables.put("msoRequestId", requestId);
752 variables.put("serviceInstanceId", siId);
753 HashMap customerLocation = new HashMap<String, Object>();
754 customerLocation.put("customerLatitude", "32.89748");
755 customerLocation.put("customerLongitude", "-97.040443");
756 customerLocation.put("customerName", "xyz");
757 variables.put("customerLatitude", "32.89748");
758 variables.put("customerLongitude", "-97.040443");
759 variables.put("customerName", "xyz");
760 variables.put("customerLocation", customerLocation);
761 variables.put("cloudOwner", "amazon");
762 variables.put("cloudRegionId", "TNZED");
765 String serviceModelInfo = "{\"modelInvariantId\":\"1cc4e2e4-eb6e-404d-a66f-c8733cedcce8\",\"modelUuid\":"
766 + "\"2f7f309d-c842-4644-a2e4-34167be5eeb4\",\"modelName\":\"vCPE Service\",\"modelVersion\":\"2.0\",}";
767 variables.put("serviceModelInfo", serviceModelInfo);
770 private String verifyOofRequest() {
771 String request = "{\"requestInfo\":{\"transactionId\":\"testRequestId\",\"requestId\":\"testRequestId\","
772 + "\"callbackUrl\":\"http://localhost:28090/workflows/messages/message/oofResponse/testRequestId\","
773 + "\"sourceId\":\"so\",\"requestType\":\"create\",\"numSolutions\":1,\"optimizers\":[\"placement\"],"
774 + "\"timeout\":600},\"placementInfo\":{\"requestParameters\":{\"customerLatitude\":"
775 + "\"32.89748\",\"customerLongitude\":\"-97.040443\",\"customerName\":\"xyz\"},\"subscriberInfo\":"
776 + "{\"globalSubscriberId\":\"SUB12_0322_DS_1201\",\"subscriberName\":\"SUB_12_0322_DS_1201\","
777 + "\"subscriberCommonSiteId\":\"\"},\"placementDemands\":[{\"resourceModuleName\":\"ALLOTTED_RESOURCE\""
778 + ",\"serviceResourceId\":\"testResourceIdAR\",\"tenantId\":"
779 + "\"null\",\"resourceModelInfo\":{\"modelInvariantId\":\"testModelInvariantIdAR\","
780 + "\"modelVersionId\":\"testARModelUuid\",\"modelName\":\"testModelNameAR\",\"modelType\":"
781 + "\"testModelTypeAR\",\"modelVersion\":\"testModelVersionAR\",\"modelCustomizationName\":\"\"}},"
782 + "{\"resourceModuleName\":\"ALLOTTED_RESOURCE\",\"serviceResourceId\":\"testResourceIdAR2\","
783 + "\"tenantId\":\"null\",\"resourceModelInfo\":{\"modelInvariantId\":\"testModelInvariantIdAR2\","
784 + "\"modelVersionId\":\"testAr2ModelUuid\",\"modelName\":\"testModelNameAR2\","
785 + "\"modelType\":\"testModelTypeAR2\",\"modelVersion\":\"testModelVersionAR2\","
786 + "\"modelCustomizationName\":\"\"}}]},\"serviceInfo\":"
787 + "{\"serviceInstanceId\":\"testServiceInstanceId123\","
788 + "\"serviceName\":\"null\",\"modelInfo\":{\"modelType\":\"\",\"modelInvariantId\":"
789 + "\"testModelInvariantId\",\"modelVersionId\":\"testModelUuid\",\"modelName\":\"testModelName\","
790 + "\"modelVersion\":\"testModelVersion\",\"modelCustomizationName\":\""
791 + "\"}},\"licenseInfo\":{\"licenseDemands\":[{\"resourceModuleName\":\"VNF\",\"serviceResourceId\":"
792 + "\"testResourceIdVNF\",\"resourceInstanceType\":\"VNF\",\"resourceModelInfo\":{\"modelInvariantId\":"
793 + "\"testModelInvariantIdVNF\",\"modelVersionId\":\"testVnfModelUuid\",\"modelName\":"
794 + "\"testModelNameVNF\",\"modelType\":\"testModelTypeVNF\",\"modelVersion\":\"testModelVersionVNF\","
795 + "\"modelCustomizationName\":\"\"}}]}}";
799 private String verifyOofRequestExistingLicense() {
800 String request = "{\"requestInfo\":{\"transactionId\":\"testRequestId\",\"requestId\":\"testRequestId\","
801 + "\"callbackUrl\":\"http://localhost:28090/workflows/messages/message/SNIROResponse/testRequestId\","
802 + "\"sourceId\":\"mso\",\"requestType\":\"speedchanged\",\"optimizer\":[\"placement\",\"license\"],"
803 + "\"numSolutions\":1,\"timeout\":1800},\"placementInfo\":{\"serviceModelInfo\":{\"modelType\":\"\","
804 + "\"modelInvariantId\":\"testModelInvariantId\",\"modelVersionId\":\"testModelUuid\",\"modelName\":"
805 + "\"testModelName\",\"modelVersion\":\"testModelVersion\"},\"subscriberInfo\":"
806 + "{\"globalSubscriberId\":\"SUB12_0322_DS_1201\",\"subscriberName\":\"SUB_12_0322_DS_1201\","
807 + "\"subscriberCommonSiteId\":\"\"},\"demandInfo\":{\"placementDemand\":[{\"resourceInstanceType\":"
808 + "\"ALLOTTED_RESOURCE\",\"serviceResourceId\":\"testResourceIdAR\",\"resourceModuleName\":\"\","
809 + "\"resourceModelInfo\":{\"modelCustomizationId\":\"testModelCustomizationUuidAR\","
810 + "\"modelInvariantId\":\"testModelInvariantIdAR\",\"modelName\":\"testModelNameAR\","
811 + "\"modelVersion\":\"testModelVersionAR\",\"modelVersionId\":\"testARModelUuid\",\"modelType\":"
812 + "\"testModelTypeAR\"},\"tenantId\":\"\",\"tenantName\":\"\"},{\"resourceInstanceType\":"
813 + "\"ALLOTTED_RESOURCE\",\"serviceResourceId\":\"testResourceIdAR2\",\"resourceModuleName\":"
814 + "\"\",\"resourceModelInfo\":{\"modelCustomizationId\":\"testModelCustomizationUuidAR2\","
815 + "\"modelInvariantId\":\"testModelInvariantIdAR2\",\"modelName\":\"testModelNameAR2\","
816 + "\"modelVersion\":\"testModelVersionAR2\",\"modelVersionId\":\"testAr2ModelUuid\","
817 + "\"modelType\":\"testModelTypeAR2\"},\"tenantId\":\"\",\"tenantName\":\"\"}],\"licenseDemand\":"
818 + "[{\"resourceInstanceType\":\"VNF\",\"serviceResourceId\":\"testResourceIdVNF\","
819 + "\"resourceModuleName\":\"\",\"resourceModelInfo\":{\"modelCustomizationId\":"
820 + "\"testModelCustomizationUuidVNF\",\"modelInvariantId\":\"testModelInvariantIdVNF\","
821 + "\"modelName\":\"testModelNameVNF\",\"modelVersion\":\"testModelVersionVNF\","
822 + "\"modelVersionId\":\"testVnfModelUuid\",\"modelType\":\"testModelTypeVNF\"},"
823 + "\"existingLicense\":[{\"entitlementPoolUUID\":[\"testEntitlementPoolId1\","
824 + "\"testEntitlementPoolId2\"],\"licenseKeyGroupUUID\":[\"testLicenseKeyGroupId1\","
825 + "\"testLicenseKeyGroupId2\"]}]}]},\"policyId\":[],\"serviceInstanceId\":"
826 + "\"testServiceInstanceId123\",\"orderInfo\":\"{\\\"requestParameters\\\":null}\"}}";