Added ETSI Delete VNF BB 26/83326/4
authorLathish <lathishbabu.ganesan@est.tech>
Sat, 30 Mar 2019 16:41:10 +0000 (16:41 +0000)
committerLathish <lathishbabu.ganesan@est.tech>
Sat, 30 Mar 2019 16:41:10 +0000 (16:41 +0000)
Change-Id: Ie82734f25468b75d9b4ab3096639a9afdf6fe2c1
Issue-ID: SO-1632
Signed-off-by: Lathish <lathishbabu.ganesan@est.tech>
12 files changed:
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/EtsiVnfDeleteBB.bpmn [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/Constants.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/EtsiVnfDeleteTask.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/VnfmAdapterServiceProvider.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/VnfmAdapterServiceProviderImpl.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/VnfmAdapterUrlProvider.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/EtsiVnfDeleteTaskTest.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/StubbedBuildingBlockExecution.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/VnfmAdapterCreateVnfTaskTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/VnfmAdapterServiceProviderImplTest.java
common/src/main/java/org/onap/so/rest/service/HttpRestServiceProvider.java
common/src/main/java/org/onap/so/rest/service/HttpRestServiceProviderImpl.java

diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/EtsiVnfDeleteBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/EtsiVnfDeleteBB.bpmn
new file mode 100644 (file)
index 0000000..7f70cc5
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1as67q3" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="2.2.4">
+  <bpmn:process id="vnfmFoundCheck" name="vnfmFoundCheck" isExecutable="true">
+    <bpmn:startEvent id="StartEvent_0i3wi1x">
+      <bpmn:outgoing>SequenceFlow_01pwrcr</bpmn:outgoing>
+    </bpmn:startEvent>
+    <bpmn:serviceTask id="ServiceTask_1d5jbsa" name="&#10;Invoke VNFM Adaptor&#10;" camunda:asyncAfter="true" camunda:expression="${EtsiVnfDeleteTask.invokeVnfmAdapter(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_01pwrcr</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1064iul</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:endEvent id="EndEvent_1khf4qw">
+      <bpmn:incoming>SequenceFlow_1064iul</bpmn:incoming>
+    </bpmn:endEvent>
+    <bpmn:sequenceFlow id="SequenceFlow_1064iul" sourceRef="ServiceTask_1d5jbsa" targetRef="EndEvent_1khf4qw" />
+    <bpmn:sequenceFlow id="SequenceFlow_01pwrcr" sourceRef="StartEvent_0i3wi1x" targetRef="ServiceTask_1d5jbsa" />
+  </bpmn:process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="vnfmFoundCheck">
+      <bpmndi:BPMNShape id="StartEvent_0i3wi1x_di" bpmnElement="StartEvent_0i3wi1x">
+        <dc:Bounds x="325" y="183" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1d5jbsa_di" bpmnElement="ServiceTask_1d5jbsa">
+        <dc:Bounds x="503" y="161" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_1khf4qw_di" bpmnElement="EndEvent_1khf4qw">
+        <dc:Bounds x="742" y="183" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1064iul_di" bpmnElement="SequenceFlow_1064iul">
+        <di:waypoint x="603" y="201" />
+        <di:waypoint x="742" y="201" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_01pwrcr_di" bpmnElement="SequenceFlow_01pwrcr">
+        <di:waypoint x="361" y="201" />
+        <di:waypoint x="503" y="201" />
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</bpmn:definitions>
index 667ac13..0153b4b 100644 (file)
@@ -25,21 +25,20 @@ package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
  */
 public class Constants {
 
-    public static final String CREATE_VNF_REQUEST_PARAM_NAME = "createVnfRequest";
-    public static final String CREATE_VNF_RESPONSE_PARAM_NAME = "createVnfResponse";
-    
-    public static final String INPUT_PARAMETER = "inputParameter";
+  public static final String CREATE_VNF_REQUEST_PARAM_NAME = "createVnfRequest";
+  public static final String CREATE_VNF_RESPONSE_PARAM_NAME = "createVnfResponse";
+  public static final String INPUT_PARAMETER = "inputParameter";
+  public static final String DELETE_VNF_RESPONSE_PARAM_NAME = "deleteVnfResponse";
 
-    public static final String DOT = ".";
-    public static final String UNDERSCORE = "_";
-    public static final String SPACE = "\\s+";
+  public static final String DOT = ".";
+  public static final String UNDERSCORE = "_";
+  public static final String SPACE = "\\s+";
 
-    public static final String VNFM_ADAPTER_DEFAULT_URL = "http://so-vnfm-adapter.onap:9092/so/vnfm-adapter/v1/";
-    public static final String VNFM_ADAPTER_DEFAULT_AUTH = "Basic dm5mbTpwYXNzd29yZDEk";
-    
-    public static final String FORWARD_SLASH = "/";
-    public static final String PRELOAD_VNFS_URL = "/restconf/config/VNF-API:preload-vnfs/vnf-preload-list/";
+  public static final String VNFM_ADAPTER_DEFAULT_URL = "http://so-vnfm-adapter.onap:9092/so/vnfm-adapter/v1/";
+  public static final String VNFM_ADAPTER_DEFAULT_AUTH = "Basic dm5mbTpwYXNzd29yZDEk";
 
+  public static final String FORWARD_SLASH = "/";
+  public static final String PRELOAD_VNFS_URL = "/restconf/config/VNF-API:preload-vnfs/vnf-preload-list/";
 
-    private Constants() {}
+  private Constants() {}
 }
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/EtsiVnfDeleteTask.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/EtsiVnfDeleteTask.java
new file mode 100644 (file)
index 0000000..857c5cb
--- /dev/null
@@ -0,0 +1,84 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
+
+import static org.onap.so.bpmn.servicedecomposition.entities.ResourceKey.GENERIC_VNF_ID;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
+import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
+import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.vnfmadapter.v1.model.DeleteVnfResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import com.google.common.base.Optional;
+
+/**
+ *
+ * @author Lathishbabu Ganesan (lathishbabu.ganesan@est.tech)
+ */
+@Component
+public class EtsiVnfDeleteTask {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(EtsiVnfDeleteTask.class);
+  private final ExtractPojosForBB extractPojosForBB;
+  private final ExceptionBuilder exceptionUtil;
+  private final VnfmAdapterServiceProvider vnfmAdapterServiceProvider;
+
+  @Autowired
+  public EtsiVnfDeleteTask(final ExceptionBuilder exceptionUtil, final ExtractPojosForBB extractPojosForBB,
+      final VnfmAdapterServiceProvider vnfmAdapterServiceProvider) {
+    this.exceptionUtil = exceptionUtil;
+    this.extractPojosForBB = extractPojosForBB;
+    this.vnfmAdapterServiceProvider = vnfmAdapterServiceProvider;
+  }
+
+  /**
+   * Invoke VNFM adapter to delete the VNF
+   *
+   * @param execution {@link org.onap.so.bpmn.common.DelegateExecutionImpl}
+   */
+  public void invokeVnfmAdapter(final BuildingBlockExecution execution) {
+    try {
+      LOGGER.debug("Executing invokeVnfmAdapter  ...");
+      final GenericVnf vnf = extractPojosForBB.extractByKey(execution, GENERIC_VNF_ID);
+
+      final Optional<DeleteVnfResponse> response = vnfmAdapterServiceProvider.invokeDeleteRequest(vnf.getVnfId());
+
+      if (!response.isPresent()) {
+        final String errorMessage = "Unexpected error while processing delete request";
+        LOGGER.error(errorMessage);
+        exceptionUtil.buildAndThrowWorkflowException(execution, 1211, errorMessage);
+      }
+
+      final DeleteVnfResponse vnfResponse = response.get();
+
+      LOGGER.debug("Vnf delete response: {}", vnfResponse);
+      execution.setVariable(Constants.DELETE_VNF_RESPONSE_PARAM_NAME, vnfResponse);
+
+      LOGGER.debug("Finished executing invokeVnfmAdapter ...");
+    } catch (final Exception exception) {
+      LOGGER.error("Unable to invoke delete request", exception);
+      exceptionUtil.buildAndThrowWorkflowException(execution, 1212, exception);
+    }
+  }
+}
index 02303ef..a76a4bf 100644 (file)
@@ -22,17 +22,19 @@ package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
 
 import org.onap.vnfmadapter.v1.model.CreateVnfRequest;
 import org.onap.vnfmadapter.v1.model.CreateVnfResponse;
-
+import org.onap.vnfmadapter.v1.model.DeleteVnfResponse;
 import com.google.common.base.Optional;
 
 
 /**
  * Provide a service which interacts with VNFM adapter for instantiating, monitoring VNF
- * 
+ *
  * @author waqas.ikram@est.tech
  */
 public interface VnfmAdapterServiceProvider {
 
-    Optional<CreateVnfResponse> invokeCreateInstantiationRequest(final String vnfId, final CreateVnfRequest request);
+  Optional<CreateVnfResponse> invokeCreateInstantiationRequest(final String vnfId, final CreateVnfRequest request);
+
+  Optional<DeleteVnfResponse> invokeDeleteRequest(final String vnfId);
 
 }
index afdcccf..f727423 100644 (file)
@@ -25,13 +25,13 @@ import org.onap.so.rest.exceptions.RestProcessingException;
 import org.onap.so.rest.service.HttpRestServiceProvider;
 import org.onap.vnfmadapter.v1.model.CreateVnfRequest;
 import org.onap.vnfmadapter.v1.model.CreateVnfResponse;
+import org.onap.vnfmadapter.v1.model.DeleteVnfResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
-
 import com.google.common.base.Optional;
 
 /**
@@ -40,50 +40,85 @@ import com.google.common.base.Optional;
 @Service
 public class VnfmAdapterServiceProviderImpl implements VnfmAdapterServiceProvider {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(VnfmAdapterServiceProviderImpl.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(VnfmAdapterServiceProviderImpl.class);
+
+  private final VnfmAdapterUrlProvider urlProvider;
+  private final HttpRestServiceProvider httpServiceProvider;
+
+  @Autowired
+  public VnfmAdapterServiceProviderImpl(final VnfmAdapterUrlProvider urlProvider,
+      final HttpRestServiceProvider httpServiceProvider) {
+    this.urlProvider = urlProvider;
+    this.httpServiceProvider = httpServiceProvider;
+  }
+
+  @Override
+  public Optional<CreateVnfResponse> invokeCreateInstantiationRequest(final String vnfId,
+      final CreateVnfRequest request) {
+    try {
+      final String url = urlProvider.getCreateInstantiateUrl(vnfId);
+
+      final ResponseEntity<CreateVnfResponse> response =
+          httpServiceProvider.postHttpRequest(request, url, CreateVnfResponse.class);
+
+      final HttpStatus httpStatus = response.getStatusCode();
+      if (!(httpStatus.equals(HttpStatus.ACCEPTED)) && !(httpStatus.equals(HttpStatus.OK))) {
+        LOGGER.error("Unable to invoke HTTP POST using URL: {}, Response Code: {}", url, httpStatus.value());
+        return Optional.absent();
+      }
+
+      if (!response.hasBody()) {
+        LOGGER.error("Received response without body: {}", response);
+        return Optional.absent();
+      }
+
+      final CreateVnfResponse createVnfResponse = response.getBody();
 
-    private final VnfmAdapterUrlProvider urlProvider;
-    private final HttpRestServiceProvider httpServiceProvider;
+      if (createVnfResponse.getJobId() == null || createVnfResponse.getJobId().isEmpty()) {
+        LOGGER.error("Received invalid instantiation response: {}", response);
+        return Optional.absent();
+      }
 
-    @Autowired
-    public VnfmAdapterServiceProviderImpl(final VnfmAdapterUrlProvider urlProvider,
-            final HttpRestServiceProvider httpServiceProvider) {
-        this.urlProvider = urlProvider;
-        this.httpServiceProvider = httpServiceProvider;
+      return Optional.of(createVnfResponse);
+    } catch (final RestProcessingException | InvalidRestRequestException httpInvocationException) {
+      LOGGER.error("Unexpected error while processing create and instantiation request", httpInvocationException);
+      return Optional.absent();
     }
 
-    @Override
-    public Optional<CreateVnfResponse> invokeCreateInstantiationRequest(final String vnfId,
-            final CreateVnfRequest request) {
-        try {
-            final String url = urlProvider.getCreateInstantiateUrl(vnfId);
+  }
 
-            final ResponseEntity<CreateVnfResponse> response =
-                    httpServiceProvider.postHttpRequest(request, url, CreateVnfResponse.class);
+  @Override
+  public Optional<DeleteVnfResponse> invokeDeleteRequest(final String vnfId) {
+    try {
+      final String url = urlProvider.getDeleteUrl(vnfId);
+      LOGGER.debug("Will send request to vnfm adapter using url: {}", url);
 
-            final HttpStatus httpStatus = response.getStatusCode();
-            if (!(httpStatus.equals(HttpStatus.ACCEPTED)) && !(httpStatus.equals(HttpStatus.OK))) {
-                LOGGER.error("Unable to invoke HTTP POST using URL: {}, Response Code: {}", url, httpStatus.value());
-                return Optional.absent();
-            }
+      final ResponseEntity<DeleteVnfResponse> response =
+          httpServiceProvider.deleteHttpRequest(url, DeleteVnfResponse.class);
 
-            if (!response.hasBody()) {
-                LOGGER.error("Received response without body: {}", response);
-                return Optional.absent();
-            }
+      LOGGER.debug("Response received: ", response);
 
-            final CreateVnfResponse createVnfResponse = response.getBody();
+      final HttpStatus httpStatus = response.getStatusCode();
 
-            if (createVnfResponse.getJobId() == null || createVnfResponse.getJobId().isEmpty()) {
-                LOGGER.error("Received invalid instantiation response: {}", response);
-                return Optional.absent();
-            }
+      if (!(httpStatus.equals(HttpStatus.ACCEPTED)) && !(httpStatus.equals(HttpStatus.OK))) {
+        LOGGER.error("Unable to invoke HTTP DELETE using URL: {}, Response Code: {}", url, httpStatus.value());
+        return Optional.absent();
+      }
 
-            return Optional.of(createVnfResponse);
-        } catch (final RestProcessingException | InvalidRestRequestException httpInvocationException) {
-            LOGGER.error("Unexpected error while processing create and instantiation request", httpInvocationException);
-            return Optional.absent();
-        }
+      if (!response.hasBody()) {
+        LOGGER.error("Received response without body: {}", response);
+        return Optional.absent();
+      }
+      final DeleteVnfResponse deleteVnfResponse = response.getBody();
 
+      if (deleteVnfResponse.getJobId() == null || deleteVnfResponse.getJobId().isEmpty()) {
+        LOGGER.error("Received invalid delete response: {}", response);
+        return Optional.absent();
+      }
+      return Optional.of(deleteVnfResponse);
+    } catch (final RestProcessingException | InvalidRestRequestException httpInvocationException) {
+      LOGGER.error("Unexpected error while processing delete request", httpInvocationException);
+      return Optional.absent();
     }
+  }
 }
index 03ee071..61063fe 100644 (file)
@@ -21,7 +21,6 @@
 package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
 
 import java.net.URI;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.util.UriComponentsBuilder;
@@ -36,23 +35,34 @@ import org.springframework.web.util.UriComponentsBuilder;
 @Service
 public class VnfmAdapterUrlProvider {
 
-    private final URI baseUri;
-
-    @Autowired
-    public VnfmAdapterUrlProvider(final VnfmBasicHttpConfigProvider etsiVnfmAdapter) {
-        this.baseUri = UriComponentsBuilder.fromHttpUrl(etsiVnfmAdapter.getUrl()).build().toUri();
-    }
-
-    /**
-     * Get VNFM create and instantiate URL
-     * 
-     * @param vnfId The identifier of the VNF. This must be the vnf-id of an existing generic-vnf in
-     *        AAI.
-     * @return VNFM create and instantiate URL
-     */
-    public String getCreateInstantiateUrl(final String vnfId) {
-        return UriComponentsBuilder.fromUri(baseUri).pathSegment("vnfs").pathSegment(vnfId).build().toString();
-    }
+  private final URI baseUri;
+
+  @Autowired
+  public VnfmAdapterUrlProvider(final VnfmBasicHttpConfigProvider etsiVnfmAdapter) {
+    this.baseUri = UriComponentsBuilder.fromHttpUrl(etsiVnfmAdapter.getUrl()).build().toUri();
+  }
+
+  /**
+   * Get VNFM create and instantiate URL
+   * 
+   * @param vnfId The identifier of the VNF. This must be the vnf-id of an existing generic-vnf in
+   *        AAI.
+   * @return VNFM create and instantiate URL
+   */
+  public String getCreateInstantiateUrl(final String vnfId) {
+    return UriComponentsBuilder.fromUri(baseUri).pathSegment("vnfs").pathSegment(vnfId).build().toString();
+  }
+
+  /**
+   * Get VNFM delete URL
+   * 
+   * @param vnfId The identifier of the VNF. This must be the vnf-id of an existing generic-vnf in
+   *        AAI.
+   * @return VNFM delete URL
+   */
+  public String getDeleteUrl(final String vnfId) {
+    return UriComponentsBuilder.fromUri(baseUri).pathSegment("vnfs").pathSegment(vnfId).build().toString();
+  }
 
 
 }
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/EtsiVnfDeleteTaskTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/EtsiVnfDeleteTaskTest.java
new file mode 100644 (file)
index 0000000..5c76018
--- /dev/null
@@ -0,0 +1,111 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import java.util.UUID;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.onap.so.bpmn.BaseTaskTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
+import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
+import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
+import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
+import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
+import org.onap.vnfmadapter.v1.model.DeleteVnfResponse;
+import com.google.common.base.Optional;
+
+/**
+ *
+ * @author Lathishbabu Ganesan (lathishbabu.ganesan@est.tech)
+ *
+ */
+public class EtsiVnfDeleteTaskTest extends BaseTaskTest {
+
+  private static final String MODEL_INSTANCE_NAME = "MODEL_INSTANCE_NAME";
+
+  private static final String VNF_ID = UUID.randomUUID().toString();
+
+  private static final String VNF_NAME = "VNF_NAME";
+
+  private static final String JOB_ID = UUID.randomUUID().toString();
+
+  @Mock
+  private VnfmAdapterServiceProvider mockedVnfmAdapterServiceProvider;
+
+  @Mock
+  private GeneralBuildingBlock buildingBlock;
+
+  @Mock
+  private RequestContext requestContext;
+
+  private final BuildingBlockExecution stubbedxecution = new StubbedBuildingBlockExecution();
+
+  @Test
+  public void testInvokeVnfmAdapter() throws Exception {
+    final EtsiVnfDeleteTask objUnderTest = getEtsiVnfDeleteTask();
+    when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(getGenericVnf());
+    when(mockedVnfmAdapterServiceProvider.invokeDeleteRequest(eq(VNF_ID))).thenReturn(getDeleteVnfResponse());
+    objUnderTest.invokeVnfmAdapter(stubbedxecution);
+    assertNotNull(stubbedxecution.getVariable(Constants.DELETE_VNF_RESPONSE_PARAM_NAME));
+  }
+
+  @Test
+  public void testInvokeVnfmAdapterException() throws Exception {
+    final EtsiVnfDeleteTask objUnderTest = getEtsiVnfDeleteTask();
+    when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(getGenericVnf());
+    when(mockedVnfmAdapterServiceProvider.invokeDeleteRequest(eq(VNF_ID))).thenReturn(Optional.absent());
+    objUnderTest.invokeVnfmAdapter(stubbedxecution);
+    assertNull(stubbedxecution.getVariable(Constants.DELETE_VNF_RESPONSE_PARAM_NAME));
+    verify(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(1212),
+        any(Exception.class));
+  }
+
+  private Optional<DeleteVnfResponse> getDeleteVnfResponse() {
+    final DeleteVnfResponse response = new DeleteVnfResponse();
+    response.setJobId(JOB_ID);
+    return Optional.of(response);
+  }
+
+  private GenericVnf getGenericVnf() {
+    final GenericVnf genericVnf = new GenericVnf();
+    genericVnf.setVnfId(VNF_ID);
+    genericVnf.setModelInfoGenericVnf(getModelInfoGenericVnf());
+    genericVnf.setVnfName(VNF_NAME);
+    return genericVnf;
+  }
+
+  private ModelInfoGenericVnf getModelInfoGenericVnf() {
+    final ModelInfoGenericVnf modelInfoGenericVnf = new ModelInfoGenericVnf();
+    modelInfoGenericVnf.setModelInstanceName(MODEL_INSTANCE_NAME);
+    return modelInfoGenericVnf;
+  }
+
+  private EtsiVnfDeleteTask getEtsiVnfDeleteTask() {
+    return new EtsiVnfDeleteTask(exceptionUtil, extractPojosForBB, mockedVnfmAdapterServiceProvider);
+  }
+}
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/StubbedBuildingBlockExecution.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnfm/tasks/StubbedBuildingBlockExecution.java
new file mode 100644 (file)
index 0000000..260585d
--- /dev/null
@@ -0,0 +1,100 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.bpmn.common.exceptions.RequiredExecutionVariableExeception;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
+import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
+import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
+
+/**
+ *
+ * @author Lathishbabu Ganesan (lathishbabu.ganesan@est.tech)
+ *
+ */
+public class StubbedBuildingBlockExecution implements BuildingBlockExecution {
+
+  private static final String CLOUD_OWNER = "CLOUD_OWNER";
+  private static final String LCP_CLOUD_REGIONID = "RegionOnce";
+  private static final String TENANT_ID = UUID.randomUUID().toString();
+  private final Map<String, Serializable> execution = new HashMap<>();
+  private final GeneralBuildingBlock generalBuildingBlock;
+
+  StubbedBuildingBlockExecution() {
+    generalBuildingBlock = getGeneralBuildingBlockValue();
+  }
+
+  @Override
+  public GeneralBuildingBlock getGeneralBuildingBlock() {
+    return generalBuildingBlock;
+  }
+
+  @SuppressWarnings("unchecked")
+  @Override
+  public <T> T getVariable(final String key) {
+    return (T) execution.get(key);
+  }
+
+  @Override
+  public <T> T getRequiredVariable(final String key) throws RequiredExecutionVariableExeception {
+    return null;
+  }
+
+  @Override
+  public void setVariable(final String key, final Serializable value) {
+    execution.put(key, value);
+  }
+
+  @Override
+  public Map<ResourceKey, String> getLookupMap() {
+    return Collections.emptyMap();
+  }
+
+  @Override
+  public String getFlowToBeCalled() {
+    return null;
+  }
+
+  public static String getTenantId() {
+    return TENANT_ID;
+  }
+
+  private GeneralBuildingBlock getGeneralBuildingBlockValue() {
+    final GeneralBuildingBlock buildingBlock = new GeneralBuildingBlock();
+    buildingBlock.setCloudRegion(getCloudRegion());
+    return buildingBlock;
+  }
+
+  private CloudRegion getCloudRegion() {
+    final CloudRegion cloudRegion = new CloudRegion();
+    cloudRegion.setCloudOwner(CLOUD_OWNER);
+    cloudRegion.setLcpCloudRegionId(LCP_CLOUD_REGIONID);
+    cloudRegion.setTenantId(TENANT_ID);
+    return cloudRegion;
+  }
+
+}
index 20abe6e..22c4c15 100644 (file)
@@ -30,28 +30,19 @@ import static org.mockito.Mockito.when;
 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.Constants.CREATE_VNF_REQUEST_PARAM_NAME;
 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.Constants.CREATE_VNF_RESPONSE_PARAM_NAME;
 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.Constants.INPUT_PARAMETER;
