2  * ============LICENSE_START=======================================================
 
   3  *  Copyright (C) 2019 Nordix Foundation.
 
   4  * ================================================================================
 
   5  * Licensed under the Apache License, Version 2.0 (the "License");
 
   6  * you may not use this file except in compliance with the License.
 
   7  * You may obtain a copy of the License at
 
   9  *      http://www.apache.org/licenses/LICENSE-2.0
 
  11  * Unless required by applicable law or agreed to in writing, software
 
  12  * distributed under the License is distributed on an "AS IS" BASIS,
 
  13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  14  * See the License for the specific language governing permissions and
 
  15  * limitations under the License.
 
  17  * SPDX-License-Identifier: Apache-2.0
 
  18  * ============LICENSE_END=========================================================
 
  21 package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
 
  23 import static org.junit.Assert.assertEquals;
 
  24 import static org.junit.Assert.assertFalse;
 
  25 import static org.junit.Assert.assertNotNull;
 
  26 import static org.junit.Assert.assertTrue;
 
  27 import static org.mockito.ArgumentMatchers.anyString;
 
  28 import static org.mockito.ArgumentMatchers.eq;
 
  29 import static org.mockito.Mockito.when;
 
  30 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.DUMMY_GENERIC_VND_ID;
 
  31 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.DUMMY_JOB_ID;
 
  32 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.getVnfmBasicHttpConfigProvider;
 
  33 import org.junit.Test;
 
  34 import org.junit.runner.RunWith;
 
  35 import org.mockito.Mock;
 
  36 import org.mockito.junit.MockitoJUnitRunner;
 
  37 import org.onap.so.rest.exceptions.RestProcessingException;
 
  38 import org.onap.so.rest.service.HttpRestServiceProvider;
 
  39 import org.onap.vnfmadapter.v1.model.CreateVnfRequest;
 
  40 import org.onap.vnfmadapter.v1.model.CreateVnfResponse;
 
  41 import org.onap.vnfmadapter.v1.model.DeleteVnfResponse;
 
  42 import org.onap.vnfmadapter.v1.model.OperationStateEnum;
 
  43 import org.onap.vnfmadapter.v1.model.QueryJobResponse;
 
  44 import org.springframework.http.HttpStatus;
 
  45 import org.springframework.http.ResponseEntity;
 
  46 import com.google.common.base.Optional;
 
  50  * @author waqas.ikram@est.tech
 
  52 @RunWith(MockitoJUnitRunner.class)
 
  53 public class VnfmAdapterServiceProviderImplTest {
 
  55     private static final String EMPTY_JOB_ID = "";
 
  57     private static final CreateVnfRequest CREATE_VNF_REQUEST = new CreateVnfRequest();
 
  60     private HttpRestServiceProvider mockedHttpServiceProvider;
 
  63     private ResponseEntity<CreateVnfResponse> mockedResponseEntity;
 
  66     private ResponseEntity<DeleteVnfResponse> deleteVnfResponse;
 
  68     private ResponseEntity<QueryJobResponse> mockedQueryJobResponseResponseEntity;
 
  71     public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusAcceptedWithBody_validResponse() {
 
  73         when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(),
 
  74                 eq(CreateVnfResponse.class))).thenReturn(mockedResponseEntity);
 
  75         when(mockedResponseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
 
  76         when(mockedResponseEntity.hasBody()).thenReturn(true);
 
  77         final CreateVnfResponse response = getCreateVnfResponse(DUMMY_JOB_ID);
 
  78         when(mockedResponseEntity.getBody()).thenReturn(response);
 
  79         final VnfmAdapterServiceProvider objUnderTest =
 
  80                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
  81         final Optional<CreateVnfResponse> actual =
 
  82                 objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
 
  83         assertTrue(actual.isPresent());
 
  84         assertEquals(actual.get(), response);
 
  88     public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusAcceptedWithNoBody_noResponse() {
 
  89         assertWithStatuCode(HttpStatus.ACCEPTED);
 
  93     public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusNotOkWithNoBody_noResponse() {
 
  94         assertWithStatuCode(HttpStatus.UNAUTHORIZED);
 
  99     public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusAcceptedWithBodyWithInvalidJobId_noResponse() {
 
 100         assertWithJobId(null);
 
 101         assertWithJobId(EMPTY_JOB_ID);
 
 105     public void testInvokeCreateInstantiationRequest_httpServiceProviderThrowException_httpRestServiceProviderNotNull() {
 
 107         when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(),
 
 108                 eq(CreateVnfResponse.class))).thenThrow(RestProcessingException.class);
 
 111         final VnfmAdapterServiceProvider objUnderTest =
 
 112                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
 114         final Optional<CreateVnfResponse> actual =
 
 115                 objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
 
 116         assertFalse(actual.isPresent());
 
 121     public void testInvokeDeleteRequest() {
 
 122         when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
 
 123                 .thenReturn(deleteVnfResponse);
 
 124         when(deleteVnfResponse.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
 
 125         when(deleteVnfResponse.hasBody()).thenReturn(true);
 
 126         final DeleteVnfResponse response = getDeleteVnfResponse(DUMMY_JOB_ID);
 
 127         when(deleteVnfResponse.getBody()).thenReturn(response);
 
 128         final VnfmAdapterServiceProvider objUnderTest =
 
 129                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
 130         final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
 
 131         assertTrue(actual.isPresent());
 
 135     public void testInvokeDeleteRequestNotAccepted() {
 
 136         when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
 
 137                 .thenReturn(deleteVnfResponse);
 
 138         when(deleteVnfResponse.getStatusCode()).thenReturn(HttpStatus.BAD_GATEWAY);
 
 139         final VnfmAdapterServiceProvider objUnderTest =
 
 140                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
 141         final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
 
 142         assertFalse(actual.isPresent());
 
 146     public void testInvokeDeleteRequestNoBody() {
 
 147         when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
 
 148                 .thenReturn(deleteVnfResponse);
 
 149         when(deleteVnfResponse.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
 
 150         when(deleteVnfResponse.hasBody()).thenReturn(false);
 
 151         final VnfmAdapterServiceProvider objUnderTest =
 
 152                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
 153         final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
 
 154         assertFalse(actual.isPresent());
 
 158     public void testInvokeDeleteRequestNoJobId() {
 
 159         when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
 
 160                 .thenReturn(deleteVnfResponse);
 
 161         when(deleteVnfResponse.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
 
 162         when(deleteVnfResponse.hasBody()).thenReturn(true);
 
 163         final DeleteVnfResponse response = getDeleteVnfResponse("");
 
 164         when(deleteVnfResponse.getBody()).thenReturn(response);
 
 165         final VnfmAdapterServiceProvider objUnderTest =
 
 166                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
 167         final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
 
 168         assertFalse(actual.isPresent());
 
 172     public void testInvokeDeleteRequestException() {
 
 173         when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
 
 174                 .thenThrow(RestProcessingException.class);
 
 175         final VnfmAdapterServiceProvider objUnderTest =
 
 176                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
 177         final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
 
 178         assertFalse(actual.isPresent());
 
 182     public void testGetInstantiateOperationJobStatus_httpServiceProviderReturnsStatusOkWithBody_validResponse() {
 
 184         when(mockedQueryJobResponseResponseEntity.getStatusCode()).thenReturn(HttpStatus.OK);
 
 185         when(mockedQueryJobResponseResponseEntity.hasBody()).thenReturn(true);
 
 186         when(mockedQueryJobResponseResponseEntity.getBody()).thenReturn(getQueryJobResponse());
 
 188         when(mockedHttpServiceProvider.getHttpResponse(eq(TestConstants.JOB_STATUS_EXPECTED_URL),
 
 189                 eq(QueryJobResponse.class))).thenReturn(mockedQueryJobResponseResponseEntity);
 
 191         final VnfmAdapterServiceProvider objUnderTest =
 
 192                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
 194         final Optional<QueryJobResponse> actual = objUnderTest.getInstantiateOperationJobStatus(DUMMY_JOB_ID);
 
 195         assertTrue(actual.isPresent());
 
 196         final QueryJobResponse actualQueryJobResponse = actual.get();
 
 197         assertNotNull(actualQueryJobResponse);
 
 201     public void testGetInstantiateOperationJobStatus_httpServiceProviderReturnsStatusOkWithOutBody_invalidResponse() {
 
 203         when(mockedQueryJobResponseResponseEntity.getStatusCode()).thenReturn(HttpStatus.OK);
 
 204         when(mockedQueryJobResponseResponseEntity.hasBody()).thenReturn(false);
 
 206         when(mockedHttpServiceProvider.getHttpResponse(eq(TestConstants.JOB_STATUS_EXPECTED_URL),
 
 207                 eq(QueryJobResponse.class))).thenReturn(mockedQueryJobResponseResponseEntity);
 
 209         final VnfmAdapterServiceProvider objUnderTest =
 
 210                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
 212         final Optional<QueryJobResponse> actual = objUnderTest.getInstantiateOperationJobStatus(DUMMY_JOB_ID);
 
 213         assertFalse(actual.isPresent());
 
 217     public void testGetInstantiateOperationJobStatus_httpServiceProviderReturnsStatusNotOkWithOutBody_invalidResponse() {
 
 219         when(mockedQueryJobResponseResponseEntity.getStatusCode()).thenReturn(HttpStatus.INTERNAL_SERVER_ERROR);
 
 221         when(mockedHttpServiceProvider.getHttpResponse(eq(TestConstants.JOB_STATUS_EXPECTED_URL),
 
 222                 eq(QueryJobResponse.class))).thenReturn(mockedQueryJobResponseResponseEntity);
 
 224         final VnfmAdapterServiceProvider objUnderTest =
 
 225                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
 227         final Optional<QueryJobResponse> actual = objUnderTest.getInstantiateOperationJobStatus(DUMMY_JOB_ID);
 
 228         assertFalse(actual.isPresent());
 
 231     @Test(expected = RestProcessingException.class)
 
 232     public void testGetInstantiateOperationJobStatus_Exception() {
 
 234         when(mockedHttpServiceProvider.getHttpResponse(eq(TestConstants.JOB_STATUS_EXPECTED_URL),
 
 235                 eq(QueryJobResponse.class))).thenThrow(RestProcessingException.class);
 
 237         final VnfmAdapterServiceProvider objUnderTest =
 
 238                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
 240         objUnderTest.getInstantiateOperationJobStatus(DUMMY_JOB_ID);
 
 243     private QueryJobResponse getQueryJobResponse() {
 
 244         return new QueryJobResponse().id(DUMMY_JOB_ID).operationState(OperationStateEnum.COMPLETED);
 
 248     private void assertWithJobId(final String jobId) {
 
 249         when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(),
 
 250                 eq(CreateVnfResponse.class))).thenReturn(mockedResponseEntity);
 
 251         when(mockedResponseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
 
 252         when(mockedResponseEntity.hasBody()).thenReturn(true);
 
 253         final CreateVnfResponse response = getCreateVnfResponse(jobId);
 
 254         when(mockedResponseEntity.getBody()).thenReturn(response);
 
 257         final VnfmAdapterServiceProvider objUnderTest =
 
 258                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
 260         final Optional<CreateVnfResponse> actual =
 
 261                 objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
 
 262         assertFalse(actual.isPresent());
 
 265     private void assertWithStatuCode(final HttpStatus status) {
 
 266         when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(),
 
 267                 eq(CreateVnfResponse.class))).thenReturn(mockedResponseEntity);
 
 268         when(mockedResponseEntity.getStatusCode()).thenReturn(status);
 
 269         when(mockedResponseEntity.hasBody()).thenReturn(false);
 
 271         final VnfmAdapterServiceProvider objUnderTest =
 
 272                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
 
 274         final Optional<CreateVnfResponse> actual =
 
 275                 objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
 
 276         assertFalse(actual.isPresent());
 
 279     private CreateVnfResponse getCreateVnfResponse(final String jobId) {
 
 280         return new CreateVnfResponse().jobId(jobId);
 
 283     private DeleteVnfResponse getDeleteVnfResponse(final String jobId) {
 
 284         final DeleteVnfResponse response = new DeleteVnfResponse();
 
 285         response.setJobId(jobId);
 
 289     private VnfmAdapterUrlProvider getVnfmAdapterUrlProvider() {
 
 290         return new VnfmAdapterUrlProvider(getVnfmBasicHttpConfigProvider());