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 public WireMockRule wireMockRule = new WireMockRule(28090)
61 static ArgumentCaptor<ExecutionEntity> captor = ArgumentCaptor.forClass(ExecutionEntity.class)
64 void init() throws IOException {
65 MockitoAnnotations.initMocks(this);
69 void testPreProcessRequest() {
70 ExecutionEntity mockExecution = setupMock()
71 setupBasicProcessInputs(mockExecution)
73 ServiceDecomposition serviceDecomposition = createServiceDecomposition()
74 when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition)
76 Map<String,String> vfModuleNames = new HashMap<String,String>()
77 vfModuleNames.put("3ec98c7a-ac20-49a1-9e0d-09fea7e8db45", "VGWA:e2:25:25:25:%")
78 vfModuleNames.put("cc250e7e-746b-4d84-8064-df20c74213a6", "VGWB:f9:32:32:32:%")
79 when(mockExecution.getVariable("vfModuleNames")).thenReturn(vfModuleNames)
81 DoCreateVnfAndModules obj = new DoCreateVnfAndModules()
82 obj.preProcessRequest(mockExecution)
84 Mockito.verify(mockExecution, times(11)).setVariable(captor.capture(), captor.capture())
86 List list = captor.getAllValues()
87 for (int i = 0; i < list.size(); i+=2) {
88 System.out.println("captor[" + i/2 + "]: " + list.get(i)
89 + (i+1 < list.size() ? ("=" + list.get(i+1)) : ""))
92 String someKey = list.get(18)
93 Assert.assertEquals("numOfCreatedAddOnModules", someKey)
94 Integer someValue = list.get(19)
95 Assert.assertEquals(0, someValue)
97 String lastKey = list.get(20)
98 Assert.assertEquals("rollbackData", lastKey)
102 void testQueryCatalogDB() {
103 ExecutionEntity mockExecution = setupMock()
104 setupBasicProcessInputs(mockExecution)
106 ServiceDecomposition serviceDecomposition = createServiceDecomposition()
107 when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition)
109 DoCreateVnfAndModules obj = new DoCreateVnfAndModules()
110 obj.queryCatalogDB(mockExecution)
112 Mockito.verify(mockExecution, times(11)).setVariable(captor.capture(), captor.capture())
114 List list = captor.getAllValues()
115 for (int i = 0; i < list.size(); i+=2) {
116 System.out.println("captor[" + i/2 + "]: " + list.get(i)
117 + (i+1 < list.size() ? ("=" + list.get(i+1)) : ""))
120 String vfModuleNameKey = list.get(12)
121 Assert.assertEquals("baseVfModuleName", vfModuleNameKey)
122 String vfModuleNameValue = list.get(13)
123 Assert.assertEquals(null, vfModuleNameValue)
125 String lastKey = list.get(20)
126 Assert.assertEquals("baseVfModuleId", lastKey)
130 void testQueryCatalogDBWithVfModuleNames() {
131 ExecutionEntity mockExecution = setupMock()
132 setupBasicProcessInputs(mockExecution)
134 ServiceDecomposition serviceDecomposition = createServiceDecomposition()
135 when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition)
137 Map<String,String> vfModuleNames = new HashMap<String,String>()
138 vfModuleNames.put("3ec98c7a-ac20-49a1-9e0d-09fea7e8db45", "VGWA:e2:25:25:25:%")
139 vfModuleNames.put("cc250e7e-746b-4d84-8064-df20c74213a6", "VGWB:f9:32:32:32:%")
140 when(mockExecution.getVariable("vfModuleNames")).thenReturn(vfModuleNames)
142 DoCreateVnfAndModules obj = new DoCreateVnfAndModules()
143 obj.queryCatalogDB(mockExecution)
145 Mockito.verify(mockExecution, times(11)).setVariable(captor.capture(), captor.capture())
147 List list = captor.getAllValues()
148 for (int i = 0; i < list.size(); i+=2) {
149 System.out.println("captor[" + i/2 + "]: " + list.get(i)
150 + (i+1 < list.size() ? ("=" + list.get(i+1)) : ""))
153 String vfModuleNameKey = list.get(12)
154 Assert.assertEquals("baseVfModuleName", vfModuleNameKey)
155 String vfModuleNameValue = list.get(13)
156 Assert.assertEquals("VGWA:e2:25:25:25:%", vfModuleNameValue)
158 String lastKey = list.get(20)
159 Assert.assertEquals("baseVfModuleId", lastKey)
163 void testPreProcessAddonModule() {
164 ExecutionEntity mockExecution = setupMock()
165 setupBasicProcessInputs(mockExecution)
167 ServiceDecomposition serviceDecomposition = createServiceDecomposition()
168 when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition)
170 VnfResource vnf = serviceDecomposition.getVnfResources().get(0);
171 List<ModuleResource> vfModules = vnf.getAllVfModuleObjects()
173 for (int i = vfModules.size()-1; i >= 0; i--) {
174 if (vfModules.get(i).getIsBase()) {
179 when(mockExecution.getVariable("addOnModules")).thenReturn(vfModules)
180 when(mockExecution.getVariable("addOnModulesDeployed")).thenReturn(0)
182 DoCreateVnfAndModules obj = new DoCreateVnfAndModules()
183 obj.preProcessAddOnModule(mockExecution)
185 Mockito.verify(mockExecution, times(9)).setVariable(captor.capture(), captor.capture())
187 List list = captor.getAllValues()
188 for (int i = 0; i < list.size(); i+=2) {
189 System.out.println("captor[" + i/2 + "]: " + list.get(i)
190 + (i+1 < list.size() ? ("=" + list.get(i+1)) : ""))
193 String vfModuleNameKey = list.get(14)
194 Assert.assertEquals("addOnVfModuleName", vfModuleNameKey)
195 String vfModuleNameValue = list.get(15)
196 Assert.assertEquals(null, vfModuleNameValue)
198 String lastKey = list.get(16)
199 Assert.assertEquals("initialCount", lastKey)
203 void testPreProcessAddonModuleWithVfModuleNames() {
204 ExecutionEntity mockExecution = setupMock()
205 setupBasicProcessInputs(mockExecution)
207 ServiceDecomposition serviceDecomposition = createServiceDecomposition()
208 when(mockExecution.getVariable("serviceDecomposition")).thenReturn(serviceDecomposition)
210 Map<String,String> vfModuleNames = new HashMap<String,String>()
211 vfModuleNames.put("3ec98c7a-ac20-49a1-9e0d-09fea7e8db45", "VGWA:e2:25:25:25:%")
212 vfModuleNames.put("cc250e7e-746b-4d84-8064-df20c74213a6", "VGWB:f9:32:32:32:%")
213 when(mockExecution.getVariable("vfModuleNames")).thenReturn(vfModuleNames)
215 VnfResource vnf = serviceDecomposition.getVnfResources().get(0);
216 List<ModuleResource> vfModules = vnf.getAllVfModuleObjects()
218 for (int i = vfModules.size()-1; i >= 0; i--) {
219 if (vfModules.get(i).getIsBase()) {
224 when(mockExecution.getVariable("addOnModules")).thenReturn(vfModules)
225 when(mockExecution.getVariable("addOnModulesDeployed")).thenReturn(0)
227 DoCreateVnfAndModules obj = new DoCreateVnfAndModules()
228 obj.preProcessAddOnModule(mockExecution)
230 Mockito.verify(mockExecution, times(9)).setVariable(captor.capture(), captor.capture())
232 List list = captor.getAllValues()
233 for (int i = 0; i < list.size(); i+=2) {
234 System.out.println("captor[" + i/2 + "]: " + list.get(i)
235 + (i+1 < list.size() ? ("=" + list.get(i+1)) : ""))
238 String vfModuleNameKey = list.get(14)
239 Assert.assertEquals("addOnVfModuleName", vfModuleNameKey)
240 String vfModuleNameValue = list.get(15)
241 Assert.assertEquals("VGWB:f9:32:32:32:%", vfModuleNameValue)
243 String lastKey = list.get(16)
244 Assert.assertEquals("initialCount", lastKey)
247 private static setupBasicProcessInputs(ExecutionEntity mockExecution) {
248 when(mockExecution.getVariable("prefix")).thenReturn("DCVAM_")
249 when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
250 when(mockExecution.getVariable("msoRequestId")).thenReturn("28a7f01e-a6aa-44fd-b25e-e06e14873cd7")
251 when(mockExecution.getVariable("serviceInstanceId")).thenReturn("7d34a7df-d6c3-4f1c-8710-576412134a5a")
252 when(mockExecution.getVariable("productFamilyId")).thenReturn("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb")
253 when(mockExecution.getVariable("lcpCloudRegionId")).thenReturn("RegionOne")
254 when(mockExecution.getVariable("tenantId")).thenReturn("b8ad3842ab3642f7bf3fbe4e4d3b9f86")
255 when(mockExecution.getVariable("disableRollback")).thenReturn("true")
256 when(mockExecution.getVariable("delayMS")).thenReturn("0")
260 private static ExecutionEntity setupMock() {
261 ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
262 when(mockProcessDefinition.getKey()).thenReturn("DoCreateVnfAndModules")
263 RepositoryService mockRepositoryService = mock(RepositoryService.class)
264 when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
265 when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("DoCreateVnfAndModules")
266 when(mockRepositoryService.getProcessDefinition().getId()).thenReturn("100")
267 ProcessEngineServices mockProcessEngineServices = mock(ProcessEngineServices.class)
268 when(mockProcessEngineServices.getRepositoryService()).thenReturn(mockRepositoryService)
270 ExecutionEntity mockExecution = mock(ExecutionEntity.class)
271 // Initialize prerequisite variables
272 when(mockExecution.getId()).thenReturn("100")
273 when(mockExecution.getProcessDefinitionId()).thenReturn("DoCreateVnfAndModules")
274 when(mockExecution.getProcessInstanceId()).thenReturn("DoCreateVnfAndModules")
275 when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
276 when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)
281 public static ServiceDecomposition createServiceDecomposition() {
282 ServiceDecomposition serviceDecomposition = new ServiceDecomposition()
284 ServiceInstance serviceInstance = new ServiceInstance()
285 serviceInstance.setInstanceId("7d34a7df-d6c3-4f1c-8710-576412134a5a")
286 serviceDecomposition.setServiceInstance(serviceInstance)
287 serviceDecomposition.setServiceType("")
288 serviceDecomposition.setServiceRole("")
290 ModelInfo serviceModelInfo = new ModelInfo()
291 serviceDecomposition.setModelInfo(serviceModelInfo)
292 serviceModelInfo.setModelName("vcpesvc_rescust_1111")
293 serviceModelInfo.setModelUuid("1dffd5f9-bb29-4a47-8073-9b9b07f4943a")
294 serviceModelInfo.setModelVersion("1.0")
295 serviceModelInfo.setModelCustomizationUuid("")
296 serviceModelInfo.setModelCustomizationName("")
297 serviceModelInfo.setModelInstanceName("")
298 serviceModelInfo.setModelType("")
300 List<VnfResource> vnfResources = new ArrayList<VnfResource>()
301 serviceDecomposition.setVnfResources(vnfResources)
303 VnfResource vnfResource = new VnfResource()
304 vnfResources.add(vnfResource)
305 vnfResource.setResourceId("9504b6b3-d346-4387-952c-8f9b7570b055")
306 vnfResource.setResourceType(ResourceType.VNF)
307 ModelInfo vnfModelInfo = new ModelInfo()
308 vnfResource.setModelInfo(vnfModelInfo)
309 vnfModelInfo.setModelName("vcpevsp_vgw_1111")
310 vnfModelInfo.setModelUuid("289e96fd-a679-4286-a8a2-d76f930d650b")
311 vnfModelInfo.setModelInvariantUuid("0327af89-f836-4086-aadb-17d5c9bd8a83");
312 vnfModelInfo.setModelVersion("1.0");
313 vnfModelInfo.setModelCustomizationUuid("cf151beb-9510-44a1-a165-c783e673baa1");
314 vnfModelInfo.setModelCustomizationName("");
315 vnfModelInfo.setModelInstanceName("vcpevsp_vgw_1111 0")
316 vnfModelInfo.setModelType("")
317 vnfResource.setResourceInstance(new ResourceInstance())
318 vnfResource.setHomingSolution(new HomingSolution())
319 vnfResource.setToscaNodeType("org.openecomp.resource.vf.VcpevspVgw1111")
320 vnfResource.setMultiStageDesign("false")
321 vnfResource.setMultiStageDesign("false")
323 List<ModuleResource> moduleResources = new ArrayList<ModuleResource>()
324 vnfResource.setModules(moduleResources)
326 ModuleResource moduleResource = new ModuleResource()
327 moduleResources.add(moduleResource)
328 moduleResource.setResourceType(ResourceType.MODULE)
329 ModelInfo moduleModelInfo = new ModelInfo()
330 moduleResource.setModelInfo(moduleModelInfo);
331 moduleModelInfo.setModelName("VcpevspVgw1111..base_vcpe_vgw..module-0")
332 moduleModelInfo.setModelUuid("cf35b6b8-1f31-4efc-87a7-d53f840b8fdf")
333 moduleModelInfo.setModelInvariantUuid("3ec98c7a-ac20-49a1-9e0d-09fea7e8db45")
334 moduleModelInfo.setModelVersion("1")
335 moduleModelInfo.setModelCustomizationUuid("281085b3-4598-4c94-811d-58cc685763e7")
336 moduleModelInfo.setModelCustomizationName("")
337 moduleModelInfo.setModelInstanceName("")
338 moduleModelInfo.setModelType("")
339 moduleResource.setResourceInstance(new ResourceInstance())
340 moduleResource.setHomingSolution(new HomingSolution())
341 moduleResource.setHasVolumeGroup(false)
342 moduleResource.setIsBase(true)
343 moduleResource.setVfModuleLabel("base_vcpe_vgw")
344 moduleResource.setInitialCount(1)
346 // For testing an add-on module; not in the actual vCPE model
347 moduleResource = new ModuleResource()
348 moduleResources.add(moduleResource)
349 moduleResource.setResourceType(ResourceType.MODULE)
350 moduleModelInfo = new ModelInfo()
351 moduleResource.setModelInfo(moduleModelInfo);
352 moduleModelInfo.setModelName("VcpevspVgw1111..addon_vcpe_vgw..module-1")
353 moduleModelInfo.setModelUuid("8c8b41b2-8466-41b4-ae8d-5924830c40e8")
354 moduleModelInfo.setModelInvariantUuid("cc250e7e-746b-4d84-8064-df20c74213a6")
355 moduleModelInfo.setModelVersion("1")
356 moduleModelInfo.setModelCustomizationUuid("99424afc-1fb4-4598-a99b-3e0690b4cb03")
357 moduleModelInfo.setModelCustomizationName("")
358 moduleModelInfo.setModelInstanceName("")
359 moduleModelInfo.setModelType("")
360 moduleResource.setResourceInstance(new ResourceInstance())
361 moduleResource.setHomingSolution(new HomingSolution())
362 moduleResource.setHasVolumeGroup(false)
363 moduleResource.setIsBase(false)
364 moduleResource.setVfModuleLabel("addon_vcpe_vgw")
365 moduleResource.setInitialCount(1)
367 serviceDecomposition.setNetworkResources(new ArrayList<NetworkResource>())
369 List<AllottedResource> allottedResources = new ArrayList<AllottedResource>()
370 serviceDecomposition.setAllottedResources(allottedResources)
372 AllottedResource ar = new AllottedResource()
373 allottedResources.add(ar)
374 ar.setResourceId("ed4a3a9a-1411-4924-a9ee-61a41871a040")
375 ar.setResourceType(ResourceType.ALLOTTED_RESOURCE)
376 ModelInfo arModelInfo = new ModelInfo()
377 ar.setModelInfo(arModelInfo)
378 arModelInfo.setModelName("vcpear_tunnelxconn_1111")
379 arModelInfo.setModelUuid("d99e5442-c5e4-4197-ad8d-54f7ad43dd83")
380 arModelInfo.setModelInvariantUuid("61c17371-e824-4587-a9bb-21782aa28391")
381 arModelInfo.setModelVersion("1.0")
382 arModelInfo.setModelCustomizationUuid("506bb474-b8c2-41fd-aeec-4371c3ef58a4")
383 arModelInfo.setModelCustomizationName("")
384 arModelInfo.setModelInstanceName("vcpear_tunnelxconn_1111 0")
385 arModelInfo.setModelType("")
386 ar.setResourceInstance(new ResourceInstance())
387 HomingSolution homingSolution = new HomingSolution()
388 ar.setHomingSolution(homingSolution)
389 homingSolution.setInventoryType(InventoryType.service)
390 homingSolution.setServiceInstanceId("d600c1c0-ff45-40e4-bf29-45a95fa64556")
391 homingSolution.setCloudOwner("CloudOwner")
392 homingSolution.setCloudRegionId("RegionOne")
393 VnfResource vnf = new VnfResource()
394 homingSolution.setVnf(vnf)
395 vnf.setResourceId("cea5e96e-9c67-437c-bf94-2329d277be09")
396 vnf.setResourceType(ResourceType.VNF)
397 vnf.setResourceInstance(new ResourceInstance())
398 vnf.setHomingSolution(new HomingSolution())
399 vnf.setVnfHostname("vnfHostName")
400 homingSolution.setLicense(new License())
401 homingSolution.setRehome(false)
402 ar.setToscaNodeType("org.openecomp.resource.vf.VcpearTunnelxconn1111")
403 ar.setAllottedResourceType("TunnelXConnect")
404 ar.setAllottedResourceRole("TunnelXConn")
405 ar.setProvidingServiceModelName("org.openecomp.service.VcpesvcVgmux1111")
406 ar.setProvidingServiceModelInvariantUuid("d5751cb3-b9e9-470b-9c29-76a5e3ea12d0")
407 ar.setProvidingServiceModelUuid("61b6e96a-f0c6-4f34-a91c-dab3574dd025")
408 ar.setNfType("TunnelXConn")
409 ar.setNfRole("TunnelXConn")
411 ar = new AllottedResource()
412 allottedResources.add(ar)
413 ar.setResourceId("3b1b3686-ccfe-4e7c-9d6b-76419db398f9")
414 ar.setResourceType(ResourceType.ALLOTTED_RESOURCE)
415 arModelInfo = new ModelInfo()
416 ar.setModelInfo(arModelInfo)
417 arModelInfo.setModelName("vcpear_brg_1111")
418 arModelInfo.setModelUuid("6b0a5aa5-98d8-455c-8cd1-618a3f1ac859")
419 arModelInfo.setModelInvariantUuid("531f9aa5-dea4-4958-89ad-ef03f77cbf07")
420 arModelInfo.setModelVersion("1.0")
421 arModelInfo.setModelCustomizationUuid("d23ac3fe-ea54-4060-a7c1-ec9178c79620")
422 arModelInfo.setModelCustomizationName("")
423 arModelInfo.setModelInstanceName("vcpear_brg_1111 0")
424 arModelInfo.setModelType("")
425 ar.setResourceInstance(new ResourceInstance())
426 homingSolution = new HomingSolution()
427 ar.setHomingSolution(homingSolution)
428 homingSolution.setInventoryType(InventoryType.service)
429 homingSolution.setServiceInstanceId("bc28ebca-0cc3-4bf8-9ce9-d1524e4bec79")
430 homingSolution.setCloudOwner("CloudOwner")
431 homingSolution.setCloudRegionId("RegionOne")
432 vnf = new VnfResource()
433 homingSolution.setVnf(vnf)
434 vnf.setResourceId("65183e95-e6f1-46cb-9315-2da27a24c2b9")
435 vnf.setResourceType(ResourceType.VNF)
436 vnf.setResourceInstance(new ResourceInstance())
437 vnf.setHomingSolution(new HomingSolution())
438 vnf.setVnfHostname("vnfHostName")
439 homingSolution.setLicense(new License())
440 homingSolution.setRehome(false)
441 ar.setToscaNodeType("org.openecomp.resource.vf.VcpearBrg1111")
442 ar.setAllottedResourceType("BRG")
443 ar.setAllottedResourceRole("BRG")
444 ar.setProvidingServiceModelName("org.openecomp.service.VcpesvcVbrg1111")
445 ar.setProvidingServiceModelInvariantUuid("6eff53bf-0045-41b0-bd48-b4e1284e5b7a")
446 ar.setProvidingServiceModelUuid("0e500bca-15ac-42eb-a2f1-4bfd3b2828ff")
450 return serviceDecomposition