-
-import java.io.Serializable;
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.UUID;
-
 import org.junit.Test;
 import org.mockito.Mock;
 import org.onap.so.bpmn.BaseTaskTest;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
-import org.onap.so.bpmn.common.exceptions.RequiredExecutionVariableExeception;
 import org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.utils.InputParameter;
-import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
-import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
 import org.onap.vnfmadapter.v1.model.CreateVnfRequest;
 import org.onap.vnfmadapter.v1.model.CreateVnfResponse;
 import org.onap.vnfmadapter.v1.model.Tenant;
-
 import com.google.common.base.Optional;
 
 
@@ -60,191 +51,131 @@ import com.google.common.base.Optional;
  */
 public class VnfmAdapterCreateVnfTaskTest extends BaseTaskTest {
 
-    private static final String MODEL_INSTANCE_NAME = "MODEL_INSTANCE_NAME";
-
-    private static final String CLOUD_OWNER = "CLOUD_OWNER";
-
-    private static final String LCP_CLOUD_REGIONID = "RegionOnce";
-
-    private static final String TENANT_ID = UUID.randomUUID().toString();
-
-    private static final String VNF_ID = UUID.randomUUID().toString();
-
-    private static final String VNF_NAME = "VNF_NAME";
-
-    private static final String JOB_ID = UUID.randomUUID().toString();
-
-    @Mock
-    private VnfmAdapterServiceProvider mockedVnfmAdapterServiceProvider;
-
-    private final BuildingBlockExecution stubbedxecution = new StubbedBuildingBlockExecution();
-
-    @Test
-    public void testBuildCreateVnfRequest_withValidValues_storesRequestInExecution() throws Exception {
-
-        final VnfmAdapterCreateVnfTask objUnderTest = getEtsiVnfInstantiateTask();
-        stubbedxecution.setVariable(INPUT_PARAMETER,
-                new InputParameter(Collections.emptyMap(), Collections.emptyList()));
-
-        when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(getGenericVnf());
-        objUnderTest.buildCreateVnfRequest(stubbedxecution);
-
-        final CreateVnfRequest actual = stubbedxecution.getVariable(CREATE_VNF_REQUEST_PARAM_NAME);
-        assertNotNull(actual);
-        assertEquals(VNF_NAME + "." + MODEL_INSTANCE_NAME, actual.getName());
-
-        final Tenant actualTenant = actual.getTenant();
-        assertEquals(CLOUD_OWNER, actualTenant.getCloudOwner());
-        assertEquals(LCP_CLOUD_REGIONID, actualTenant.getRegionName());
-        assertEquals(TENANT_ID, actualTenant.getTenantId());
-
-    }
+  private static final String MODEL_INSTANCE_NAME = "MODEL_INSTANCE_NAME";
 
-    @Test
-    public void testBuildCreateVnfRequest_extractPojosForBBThrowsException_exceptionBuilderCalled() throws Exception {
+  private static final String CLOUD_OWNER = "CLOUD_OWNER";
 
-        final VnfmAdapterCreateVnfTask objUnderTest = getEtsiVnfInstantiateTask();
+  private static final String LCP_CLOUD_REGIONID = "RegionOnce";
 
-        when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenThrow(RuntimeException.class);
+  private static final String VNF_ID = UUID.randomUUID().toString();
 
-        objUnderTest.buildCreateVnfRequest(stubbedxecution);
+  private static final String VNF_NAME = "VNF_NAME";
 
-        final CreateVnfRequest actual = stubbedxecution.getVariable(CREATE_VNF_REQUEST_PARAM_NAME);
+  private static final String JOB_ID = UUID.randomUUID().toString();
 
-        assertNull(actual);
-        verify(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(1200),
-                any(Exception.class));
+  @Mock
+  private VnfmAdapterServiceProvider mockedVnfmAdapterServiceProvider;
 
-    }
+  private final BuildingBlockExecution stubbedxecution = new StubbedBuildingBlockExecution();
 
-    @Test
-    public void testInvokeVnfmAdapter_validValues_storesResponseInExecution() throws Exception {
+  @Test
+  public void testBuildCreateVnfRequest_withValidValues_storesRequestInExecution() throws Exception {
 
-        final VnfmAdapterCreateVnfTask objUnderTest = getEtsiVnfInstantiateTask();
+    final VnfmAdapterCreateVnfTask objUnderTest = getEtsiVnfInstantiateTask();
+    stubbedxecution.setVariable(INPUT_PARAMETER, new InputParameter(Collections.emptyMap(), Collections.emptyList()));
 
-        stubbedxecution.setVariable(CREATE_VNF_REQUEST_PARAM_NAME, new CreateVnfRequest());
+    when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(getGenericVnf());
+    objUnderTest.buildCreateVnfRequest(stubbedxecution);
 
-        when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(getGenericVnf());
-        when(mockedVnfmAdapterServiceProvider.invokeCreateInstantiationRequest(eq(VNF_ID), any(CreateVnfRequest.class)))
-                .thenReturn(getCreateVnfResponse());
+    final CreateVnfRequest actual = stubbedxecution.getVariable(CREATE_VNF_REQUEST_PARAM_NAME);
+    assertNotNull(actual);
+    assertEquals(VNF_NAME + "." + MODEL_INSTANCE_NAME, actual.getName());
 
-        objUnderTest.invokeVnfmAdapter(stubbedxecution);
+    final Tenant actualTenant = actual.getTenant();
+    assertEquals(CLOUD_OWNER, actualTenant.getCloudOwner());
+    assertEquals(LCP_CLOUD_REGIONID, actualTenant.getRegionName());
+    assertEquals(StubbedBuildingBlockExecution.getTenantId(), actualTenant.getTenantId());
 
-        assertNotNull(stubbedxecution.getVariable(CREATE_VNF_RESPONSE_PARAM_NAME));
-    }
+  }
 
-    @Test
-    public void testInvokeVnfmAdapter_invalidValues_storesResponseInExecution() throws Exception {
+  @Test
+  public void testBuildCreateVnfRequest_extractPojosForBBThrowsException_exceptionBuilderCalled() throws Exception {
 
-        final VnfmAdapterCreateVnfTask objUnderTest = getEtsiVnfInstantiateTask();
+    final VnfmAdapterCreateVnfTask objUnderTest = getEtsiVnfInstantiateTask();
 
-        stubbedxecution.setVariable(CREATE_VNF_REQUEST_PARAM_NAME, new CreateVnfRequest());
+    when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenThrow(RuntimeException.class);
 
-        when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(getGenericVnf());
-        when(mockedVnfmAdapterServiceProvider.invokeCreateInstantiationRequest(eq(VNF_ID), any(CreateVnfRequest.class)))
-                .thenReturn(Optional.absent());
+    objUnderTest.buildCreateVnfRequest(stubbedxecution);
 
-        objUnderTest.invokeVnfmAdapter(stubbedxecution);
+    final CreateVnfRequest actual = stubbedxecution.getVariable(CREATE_VNF_REQUEST_PARAM_NAME);
 
-        assertNull(stubbedxecution.getVariable(CREATE_VNF_RESPONSE_PARAM_NAME));
-        verify(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(1202),
-                any(Exception.class));
-    }
+    assertNull(actual);
+    verify(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(1200),
+        any(Exception.class));
 
+  }
 
-    @Test
-    public void testInvokeVnfmAdapter_extractPojosForBBThrowsException_exceptionBuilderCalled() throws Exception {
+  @Test
+  public void testInvokeVnfmAdapter_validValues_storesResponseInExecution() throws Exception {
 
-        final VnfmAdapterCreateVnfTask objUnderTest = getEtsiVnfInstantiateTask();
+    final VnfmAdapterCreateVnfTask objUnderTest = getEtsiVnfInstantiateTask();
 
-        when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenThrow(RuntimeException.class);
+    stubbedxecution.setVariable(CREATE_VNF_REQUEST_PARAM_NAME, new CreateVnfRequest());
 
-        objUnderTest.invokeVnfmAdapter(stubbedxecution);
+    when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(getGenericVnf());
+    when(mockedVnfmAdapterServiceProvider.invokeCreateInstantiationRequest(eq(VNF_ID), any(CreateVnfRequest.class)))
+        .thenReturn(getCreateVnfResponse());
 
-        assertNull(stubbedxecution.getVariable(CREATE_VNF_RESPONSE_PARAM_NAME));
-        verify(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(1202),
-                any(Exception.class));
+    objUnderTest.invokeVnfmAdapter(stubbedxecution);
 
-    }
+    assertNotNull(stubbedxecution.getVariable(CREATE_VNF_RESPONSE_PARAM_NAME));
+  }
 
-    private Optional<CreateVnfResponse> getCreateVnfResponse() {
-        final CreateVnfResponse response = new CreateVnfResponse();
-        response.setJobId(JOB_ID);
-        return Optional.of(response);
-    }
+  @Test
+  public void testInvokeVnfmAdapter_invalidValues_storesResponseInExecution() throws Exception {
 
-    private GenericVnf getGenericVnf() {
-        final GenericVnf genericVnf = new GenericVnf();
-        genericVnf.setVnfId(VNF_ID);
-        genericVnf.setModelInfoGenericVnf(getModelInfoGenericVnf());
-        genericVnf.setVnfName(VNF_NAME);
-        return genericVnf;
-    }
+    final VnfmAdapterCreateVnfTask objUnderTest = getEtsiVnfInstantiateTask();
 
-    private ModelInfoGenericVnf getModelInfoGenericVnf() {
-        final ModelInfoGenericVnf modelInfoGenericVnf = new ModelInfoGenericVnf();
-        modelInfoGenericVnf.setModelInstanceName(MODEL_INSTANCE_NAME);
-        return modelInfoGenericVnf;
-    }
+    stubbedxecution.setVariable(CREATE_VNF_REQUEST_PARAM_NAME, new CreateVnfRequest());
 
-    private VnfmAdapterCreateVnfTask getEtsiVnfInstantiateTask() {
-        return new VnfmAdapterCreateVnfTask(exceptionUtil, extractPojosForBB, mockedVnfmAdapterServiceProvider);
-    }
+    when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenReturn(getGenericVnf());
+    when(mockedVnfmAdapterServiceProvider.invokeCreateInstantiationRequest(eq(VNF_ID), any(CreateVnfRequest.class)))
+        .thenReturn(Optional.absent());
 
-    private class StubbedBuildingBlockExecution implements BuildingBlockExecution {
+    objUnderTest.invokeVnfmAdapter(stubbedxecution);
 
-        private final Map<String, Serializable> execution = new HashMap<>();
-        private final GeneralBuildingBlock generalBuildingBlock;
+    assertNull(stubbedxecution.getVariable(CREATE_VNF_RESPONSE_PARAM_NAME));
+    verify(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(1202),
+        any(Exception.class));
+  }
 
-        StubbedBuildingBlockExecution() {
-            generalBuildingBlock = getGeneralBuildingBlockValue();
-        }
 
-        @Override
-        public GeneralBuildingBlock getGeneralBuildingBlock() {
-            return generalBuildingBlock;
-        }
+  @Test
+  public void testInvokeVnfmAdapter_extractPojosForBBThrowsException_exceptionBuilderCalled() throws Exception {
 
-        @SuppressWarnings("unchecked")
-        @Override
-        public <T> T getVariable(final String key) {
-            return (T) execution.get(key);
-        }
+    final VnfmAdapterCreateVnfTask objUnderTest = getEtsiVnfInstantiateTask();
 
-        @Override
-        public <T> T getRequiredVariable(final String key) throws RequiredExecutionVariableExeception {
-            return null;
-        }
+    when(extractPojosForBB.extractByKey(any(), eq(ResourceKey.GENERIC_VNF_ID))).thenThrow(RuntimeException.class);
 
-        @Override
-        public void setVariable(final String key, final Serializable value) {
-            execution.put(key, value);
-        }
+    objUnderTest.invokeVnfmAdapter(stubbedxecution);
 
-        @Override
-        public Map<ResourceKey, String> getLookupMap() {
-            return Collections.emptyMap();
-        }
+    assertNull(stubbedxecution.getVariable(CREATE_VNF_RESPONSE_PARAM_NAME));
+    verify(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(1202),
+        any(Exception.class));
 
-        @Override
-        public String getFlowToBeCalled() {
-            return null;
-        }
+  }
 
-        private GeneralBuildingBlock getGeneralBuildingBlockValue() {
-            final GeneralBuildingBlock buildingBlock = new GeneralBuildingBlock();
-            buildingBlock.setCloudRegion(getCloudRegion());
-            return buildingBlock;
-        }
+  private Optional<CreateVnfResponse> getCreateVnfResponse() {
+    final CreateVnfResponse response = new CreateVnfResponse();
+    response.setJobId(JOB_ID);
+    return Optional.of(response);
+  }
 
-        private CloudRegion getCloudRegion() {
-            final CloudRegion cloudRegion = new CloudRegion();
-            cloudRegion.setCloudOwner(CLOUD_OWNER);
-            cloudRegion.setLcpCloudRegionId(LCP_CLOUD_REGIONID);
-            cloudRegion.setTenantId(TENANT_ID);
-            return cloudRegion;
-        }
+  private GenericVnf getGenericVnf() {
+    final GenericVnf genericVnf = new GenericVnf();
+    genericVnf.setVnfId(VNF_ID);
+    genericVnf.setModelInfoGenericVnf(getModelInfoGenericVnf());
+    genericVnf.setVnfName(VNF_NAME);
+    return genericVnf;
+  }
 
-    }
+  private ModelInfoGenericVnf getModelInfoGenericVnf() {
+    final ModelInfoGenericVnf modelInfoGenericVnf = new ModelInfoGenericVnf();
+    modelInfoGenericVnf.setModelInstanceName(MODEL_INSTANCE_NAME);
+    return modelInfoGenericVnf;
+  }
 
+  private VnfmAdapterCreateVnfTask getEtsiVnfInstantiateTask() {
+    return new VnfmAdapterCreateVnfTask(exceptionUtil, extractPojosForBB, mockedVnfmAdapterServiceProvider);
+  }
 }
