2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 
   6  * ================================================================================
 
   7  * Copyright (C) 2017 Amdocs
 
   8  * =============================================================================
 
   9  * Licensed under the Apache License, Version 2.0 (the "License");
 
  10  * you may not use this file except in compliance with the License.
 
  11  * You may obtain a copy of the License at
 
  13  *      http://www.apache.org/licenses/LICENSE-2.0
 
  15  * Unless required by applicable law or agreed to in writing, software
 
  16  * distributed under the License is distributed on an "AS IS" BASIS,
 
  17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  18  * See the License for the specific language governing permissions and
 
  19  * limitations under the License.
 
  21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
 
  22  * ============LICENSE_END=========================================================
 
  25 package org.onap.appc.requesthandler.impl;
 
  27 import org.junit.Assert;
 
  28 import org.junit.Before;
 
  29 import org.junit.Test;
 
  30 import org.junit.runner.RunWith;
 
  31 import org.mockito.Mockito;
 
  32 import org.onap.appc.adapter.message.MessageAdapterFactory;
 
  33 import org.onap.appc.adapter.message.Producer;
 
  34 import org.onap.appc.domainmodel.lcm.ActionLevel;
 
  35 import org.onap.appc.domainmodel.lcm.RequestContext;
 
  36 import org.onap.appc.domainmodel.lcm.RequestStatus;
 
  37 import org.onap.appc.domainmodel.lcm.ResponseContext;
 
  38 import org.onap.appc.domainmodel.lcm.RuntimeContext;
 
  39 import org.onap.appc.domainmodel.lcm.VNFOperation;
 
  40 import org.onap.appc.exceptions.APPCException;
 
  41 import org.onap.appc.requesthandler.exceptions.MultipleRecordsRetrievedException;
 
  42 import org.onap.appc.transactionrecorder.TransactionRecorder;
 
  43 import org.osgi.framework.Bundle;
 
  44 import org.osgi.framework.BundleContext;
 
  45 import org.osgi.framework.FrameworkUtil;
 
  46 import org.osgi.framework.ServiceReference;
 
  47 import org.powermock.api.mockito.PowerMockito;
 
  48 import org.powermock.core.classloader.annotations.PrepareForTest;
 
  49 import org.powermock.modules.junit4.PowerMockRunner;
 
  50 import org.powermock.reflect.Whitebox;
 
  52 import java.lang.reflect.Array;
 
  53 import java.util.ArrayList;
 
  54 import java.util.Arrays;
 
  55 import java.util.List;
 
  57 import static org.mockito.Matchers.any;
 
  58 import static org.mockito.Matchers.anyCollection;
 
  59 import static org.mockito.Matchers.anyString;
 
  60 import static org.mockito.Mockito.mock;
 
  61 import static org.mockito.Mockito.spy;
 
  62 import static org.powermock.api.mockito.PowerMockito.mockStatic;
 
  65  * Test class for LocalRequestHandlerImpl
 
  67 @RunWith(PowerMockRunner.class)
 
  68 @PrepareForTest({FrameworkUtil.class})
 
  69 public class LocalRequestHandlerImplTest implements LocalRequestHanlderTestHelper {
 
  70     private final String requestId = "requestId";
 
  71     private final String vnfId = "vnfId";
 
  72     private final String subRequestId = "subRequestId";
 
  73     private final String originatorId = "originatorId";
 
  74     private final String ACCEPTED_IN_PROGRESS_Response = "{\"status-reason\":\"ACCEPTED\"," +
 
  75         "\"status\":\"IN_PROGRESS\"}";
 
  76     private final String SUCCESSFUL_SUCCESSFUL_Response = "{\"status-reason\":\"SUCCESSFUL\"," +
 
  77         "\"status\":\"SUCCESSFUL\"}";
 
  78     private final String RECEIVED_IN_PROGRESS_Response = "{\"status-reason\":\"RECEIVED\"," +
 
  79         "\"status\":\"IN_PROGRESS\"}";
 
  80     private final String UNKNOWN_FAILED_Response = "{\"status-reason\":\"UNKNOWN\"," +
 
  81         "\"status\":\"FAILED\"}";
 
  83     private LocalRequestHandlerImpl requestHandler;
 
  84     private TransactionRecorder recorder;
 
  87     public void setUp() throws Exception {
 
  88         mockStatic(FrameworkUtil.class);
 
  89         Bundle myBundle = mock(Bundle.class);
 
  90         PowerMockito.when(FrameworkUtil.getBundle(any())).thenReturn(myBundle);
 
  92         BundleContext myBundleContext = mock(BundleContext.class);
 
  93         Mockito.when(myBundle.getBundleContext()).thenReturn(myBundleContext);
 
  95         ServiceReference svcRef = mock(ServiceReference.class);
 
  96         Mockito.when(myBundleContext.getServiceReference(MessageAdapterFactory.class.getName())).thenReturn(svcRef);
 
  98         Producer producer = mock(Producer.class);
 
  99         MessageAdapterFactory factory = mock(MessageAdapterFactory.class);
 
 100         Mockito.when(myBundleContext.getService(svcRef)).thenReturn(factory);
 
 101         Mockito.when(factory.createProducer(anyCollection(), anyString(), anyString(), anyString())).thenReturn
 
 104         requestHandler = spy(new LocalRequestHandlerImpl());
 
 106         recorder = mock(TransactionRecorder.class);
 
 107         requestHandler.setTransactionRecorder(recorder);
 
 109         List<RequestStatus> result = Arrays.asList(RequestStatus.ACCEPTED);
 
 110         PowerMockito.when(recorder.getRecords(anyString(), anyString(), anyString(), anyString())).thenReturn(result);
 
 114      * Test response which contains status=Successful, status-reason=Successful
 
 116      * Search criteria one = vnf-id + request-id + sub-request-id + originator-id
 
 119     public void testHandleRequestSuccessfulWithSearchCriteriaOne() throws APPCException {
 
 120         final String payload = "{\"request-id\":\"requestId\"," +
 
 121             "\"sub-request-id\":\"subRequestId\"," +
 
 122             "\"originator-id\":\"originatorId\"}";
 
 124         List<RequestStatus> result = Arrays.asList(RequestStatus.SUCCESSFUL);
 
 125         PowerMockito.when(recorder.getRecords(requestId, subRequestId, originatorId, vnfId)).thenReturn(result);
 
 126         RuntimeContext runtimeContext = createRequestHandlerRuntimeContext(vnfId, payload);
 
 128         requestHandler.handleRequest(runtimeContext);
 
 129         Assert.assertTrue(SUCCESSFUL_SUCCESSFUL_Response.equals(runtimeContext.getResponseContext().getPayload()));
 
 133      * Test response which contains status=IN_PROGRESS, status-reason=RECEIVED
 
 135      * Search criteria one = vnf-id + request-id + sub-request-id + originator-id
 
 138     public void testHandleRequestReceivedWithSearchCriteriaOne() throws APPCException {
 
 139         final String payload = "{\"request-id\":\"requestId\"," +
 
 140             "\"sub-request-id\":\"subRequestId\"," +
 
 141             "\"originator-id\":\"originatorId\"}";
 
 143         List<RequestStatus> result = Arrays.asList(RequestStatus.RECEIVED);
 
 144         PowerMockito.when(recorder.getRecords(requestId, subRequestId, originatorId, vnfId)).thenReturn(result);
 
 145         RuntimeContext runtimeContext = createRequestHandlerRuntimeContext(vnfId, payload);
 
 147         requestHandler.handleRequest(runtimeContext);
 
 148         Assert.assertTrue(RECEIVED_IN_PROGRESS_Response.equals(runtimeContext.getResponseContext().getPayload()));
 
 152      * Test response which contains status=FAILED, status-reason=UNKNOWN
 
 154      * Search criteria two = vnf-id + request-id + sub-request-id
 
 157     public void testHandleRequestFailedWithSearchCriteriaTwo() throws APPCException {
 
 158         final String payload = "{\"request-id\":\"requestId\"," +
 
 159             "\"sub-request-id\":\"subRequestId\"}";
 
 161         List<RequestStatus> result = Arrays.asList(RequestStatus.UNKNOWN);
 
 162         PowerMockito.when(recorder.getRecords(requestId, subRequestId, null, vnfId)).thenReturn(result);
 
 163         RuntimeContext runtimeContext = createRequestHandlerRuntimeContext(vnfId, payload);
 
 165         requestHandler.handleRequest(runtimeContext);
 
 166         Assert.assertTrue(UNKNOWN_FAILED_Response.equals(runtimeContext.getResponseContext().getPayload()));
 
 171     public void testSuccessHandleRequest() throws Exception {
 
 172         RuntimeContext runtimeContext = createRequestHandlerRuntimeContext("vnfId",
 
 173             "{\"request-id\":\"request-id\"}");
 
 175         requestHandler.handleRequest(runtimeContext);
 
 176         Assert.assertTrue(ACCEPTED_IN_PROGRESS_Response.equals(runtimeContext.getResponseContext().getPayload()));
 
 179     @Test(expected = IllegalArgumentException.class)
 
 180     public void testHandleRequestVnfIdFailure() throws Exception {
 
 181         RuntimeContext runtimeContext = createRequestHandlerRuntimeContext(null, "{\"request-id\":\"request-id\"}");
 
 182         runtimeContext.getRequestContext().getActionIdentifiers().setVnfId(null);
 
 183         requestHandler.handleRequest(runtimeContext);
 
 186     @Test(expected = IllegalArgumentException.class)
 
 187     public void testHandleRequestInvalidPayload() throws Exception {
 
 188         String incorrectPayload = "{\"RequestId\":\"requestToCheck\"}";
 
 189         RuntimeContext runtimeContext = createRequestHandlerRuntimeContext("vnfId", incorrectPayload);
 
 190         requestHandler.handleRequest(runtimeContext);
 
 194     public void testGetStatusOfRequestSuccess() throws Exception {
 
 195         List<RequestStatus> result = Arrays.asList(RequestStatus.ACCEPTED);
 
 196         PowerMockito.when(recorder.getRecords(requestId, null, null, vnfId)).thenReturn(result);
 
 198         RequestStatus status = Whitebox.invokeMethod(requestHandler,
 
 199             "getStatusOfRequest", requestId, null, null, vnfId);
 
 200         Assert.assertTrue(status.name().equals("ACCEPTED"));
 
 203     @Test(expected = MultipleRecordsRetrievedException.class)
 
 204     public void testGetStatusOfRequest_MoreThanOne() throws Exception {
 
 205         List<RequestStatus> result = Arrays.asList(RequestStatus.ACCEPTED, RequestStatus.FAILED);
 
 206         PowerMockito.when(recorder.getRecords(requestId, null, null, vnfId)).thenReturn(result);
 
 207         RequestStatus status = Whitebox.invokeMethod(requestHandler,
 
 208             "getStatusOfRequest", requestId, null, null, vnfId);
 
 209         Assert.assertNull(status);
 
 213     public void testGetStatusOfRequestNotFound() throws Exception {
 
 214         List<RequestStatus> result = new ArrayList<>();
 
 215         PowerMockito.when(recorder.getRecords(requestId, null, null, vnfId)).thenReturn(result);
 
 217         RequestStatus status = Whitebox.invokeMethod(requestHandler,
 
 218             "getStatusOfRequest", requestId, null, null, vnfId);
 
 219         Assert.assertTrue(status.name().equals("NOT_FOUND"));