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.infrastructure.adapter.vnf.tasks;
 
  23 import static org.junit.Assert.assertEquals;
 
  24 import static org.mockito.ArgumentMatchers.any;
 
  25 import static org.mockito.ArgumentMatchers.eq;
 
  26 import static org.mockito.Mockito.doReturn;
 
  27 import static org.mockito.Mockito.doThrow;
 
  28 import static org.mockito.Mockito.times;
 
  29 import static org.mockito.Mockito.verify;
 
  30 import static org.mockito.Mockito.when;
 
  32 import org.camunda.bpm.engine.delegate.BpmnError;
 
  33 import org.junit.Test;
 
  34 import org.mockito.ArgumentMatchers;
 
  35 import org.mockito.InjectMocks;
 
  36 import org.onap.so.adapters.vnfrest.CreateVfModuleRequest;
 
  37 import org.onap.so.adapters.vnfrest.CreateVolumeGroupRequest;
 
  38 import org.onap.so.bpmn.BaseTaskTest;
 
  39 import org.onap.so.bpmn.common.BuildingBlockExecution;
 
  40 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 
  41 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 
  42 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 
  43 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 
  44 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
 
  45 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 
  46 import org.onap.so.bpmn.servicedecomposition.generalobjects.OrchestrationContext;
 
  47 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
 
  48 import org.onap.so.db.catalog.beans.OrchestrationStatus;
 
  50 public class VnfAdapterCreateTasksTest extends BaseTaskTest{
 
  52         private VnfAdapterCreateTasks vnfAdapterCreateTasks = new VnfAdapterCreateTasks();
 
  56         public void test_createVolumeGroupRequest() throws Exception {
 
  57                 RequestContext requestContext = setRequestContext();
 
  59                 ServiceInstance serviceInstance = setServiceInstance();
 
  61                 GenericVnf genericVnf = setGenericVnf();
 
  63                 VfModule vfModule = setVfModule();
 
  64                 vfModule.setSelflink("vfModuleSelfLink");
 
  65                 VolumeGroup volumeGroup = setVolumeGroup();
 
  66                 volumeGroup.setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
 
  68                 CloudRegion cloudRegion = setCloudRegion();
 
  70                 OrchestrationContext orchestrationContext = setOrchestrationContext();
 
  71                 orchestrationContext.setIsRollbackEnabled(true);
 
  73                 String sdncVnfQueryResponse = "SDNCVnfQueryResponse";
 
  74         execution.setVariable("SDNCQueryResponse_" + vfModule.getVfModuleId(), sdncVnfQueryResponse);
 
  76         CreateVolumeGroupRequest request = new CreateVolumeGroupRequest();
 
  77         request.setVolumeGroupId("volumeGroupStackId");
 
  79         when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(genericVnf);
 
  80                 when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VOLUME_GROUP_ID))).thenReturn(volumeGroup);
 
  81                 when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
  82                 doReturn(request).when(vnfAdapterVolumeGroupResources).createVolumeGroupRequest(requestContext, cloudRegion, orchestrationContext, serviceInstance, genericVnf, volumeGroup, sdncVnfQueryResponse);
 
  84         vnfAdapterCreateTasks.createVolumeGroupRequest(execution);
 
  86                 verify(vnfAdapterVolumeGroupResources, times(1)).createVolumeGroupRequest(requestContext, cloudRegion, orchestrationContext, serviceInstance, genericVnf,  volumeGroup, sdncVnfQueryResponse);
 
  88                 assertEquals(request.toXmlString(), execution.getVariable("VNFREST_Request"));
 
  92         public void test_createVolumeGroupRequest_for_alaCarte_flow() throws Exception {
 
  93                 RequestContext requestContext = setRequestContext();
 
  94                 ServiceInstance serviceInstance = setServiceInstance();
 
  95                 GenericVnf genericVnf = setGenericVnf();
 
  96                 VolumeGroup volumeGroup = setVolumeGroup();
 
  97                 volumeGroup.setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
 
  99                 VfModule vfModule = setVfModule();
 
 100                 vfModule.setSelflink("vfModuleSelfLink");
 
 102                 CloudRegion cloudRegion = setCloudRegion();
 
 104                 OrchestrationContext orchestrationContext = setOrchestrationContext();
 
 105                 orchestrationContext.setIsRollbackEnabled(true);
 
 107         CreateVolumeGroupRequest request = new CreateVolumeGroupRequest();
 
 108         request.setVolumeGroupId("volumeGroupStackId");
 
 110         when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(genericVnf);
 
 111                 when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VOLUME_GROUP_ID))).thenReturn(volumeGroup);
 
 112                 when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 113                 doReturn(request).when(vnfAdapterVolumeGroupResources).createVolumeGroupRequest(requestContext, cloudRegion, orchestrationContext, serviceInstance, genericVnf,  volumeGroup, null);
 
 115                 vnfAdapterCreateTasks.createVolumeGroupRequest(execution);
 
 117                 verify(vnfAdapterVolumeGroupResources, times(1)).createVolumeGroupRequest(any(RequestContext.class), 
 
 118                                 any(CloudRegion.class), any(OrchestrationContext.class), eq(serviceInstance), eq(genericVnf),  eq(volumeGroup), ArgumentMatchers.isNull());
 
 120                 assertEquals(request.toXmlString(),  execution.getVariable("VNFREST_Request"));
 
 124         public void test_createVolumeGroupRequest_exception() throws Exception {
 
 125                 doThrow(RuntimeException.class).when(extractPojosForBB).extractByKey(any(),ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID));
 
 126                 doThrow(new BpmnError("BPMN Error")).when(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(7000), any(Exception.class));
 
 127                 expectedException.expect(BpmnError.class);
 
 129                 vnfAdapterCreateTasks.createVolumeGroupRequest(execution);
 
 133         public void test_createVfModule() throws Exception {
 
 134                 RequestContext requestContext = setRequestContext();
 
 136                 ServiceInstance serviceInstance = setServiceInstance();
 
 138                 GenericVnf genericVnf = setGenericVnf();
 
 140                 VfModule vfModule = setVfModule();
 
 142                 CloudRegion cloudRegion = setCloudRegion();
 
 144                 OrchestrationContext orchestrationContext = setOrchestrationContext();
 
 145                 orchestrationContext.setIsRollbackEnabled(true);
 
 147                 CreateVfModuleRequest modRequest = new CreateVfModuleRequest();
 
 148                 modRequest.setVfModuleId(vfModule.getVfModuleId());
 
 149                 modRequest.setBaseVfModuleStackId("baseVfModuleStackId");
 
 150                 modRequest.setVfModuleName(vfModule.getVfModuleName());
 
 151                 CreateVfModuleRequest createVfModuleRequest = modRequest;
 
 153                 String sdncVfModuleQueryResponse = "{someJson}";
 
 154                 execution.setVariable("SDNCQueryResponse_" + vfModule.getVfModuleId(), sdncVfModuleQueryResponse);
 
 156                 String sdncVnfQueryResponse = "{someJson}";
 
 157                 execution.setVariable("SDNCQueryResponse_" + genericVnf.getVnfId(), sdncVnfQueryResponse);
 
 159                 when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(genericVnf);
 
 160                 when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 162                 doReturn(createVfModuleRequest).when(vnfAdapterVfModuleResources).createVfModuleRequest(requestContext, cloudRegion, orchestrationContext, serviceInstance, 
 
 163                                 genericVnf, vfModule, null, sdncVnfQueryResponse, sdncVfModuleQueryResponse);
 
 165                 vnfAdapterCreateTasks.createVfModule(execution);
 
 167                 verify(vnfAdapterVfModuleResources, times(1)).createVfModuleRequest(requestContext, cloudRegion, orchestrationContext, serviceInstance, 
 
 168                                 genericVnf, vfModule, null, sdncVnfQueryResponse, sdncVfModuleQueryResponse);
 
 170                 assertEquals(execution.getVariable("VNFREST_Request"), createVfModuleRequest.toXmlString());
 
 174         public void test_createVfModuleWithVolumeGroup() throws Exception {
 
 175                 RequestContext requestContext = setRequestContext();
 
 177                 ServiceInstance serviceInstance = setServiceInstance();
 
 179                 GenericVnf genericVnf = setGenericVnf();
 
 181                 VfModule vfModule = setVfModule();
 
 183                 VolumeGroup volumeGroup = setVolumeGroup();
 
 185                 CloudRegion cloudRegion = setCloudRegion();
 
 187                 OrchestrationContext orchestrationContext = setOrchestrationContext();
 
 188                 orchestrationContext.setIsRollbackEnabled(true);
 
 190                 CreateVfModuleRequest modRequest = new CreateVfModuleRequest();
 
 191                 modRequest.setVfModuleId(vfModule.getVfModuleId());
 
 192                 modRequest.setBaseVfModuleStackId("baseVfModuleStackId");
 
 193                 modRequest.setVfModuleName(vfModule.getVfModuleName());
 
 194                 CreateVfModuleRequest createVfModuleRequest = modRequest;
 
 196                 String sdncVfModuleQueryResponse = "{someJson}";
 
 197                 execution.setVariable("SDNCQueryResponse_" + vfModule.getVfModuleId(), sdncVfModuleQueryResponse);
 
 199                 String sdncVnfQueryResponse = "{someJson}";
 
 200                 execution.setVariable("SDNCQueryResponse_" + genericVnf.getVnfId(), sdncVnfQueryResponse);
 
 202                 when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(genericVnf);
 
 203                 when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VOLUME_GROUP_ID))).thenReturn(volumeGroup);
 
 204                 when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 205                 doReturn(createVfModuleRequest).when(vnfAdapterVfModuleResources).createVfModuleRequest(requestContext, cloudRegion, orchestrationContext, serviceInstance, 
 
 206                                 genericVnf, vfModule, volumeGroup, sdncVnfQueryResponse, sdncVfModuleQueryResponse);
 
 208                 vnfAdapterCreateTasks.createVfModule(execution);
 
 210                 verify(vnfAdapterVfModuleResources, times(1)).createVfModuleRequest(requestContext, cloudRegion, orchestrationContext, serviceInstance, 
 
 211                                 genericVnf, vfModule, volumeGroup, sdncVnfQueryResponse, sdncVfModuleQueryResponse);
 
 213                 assertEquals(execution.getVariable("VNFREST_Request"), createVfModuleRequest.toXmlString());
 
 217         public void createVfModuleExceptionTest() throws Exception {
 
 218                 // run with no data setup, and it will throw a BBObjectNotFoundException
 
 219                 doThrow(RuntimeException.class).when(extractPojosForBB).extractByKey(any(),ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID));
 
 220                 doThrow(new BpmnError("BPMN Error")).when(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(7000), any(Exception.class));
 
 221                 expectedException.expect(BpmnError.class);
 
 222                 vnfAdapterCreateTasks.createVolumeGroupRequest(execution);