index 0f44391..79894d5 100644 (file)
@@ -28,23 +28,18 @@ import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.when;
 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.DUMMY_GENERIC_VND_ID;
 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.getVnfmBasicHttpConfigProvider;
-
 import java.util.UUID;
-
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
-import org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.VnfmAdapterServiceProvider;
-import org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.VnfmAdapterServiceProviderImpl;
-import org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.VnfmAdapterUrlProvider;
 import org.onap.so.rest.exceptions.RestProcessingException;
 import org.onap.so.rest.service.HttpRestServiceProvider;
 import org.onap.vnfmadapter.v1.model.CreateVnfRequest;
 import org.onap.vnfmadapter.v1.model.CreateVnfResponse;
+import org.onap.vnfmadapter.v1.model.DeleteVnfResponse;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
-
 import com.google.common.base.Optional;
 
 
@@ -66,6 +61,9 @@ public class VnfmAdapterServiceProviderImplTest {
     @Mock
     private ResponseEntity<CreateVnfResponse> mockedResponseEntity;
 
+    @Mock
+    private ResponseEntity<DeleteVnfResponse> deleteVnfResponse;
+
     @Test
     public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusAcceptedWithBody_validResponse() {
 
@@ -120,6 +118,67 @@ public class VnfmAdapterServiceProviderImplTest {
 
     }
 
+  @Test
+  public void testInvokeDeleteRequest() {
+    when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
+        .thenReturn(deleteVnfResponse);
+    when(deleteVnfResponse.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
+    when(deleteVnfResponse.hasBody()).thenReturn(true);
+    final DeleteVnfResponse response = getDeleteVnfResponse(DUMMY_JOB_ID);
+    when(deleteVnfResponse.getBody()).thenReturn(response);
+    final VnfmAdapterServiceProvider objUnderTest =
+        new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
+    final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
+    assertTrue(actual.isPresent());
+  }
+
+  @Test
+  public void testInvokeDeleteRequestNotAccepted() {
+    when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
+        .thenReturn(deleteVnfResponse);
+    when(deleteVnfResponse.getStatusCode()).thenReturn(HttpStatus.BAD_GATEWAY);
+    final VnfmAdapterServiceProvider objUnderTest =
+        new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
+    final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
+    assertFalse(actual.isPresent());
+  }
+
+  @Test
+  public void testInvokeDeleteRequestNoBody() {
+    when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
+        .thenReturn(deleteVnfResponse);
+    when(deleteVnfResponse.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
+    when(deleteVnfResponse.hasBody()).thenReturn(false);
+    final VnfmAdapterServiceProvider objUnderTest =
+        new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
+    final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
+    assertFalse(actual.isPresent());
+  }
+
+  @Test
+  public void testInvokeDeleteRequestNoJobId() {
+    when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
+        .thenReturn(deleteVnfResponse);
+    when(deleteVnfResponse.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
+    when(deleteVnfResponse.hasBody()).thenReturn(true);
+    final DeleteVnfResponse response = getDeleteVnfResponse("");
+    when(deleteVnfResponse.getBody()).thenReturn(response);
+    final VnfmAdapterServiceProvider objUnderTest =
+        new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
+    final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
+    assertFalse(actual.isPresent());
+  }
+
+  @Test
+  public void testInvokeDeleteRequestException() {
+    when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
+        .thenThrow(RestProcessingException.class);
+    final VnfmAdapterServiceProvider objUnderTest =
+        new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
+    final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
+    assertFalse(actual.isPresent());
+  }
+
 
     private void assertWithJobId(final String jobId) {
         when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(),
@@ -160,6 +219,12 @@ public class VnfmAdapterServiceProviderImplTest {
         return response;
     }
 
+    private DeleteVnfResponse getDeleteVnfResponse(final String jobId) {
+      final DeleteVnfResponse response = new DeleteVnfResponse();
+      response.setJobId(jobId);
+      return response;
+  }
+
 
     private VnfmAdapterUrlProvider getVnfmAdapterUrlProvider() {
         return new VnfmAdapterUrlProvider(getVnfmBasicHttpConfigProvider());
index 43b2fb4..282c87a 100644 (file)
@@ -68,5 +68,14 @@ public interface HttpRestServiceProvider {
      */
     public <T> ResponseEntity<T> postHttpRequest(final Object object, final String url, final Class<T> clazz);
 
+  /**
+   * Execute the HTTP DELETE to the given URI template
+   *
+   * @param url the URL
+   * @param clazz the type of the return value
+   * @return Returns the {@link ResponseEntity}.
+   */
+  public <T> ResponseEntity<T> deleteHttpRequest(final String url, final Class<T> clazz);
+
 
 }
index 032df84..164d48b 100644 (file)
@@ -138,6 +138,18 @@ public class HttpRestServiceProviderImpl implements HttpRestServiceProvider {
         }
     }
 
+  @Override
+  public <T> ResponseEntity<T> deleteHttpRequest(final String url, final Class<T> clazz) {
+    try {
+      final HttpEntity<?> request = new HttpEntity<>(getHttpHeaders());
+      return restTemplate.exchange(url, HttpMethod.DELETE, request, clazz);
+
+    } catch (final RestClientException restClientException) {
+      LOGGER.error("Unable to invoke HTTP DELETE using url: " + url, restClientException);
+      throw new InvalidRestRequestException("Unable to invoke HTTP DELETE using URL: " + url, restClientException);
+    }
+  }
+
     private HttpHeaders getHttpHeaders() {
         return httpHeadersProvider.getHttpHeaders();
     }