2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2018 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 * ============LICENSE_END=========================================================
24 package org.onap.appc.requesthandler.impl;
26 import org.junit.Assert;
27 import org.junit.Before;
28 import org.junit.Test;
29 import org.junit.runner.RunWith;
30 import org.mockito.Mockito;
31 import org.onap.appc.adapter.message.MessageAdapterFactory;
32 import org.onap.appc.adapter.message.Producer;
33 import org.onap.appc.domainmodel.lcm.ActionLevel;
34 import org.onap.appc.domainmodel.lcm.RequestContext;
35 import org.onap.appc.domainmodel.lcm.RequestStatus;
36 import org.onap.appc.domainmodel.lcm.ResponseContext;
37 import org.onap.appc.domainmodel.lcm.RuntimeContext;
38 import org.onap.appc.domainmodel.lcm.VNFOperation;
39 import org.onap.appc.exceptions.APPCException;
40 import org.onap.appc.requesthandler.exceptions.MultipleRecordsRetrievedException;
41 import org.onap.appc.transactionrecorder.TransactionRecorder;
42 import org.osgi.framework.Bundle;
43 import org.osgi.framework.BundleContext;
44 import org.osgi.framework.FrameworkUtil;
45 import org.osgi.framework.ServiceReference;
46 import org.powermock.api.mockito.PowerMockito;
47 import org.powermock.core.classloader.annotations.PrepareForTest;
48 import org.powermock.modules.junit4.PowerMockRunner;
49 import org.powermock.reflect.Whitebox;
51 import java.lang.reflect.Array;
52 import java.util.ArrayList;
53 import java.util.Arrays;
54 import java.util.List;
56 import static org.mockito.Matchers.any;
57 import static org.mockito.Matchers.anyCollection;
58 import static org.mockito.Matchers.anyString;
59 import static org.mockito.Mockito.mock;
60 import static org.mockito.Mockito.spy;
61 import static org.powermock.api.mockito.PowerMockito.mockStatic;
64 * Test class for LocalRequestHandlerImpl
66 @RunWith(PowerMockRunner.class)
67 @PrepareForTest({FrameworkUtil.class})
68 public class LocalRequestHandlerImplTest implements LocalRequestHanlderTestHelper {
69 private final String requestId = "requestId";
70 private final String vnfId = "vnfId";
71 private final String subRequestId = "subRequestId";
72 private final String originatorId = "originatorId";
73 private final String ACCEPTED_IN_PROGRESS_Response = "{\"status-reason\":\"ACCEPTED\"," +
74 "\"status\":\"IN_PROGRESS\"}";
75 private final String SUCCESSFUL_SUCCESSFUL_Response = "{\"status-reason\":\"SUCCESSFUL\"," +
76 "\"status\":\"SUCCESSFUL\"}";
77 private final String RECEIVED_IN_PROGRESS_Response = "{\"status-reason\":\"RECEIVED\"," +
78 "\"status\":\"IN_PROGRESS\"}";
79 private final String UNKNOWN_FAILED_Response = "{\"status-reason\":\"UNKNOWN\"," +
80 "\"status\":\"FAILED\"}";
82 private LocalRequestHandlerImpl requestHandler;
83 private TransactionRecorder recorder;
86 public void setUp() throws Exception {
87 mockStatic(FrameworkUtil.class);
88 Bundle myBundle = mock(Bundle.class);
89 PowerMockito.when(FrameworkUtil.getBundle(any())).thenReturn(myBundle);
91 BundleContext myBundleContext = mock(BundleContext.class);
92 Mockito.when(myBundle.getBundleContext()).thenReturn(myBundleContext);
94 ServiceReference svcRef = mock(ServiceReference.class);
95 Mockito.when(myBundleContext.getServiceReference(MessageAdapterFactory.class.getName())).thenReturn(svcRef);
97 Producer producer = mock(Producer.class);
98 MessageAdapterFactory factory = mock(MessageAdapterFactory.class);
99 Mockito.when(myBundleContext.getService(svcRef)).thenReturn(factory);
100 Mockito.when(factory.createProducer(anyCollection(), anyString(), anyString(), anyString())).thenReturn
103 requestHandler = spy(new LocalRequestHandlerImpl());
105 recorder = mock(TransactionRecorder.class);
106 requestHandler.setTransactionRecorder(recorder);
108 List<RequestStatus> result = Arrays.asList(RequestStatus.ACCEPTED);
109 PowerMockito.when(recorder.getRecords(anyString(), anyString(), anyString(), anyString())).thenReturn(result);
113 * Test response which contains status=Successful, status-reason=Successful
115 * Search criteria one = vnf-id + request-id + sub-request-id + originator-id
118 public void testHandleRequestSuccessfulWithSearchCriteriaOne() throws APPCException {
119 final String payload = "{\"request-id\":\"requestId\"," +
120 "\"sub-request-id\":\"subRequestId\"," +
121 "\"originator-id\":\"originatorId\"}";
123 List<RequestStatus> result = Arrays.asList(RequestStatus.SUCCESSFUL);
124 PowerMockito.when(recorder.getRecords(requestId, subRequestId, originatorId, vnfId)).thenReturn(result);
125 RuntimeContext runtimeContext = createRequestHandlerRuntimeContext(vnfId, payload);
127 requestHandler.handleRequest(runtimeContext);
128 Assert.assertTrue(SUCCESSFUL_SUCCESSFUL_Response.equals(runtimeContext.getResponseContext().getPayload()));
132 * Test response which contains status=IN_PROGRESS, status-reason=RECEIVED
134 * Search criteria one = vnf-id + request-id + sub-request-id + originator-id
137 public void testHandleRequestReceivedWithSearchCriteriaOne() throws APPCException {
138 final String payload = "{\"request-id\":\"requestId\"," +
139 "\"sub-request-id\":\"subRequestId\"," +
140 "\"originator-id\":\"originatorId\"}";
142 List<RequestStatus> result = Arrays.asList(RequestStatus.RECEIVED);
143 PowerMockito.when(recorder.getRecords(requestId, subRequestId, originatorId, vnfId)).thenReturn(result);
144 RuntimeContext runtimeContext = createRequestHandlerRuntimeContext(vnfId, payload);
146 requestHandler.handleRequest(runtimeContext);
147 Assert.assertTrue(RECEIVED_IN_PROGRESS_Response.equals(runtimeContext.getResponseContext().getPayload()));
151 * Test response which contains status=FAILED, status-reason=UNKNOWN
153 * Search criteria two = vnf-id + request-id + sub-request-id
156 public void testHandleRequestFailedWithSearchCriteriaTwo() throws APPCException {
157 final String payload = "{\"request-id\":\"requestId\"," +
158 "\"sub-request-id\":\"subRequestId\"}";
160 List<RequestStatus> result = Arrays.asList(RequestStatus.UNKNOWN);
161 PowerMockito.when(recorder.getRecords(requestId, subRequestId, null, vnfId)).thenReturn(result);
162 RuntimeContext runtimeContext = createRequestHandlerRuntimeContext(vnfId, payload);
164 requestHandler.handleRequest(runtimeContext);
165 Assert.assertTrue(UNKNOWN_FAILED_Response.equals(runtimeContext.getResponseContext().getPayload()));
170 public void testSuccessHandleRequest() throws Exception {
171 RuntimeContext runtimeContext = createRequestHandlerRuntimeContext("vnfId",
172 "{\"request-id\":\"request-id\"}");
174 requestHandler.handleRequest(runtimeContext);
175 Assert.assertTrue(ACCEPTED_IN_PROGRESS_Response.equals(runtimeContext.getResponseContext().getPayload()));
178 @Test(expected = IllegalArgumentException.class)
179 public void testHandleRequestVnfIdFailure() throws Exception {
180 RuntimeContext runtimeContext = createRequestHandlerRuntimeContext(null, "{\"request-id\":\"request-id\"}");
181 runtimeContext.getRequestContext().getActionIdentifiers().setVnfId(null);
182 requestHandler.handleRequest(runtimeContext);
185 @Test(expected = IllegalArgumentException.class)
186 public void testHandleRequestInvalidPayload() throws Exception {
187 String incorrectPayload = "{\"RequestId\":\"requestToCheck\"}";
188 RuntimeContext runtimeContext = createRequestHandlerRuntimeContext("vnfId", incorrectPayload);
189 requestHandler.handleRequest(runtimeContext);
193 public void testGetStatusOfRequestSuccess() throws Exception {
194 List<RequestStatus> result = Arrays.asList(RequestStatus.ACCEPTED);
195 PowerMockito.when(recorder.getRecords(requestId, null, null, vnfId)).thenReturn(result);
197 RequestStatus status = Whitebox.invokeMethod(requestHandler,
198 "getStatusOfRequest", requestId, null, null, vnfId);
199 Assert.assertTrue(status.name().equals("ACCEPTED"));
202 @Test(expected = MultipleRecordsRetrievedException.class)
203 public void testGetStatusOfRequest_MoreThanOne() throws Exception {
204 List<RequestStatus> result = Arrays.asList(RequestStatus.ACCEPTED, RequestStatus.FAILED);
205 PowerMockito.when(recorder.getRecords(requestId, null, null, vnfId)).thenReturn(result);
206 RequestStatus status = Whitebox.invokeMethod(requestHandler,
207 "getStatusOfRequest", requestId, null, null, vnfId);
208 Assert.assertNull(status);
212 public void testGetStatusOfRequestNotFound() throws Exception {
213 List<RequestStatus> result = new ArrayList<>();
214 PowerMockito.when(recorder.getRecords(requestId, null, null, vnfId)).thenReturn(result);
216 RequestStatus status = Whitebox.invokeMethod(requestHandler,
217 "getStatusOfRequest", requestId, null, null, vnfId);
218 Assert.assertTrue(status.name().equals("NOT_FOUND"));