2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 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.infrastructure.scripts
23 import com.github.tomakehurst.wiremock.junit.WireMockRule
24 import org.camunda.bpm.engine.ProcessEngineServices
25 import org.camunda.bpm.engine.RepositoryService
26 import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
27 import org.camunda.bpm.engine.repository.ProcessDefinition
28 import org.junit.Assert
29 import org.junit.Before
32 import org.junit.runner.RunWith
33 import org.mockito.ArgumentCaptor
34 import org.mockito.Captor
35 import org.mockito.Mockito
36 import org.mockito.MockitoAnnotations
37 import org.mockito.runners.MockitoJUnitRunner
38 import org.onap.so.bpmn.core.WorkflowException
39 import org.onap.so.bpmn.core.domain.AllottedResource
40 import org.onap.so.bpmn.core.domain.HomingSolution
41 import org.onap.so.bpmn.core.domain.InventoryType
42 import org.onap.so.bpmn.core.domain.License
43 import org.onap.so.bpmn.core.domain.ModelInfo
44 import org.onap.so.bpmn.core.domain.ModuleResource
45 import org.onap.so.bpmn.core.domain.NetworkResource
46 import org.onap.so.bpmn.core.domain.ResourceInstance
47 import org.onap.so.bpmn.core.domain.ResourceType
48 import org.onap.so.bpmn.core.domain.ServiceDecomposition
49 import org.onap.so.bpmn.core.domain.ServiceInstance
50 import org.onap.so.bpmn.core.domain.VnfResource
52 import static org.mockito.Mockito.*
54 @RunWith(MockitoJUnitRunner.class)
55 class DoCreateVnfAndModulesTest {
58 static ArgumentCaptor<ExecutionEntity> captor = ArgumentCaptor.forClass(ExecutionEntity.class)
61 void init() throws IOException {
62 MockitoAnnotations.initMocks(this);
66 void testPreProcessRequest() {
67 ExecutionEntity mockExecution = setupMock()
68 setupBasicProcessInputs(mockExecution)
70 ServiceDecomposition serviceDecomposition = createServiceDecomposition()
71 when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition)
73 Map<String,String> vfModuleNames = new HashMap<String,String>()
74 vfModuleNames.put("3ec98c7a-ac20-49a1-9e0d-09fea7e8db45", "VGWA:e2:25:25:25:%")
75 vfModuleNames.put("cc250e7e-746b-4d84-8064-df20c74213a6", "VGWB:f9:32:32:32:%")
76 when(mockExecution.getVariable("vfModuleNames")).thenReturn(vfModuleNames)
78 DoCreateVnfAndModules obj = new DoCreateVnfAndModules()
79 obj.preProcessRequest(mockExecution)
81 Mockito.verify(mockExecution, times(11)).setVariable(captor.capture(), captor.capture())
83 List list = captor.getAllValues()
84 for (int i = 0; i < list.size(); i+=2) {
85 System.out.println("captor[" + i/2 + "]: " + list.get(i)
86 + (i+1 < list.size() ? ("=" + list.get(i+1)) : ""))
89 String someKey = list.get(18)
90 Assert.assertEquals("numOfCreatedAddOnModules", someKey)
91 Integer someValue = list.get(19)
92 Assert.assertEquals(0, someValue)
94 String lastKey = list.get(20)
95 Assert.assertEquals("rollbackData", lastKey)
99 void testQueryCatalogDB() {
100 ExecutionEntity mockExecution = setupMock()
101 setupBasicProcessInputs(mockExecution)
103 ServiceDecomposition serviceDecomposition = createServiceDecomposition()
104 when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition)
106 DoCreateVnfAndModules obj = new DoCreateVnfAndModules()
107 obj.queryCatalogDB(mockExecution)
109 Mockito.verify(mockExecution, times(11)).setVariable(captor.capture(), captor.capture())
111 List list = captor.getAllValues()
112 for (int i = 0; i < list.size(); i+=2) {
113 System.out.println("captor[" + i/2 + "]: " + list.get(i)
114 + (i+1 < list.size() ? ("=" + list.get(i+1)) : ""))
117 String vfModuleNameKey = list.get(12)
118 Assert.assertEquals("baseVfModuleName", vfModuleNameKey)
119 String vfModuleNameValue = list.get(13)
120 Assert.assertEquals(null, vfModuleNameValue)
122 String lastKey = list.get(20)
123 Assert.assertEquals("baseVfModuleId", lastKey)
127 void testQueryCatalogDBWithVfModuleNames() {
128 ExecutionEntity mockExecution = setupMock()
129 setupBasicProcessInputs(mockExecution)
131 ServiceDecomposition serviceDecomposition = createServiceDecomposition()
132 when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition)
134 Map<String,String> vfModuleNames = new HashMap<String,String>()
135 vfModuleNames.put("3ec98c7a-ac20-49a1-9e0d-09fea7e8db45", "VGWA:e2:25:25:25:%")
136 vfModuleNames.put("cc250e7e-746b-4d84-8064-df20c74213a6", "VGWB:f9:32:32:32:%")
137 when(mockExecution.getVariable("vfModuleNames")).thenReturn(vfModuleNames)
139 DoCreateVnfAndModules obj = new DoCreateVnfAndModules()
140 obj.queryCatalogDB(mockExecution)
142 Mockito.verify(mockExecution, times(11)).setVariable(captor.capture(), captor.capture())
144 List list = captor.getAllValues()
145 for (int i = 0; i < list.size(); i+=2) {
146 System.out.println("captor[" + i/2 + "]: " + list.get(i)
147 + (i+1 < list.size() ? ("=" + list.get(i+1)) : ""))
150 String vfModuleNameKey = list.get(12)
151 Assert.assertEquals("baseVfModuleName", vfModuleNameKey)
152 String vfModuleNameValue = list.get(13)
153 Assert.assertEquals("VGWA:e2:25:25:25:%", vfModuleNameValue)
155 String lastKey = list.get(20)
156 Assert.assertEquals("baseVfModuleId", lastKey)
160 void testPreProcessAddonModule() {
161 ExecutionEntity mockExecution = setupMock()
162 setupBasicProcessInputs(mockExecution)
164 ServiceDecomposition serviceDecomposition = createServiceDecomposition()
165 when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition)
167 VnfResource vnf = serviceDecomposition.getVnfResources().get(0);
168 List<ModuleResource> vfModules = vnf.getAllVfModuleObjects()
170 for (int i = vfModules.size()-1; i >= 0; i--) {
171 if (vfModules.get(i).getIsBase()) {
176 when(mockExecution.getVariable("addOnModules")).thenReturn(vfModules)
177 when(mockExecution.getVariable("addOnModulesDeployed")).thenReturn(0)
179 DoCreateVnfAndModules obj = new DoCreateVnfAndModules()
180 obj.preProcessAddOnModule(mockExecution)
182 Mockito.verify(mockExecution, times(9)).setVariable(captor.capture(), captor.capture())
184 List list = captor.getAllValues()
185 for (int i = 0; i < list.size(); i+=2) {
186 System.out.println("captor[" + i/2 + "]: " + list.get(i)
187 + (i+1 < list.size() ? ("=" + list.get(i+1)) : ""))
190 String vfModuleNameKey = list.get(14)
191 Assert.assertEquals("addOnVfModuleName", vfModuleNameKey)
192 String vfModuleNameValue = list.get(15)
193 Assert.assertEquals(null, vfModuleNameValue)
195 String lastKey = list.get(16)
196 Assert.assertEquals("initialCount", lastKey)
200 void testPreProcessAddonModuleWithVfModuleNames() {
201 ExecutionEntity mockExecution = setupMock()
202 setupBasicProcessInputs(mockExecution)
204 ServiceDecomposition serviceDecomposition = createServiceDecomposition()
205 when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition)
207 Map<String,String> vfModuleNames = new HashMap<String,String>()
208 vfModuleNames.put("3ec98c7a-ac20-49a1-9e0d-09fea7e8db45", "VGWA:e2:25:25:25:%")
209 vfModuleNames.put("cc250e7e-746b-4d84-8064-df20c74213a6", "VGWB:f9:32:32:32:%")
210 when(mockExecution.getVariable("vfModuleNames")).thenReturn(vfModuleNames)
212 VnfResource vnf = serviceDecomposition.getVnfResources().get(0);
213 List<ModuleResource> vfModules = vnf.getAllVfModuleObjects()
215 for (int i = vfModules.size()-1; i >= 0; i--) {
216 if (vfModules.get(i).getIsBase()) {
221 when(mockExecution.getVariable("addOnModules")).thenReturn(vfModules)
222 when(mockExecution.getVariable("addOnModulesDeployed")).thenReturn(0)
224 DoCreateVnfAndModules obj = new DoCreateVnfAndModules()
225 obj.preProcessAddOnModule(mockExecution)
227 Mockito.verify(mockExecution, times(9)).setVariable(captor.capture(), captor.capture())
229 List list = captor.getAllValues()
230 for (int i = 0; i < list.size(); i+=2) {
231 System.out.println("captor[" + i/2 + "]: " + list.get(i)
232 + (i+1 < list.size() ? ("=" + list.get(i+1)) : ""))
235 String vfModuleNameKey = list.get(14)
236 Assert.assertEquals("addOnVfModuleName", vfModuleNameKey)
237 String vfModuleNameValue = list.get(15)
238 Assert.assertEquals("VGWB:f9:32:32:32:%", vfModuleNameValue)
240 String lastKey = list.get(16)
241 Assert.assertEquals("initialCount", lastKey)
244 private static setupBasicProcessInputs(ExecutionEntity mockExecution) {
245 when(mockExecution.getVariable("prefix")).thenReturn("DCVAM_")
246 when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
247 when(mockExecution.getVariable("msoRequestId")).thenReturn("28a7f01e-a6aa-44fd-b25e-e06e14873cd7")
248 when(mockExecution.getVariable("serviceInstanceId")).thenReturn("7d34a7df-d6c3-4f1c-8710-576412134a5a")
249 when(mockExecution.getVariable("productFamilyId")).thenReturn("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb")
250 when(mockExecution.getVariable("lcpCloudRegionId")).thenReturn("RegionOne")
251 when(mockExecution.getVariable("tenantId")).thenReturn("b8ad3842ab3642f7bf3fbe4e4d3b9f86")
252 when(mockExecution.getVariable("disableRollback")).thenReturn("true")
253 when(mockExecution.getVariable("delayMS")).thenReturn("0")
257 private static ExecutionEntity setupMock() {
258 ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
259 when(mockProcessDefinition.getKey()).thenReturn("DoCreateVnfAndModules")
260 RepositoryService mockRepositoryService = mock(RepositoryService.class)
261 when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
262 when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("DoCreateVnfAndModules")
263 when(mockRepositoryService.getProcessDefinition().getId()).thenReturn("100")
264 ProcessEngineServices mockProcessEngineServices = mock(ProcessEngineServices.class)
265 when(mockProcessEngineServices.getRepositoryService()).thenReturn(mockRepositoryService)
267 ExecutionEntity mockExecution = mock(ExecutionEntity.class)
268 // Initialize prerequisite variables
269 when(mockExecution.getId()).thenReturn("100")
270 when(mockExecution.getProcessDefinitionId()).thenReturn("DoCreateVnfAndModules")
271 when(mockExecution.getProcessInstanceId()).thenReturn("DoCreateVnfAndModules")
272 when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
273 when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)
278 public static ServiceDecomposition createServiceDecomposition() {
279 ServiceDecomposition serviceDecomposition = new ServiceDecomposition()
281 ServiceInstance serviceInstance = new ServiceInstance()
282 serviceInstance.setInstanceId("7d34a7df-d6c3-4f1c-8710-576412134a5a")
283 serviceDecomposition.setServiceInstance(serviceInstance)
284 serviceDecomposition.setServiceType("")
285 serviceDecomposition.setServiceRole("")
287 ModelInfo serviceModelInfo = new ModelInfo()
288 serviceDecomposition.setModelInfo(serviceModelInfo)
289 serviceModelInfo.setModelName("vcpesvc_rescust_1111")
290 serviceModelInfo.setModelUuid("1dffd5f9-bb29-4a47-8073-9b9b07f4943a")
291 serviceModelInfo.setModelVersion("1.0")
292 serviceModelInfo.setModelCustomizationUuid("")
293 serviceModelInfo.setModelCustomizationName("")
294 serviceModelInfo.setModelInstanceName("")
295 serviceModelInfo.setModelType("")
297 List<VnfResource> vnfResources = new ArrayList<VnfResource>()
298 serviceDecomposition.setVnfResources(vnfResources)
300 VnfResource vnfResource = new VnfResource()
301 vnfResources.add(vnfResource)
302 vnfResource.setResourceId("9504b6b3-d346-4387-952c-8f9b7570b055")
303 vnfResource.setResourceType(ResourceType.VNF)
304 ModelInfo vnfModelInfo = new ModelInfo()
305 vnfResource.setModelInfo(vnfModelInfo)
306 vnfModelInfo.setModelName("vcpevsp_vgw_1111")
307 vnfModelInfo.setModelUuid("289e96fd-a679-4286-a8a2-d76f930d650b")
308 vnfModelInfo.setModelInvariantUuid("0327af89-f836-4086-aadb-17d5c9bd8a83");
309 vnfModelInfo.setModelVersion("1.0");
310 vnfModelInfo.setModelCustomizationUuid("cf151beb-9510-44a1-a165-c783e673baa1");
311 vnfModelInfo.setModelCustomizationName("");
312 vnfModelInfo.setModelInstanceName("vcpevsp_vgw_1111 0")
313 vnfModelInfo.setModelType("")
314 vnfResource.setResourceInstance(new ResourceInstance())
315 vnfResource.setHomingSolution(new HomingSolution())
316 vnfResource.setToscaNodeType("org.openecomp.resource.vf.VcpevspVgw1111")
317 vnfResource.setMultiStageDesign("false")
318 vnfResource.setMultiStageDesign("false")
320 List<ModuleResource> moduleResources = new ArrayList<ModuleResource>()
321 vnfResource.setModules(moduleResources)
323 ModuleResource moduleResource = new ModuleResource()
324 moduleResources.add(moduleResource)
325 moduleResource.setResourceType(ResourceType.MODULE)
326 ModelInfo moduleModelInfo = new ModelInfo()
327 moduleResource.setModelInfo(moduleModelInfo);
328 moduleModelInfo.setModelName("VcpevspVgw1111..base_vcpe_vgw..module-0")
329 moduleModelInfo.setModelUuid("cf35b6b8-1f31-4efc-87a7-d53f840b8fdf")
330 moduleModelInfo.setModelInvariantUuid("3ec98c7a-ac20-49a1-9e0d-09fea7e8db45")
331 moduleModelInfo.setModelVersion("1")
332 moduleModelInfo.setModelCustomizationUuid("281085b3-4598-4c94-811d-58cc685763e7")
333 moduleModelInfo.setModelCustomizationName("")
334 moduleModelInfo.setModelInstanceName("")
335 moduleModelInfo.setModelType("")
336 moduleResource.setResourceInstance(new ResourceInstance())
337 moduleResource.setHomingSolution(new HomingSolution())
338 moduleResource.setHasVolumeGroup(false)
339 moduleResource.setIsBase(true)
340 moduleResource.setVfModuleLabel("base_vcpe_vgw")
341 moduleResource.setInitialCount(1)
343 // For testing an add-on module; not in the actual vCPE model
344 moduleResource = new ModuleResource()
345 moduleResources.add(moduleResource)
346 moduleResource.setResourceType(ResourceType.MODULE)
347 moduleModelInfo = new ModelInfo()
348 moduleResource.setModelInfo(moduleModelInfo);
349 moduleModelInfo.setModelName("VcpevspVgw1111..addon_vcpe_vgw..module-1")
350 moduleModelInfo.setModelUuid("8c8b41b2-8466-41b4-ae8d-5924830c40e8")
351 moduleModelInfo.setModelInvariantUuid("cc250e7e-746b-4d84-8064-df20c74213a6")
352 moduleModelInfo.setModelVersion("1")
353 moduleModelInfo.setModelCustomizationUuid("99424afc-1fb4-4598-a99b-3e0690b4cb03")
354 moduleModelInfo.setModelCustomizationName("")
355 moduleModelInfo.setModelInstanceName("")
356 moduleModelInfo.setModelType("")
357 moduleResource.setResourceInstance(new ResourceInstance())
358 moduleResource.setHomingSolution(new HomingSolution())
359 moduleResource.setHasVolumeGroup(false)
360 moduleResource.setIsBase(false)
361 moduleResource.setVfModuleLabel("addon_vcpe_vgw")
362 moduleResource.setInitialCount(1)
364 serviceDecomposition.setNetworkResources(new ArrayList<NetworkResource>())
366 List<AllottedResource> allottedResources = new ArrayList<AllottedResource>()
367 serviceDecomposition.setAllottedResources(allottedResources)
369 AllottedResource ar = new AllottedResource()
370 allottedResources.add(ar)
371 ar.setResourceId("ed4a3a9a-1411-4924-a9ee-61a41871a040")
372 ar.setResourceType(ResourceType.ALLOTTED_RESOURCE)
373 ModelInfo arModelInfo = new ModelInfo()
374 ar.setModelInfo(arModelInfo)
375 arModelInfo.setModelName("vcpear_tunnelxconn_1111")
376 arModelInfo.setModelUuid("d99e5442-c5e4-4197-ad8d-54f7ad43dd83")
377 arModelInfo.setModelInvariantUuid("61c17371-e824-4587-a9bb-21782aa28391")
378 arModelInfo.setModelVersion("1.0")
379 arModelInfo.setModelCustomizationUuid("506bb474-b8c2-41fd-aeec-4371c3ef58a4")
380 arModelInfo.setModelCustomizationName("")
381 arModelInfo.setModelInstanceName("vcpear_tunnelxconn_1111 0")
382 arModelInfo.setModelType("")
383 ar.setResourceInstance(new ResourceInstance())
384 HomingSolution homingSolution = new HomingSolution()
385 ar.setHomingSolution(homingSolution)
386 homingSolution.setInventoryType(InventoryType.service)
387 homingSolution.setServiceInstanceId("d600c1c0-ff45-40e4-bf29-45a95fa64556")
388 homingSolution.setCloudOwner("CloudOwner")
389 homingSolution.setCloudRegionId("RegionOne")
390 VnfResource vnf = new VnfResource()
391 homingSolution.setVnf(vnf)
392 vnf.setResourceId("cea5e96e-9c67-437c-bf94-2329d277be09")
393 vnf.setResourceType(ResourceType.VNF)
394 vnf.setResourceInstance(new ResourceInstance())
395 vnf.setHomingSolution(new HomingSolution())
396 vnf.setVnfHostname("vnfHostName")
397 homingSolution.setLicense(new License())
398 homingSolution.setRehome(false)
399 ar.setToscaNodeType("org.openecomp.resource.vf.VcpearTunnelxconn1111")
400 ar.setAllottedResourceType("TunnelXConnect")
401 ar.setAllottedResourceRole("TunnelXConn")
402 ar.setProvidingServiceModelName("org.openecomp.service.VcpesvcVgmux1111")
403 ar.setProvidingServiceModelInvariantUuid("d5751cb3-b9e9-470b-9c29-76a5e3ea12d0")
404 ar.setProvidingServiceModelUuid("61b6e96a-f0c6-4f34-a91c-dab3574dd025")
405 ar.setNfType("TunnelXConn")
406 ar.setNfRole("TunnelXConn")
408 ar = new AllottedResource()
409 allottedResources.add(ar)
410 ar.setResourceId("3b1b3686-ccfe-4e7c-9d6b-76419db398f9")
411 ar.setResourceType(ResourceType.ALLOTTED_RESOURCE)
412 arModelInfo = new ModelInfo()
413 ar.setModelInfo(arModelInfo)
414 arModelInfo.setModelName("vcpear_brg_1111")
415 arModelInfo.setModelUuid("6b0a5aa5-98d8-455c-8cd1-618a3f1ac859")
416 arModelInfo.setModelInvariantUuid("531f9aa5-dea4-4958-89ad-ef03f77cbf07")
417 arModelInfo.setModelVersion("1.0")
418 arModelInfo.setModelCustomizationUuid("d23ac3fe-ea54-4060-a7c1-ec9178c79620")
419 arModelInfo.setModelCustomizationName("")
420 arModelInfo.setModelInstanceName("vcpear_brg_1111 0")
421 arModelInfo.setModelType("")
422 ar.setResourceInstance(new ResourceInstance())
423 homingSolution = new HomingSolution()
424 ar.setHomingSolution(homingSolution)
425 homingSolution.setInventoryType(InventoryType.service)
426 homingSolution.setServiceInstanceId("bc28ebca-0cc3-4bf8-9ce9-d1524e4bec79")
427 homingSolution.setCloudOwner("CloudOwner")
428 homingSolution.setCloudRegionId("RegionOne")
429 vnf = new VnfResource()
430 homingSolution.setVnf(vnf)
431 vnf.setResourceId("65183e95-e6f1-46cb-9315-2da27a24c2b9")
432 vnf.setResourceType(ResourceType.VNF)
433 vnf.setResourceInstance(new ResourceInstance())
434 vnf.setHomingSolution(new HomingSolution())
435 vnf.setVnfHostname("vnfHostName")
436 homingSolution.setLicense(new License())
437 homingSolution.setRehome(false)
438 ar.setToscaNodeType("org.openecomp.resource.vf.VcpearBrg1111")
439 ar.setAllottedResourceType("BRG")
440 ar.setAllottedResourceRole("BRG")
441 ar.setProvidingServiceModelName("org.openecomp.service.VcpesvcVbrg1111")
442 ar.setProvidingServiceModelInvariantUuid("6eff53bf-0045-41b0-bd48-b4e1284e5b7a")
443 ar.setProvidingServiceModelUuid("0e500bca-15ac-42eb-a2f1-4bfd3b2828ff")
447 return serviceDecomposition