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"));