Include impacted changes for APPC-346,APPC-348
[appc.git] / appc-dispatcher / appc-request-handler / appc-request-handler-core / src / test / java / org / onap / appc / requesthandler / impl / LocalRequestHandlerImplTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP : APPC
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
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
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.
20  * 
21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22  * ============LICENSE_END=========================================================
23  */
24
25 package org.onap.appc.requesthandler.impl;
26
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;
51
52 import java.lang.reflect.Array;
53 import java.util.ArrayList;
54 import java.util.Arrays;
55 import java.util.List;
56
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;
63
64 /**
65  * Test class for LocalRequestHandlerImpl
66  */
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\"}";
82
83     private LocalRequestHandlerImpl requestHandler;
84     private TransactionRecorder recorder;
85
86     @Before
87     public void setUp() throws Exception {
88         mockStatic(FrameworkUtil.class);
89         Bundle myBundle = mock(Bundle.class);
90         PowerMockito.when(FrameworkUtil.getBundle(any())).thenReturn(myBundle);
91
92         BundleContext myBundleContext = mock(BundleContext.class);
93         Mockito.when(myBundle.getBundleContext()).thenReturn(myBundleContext);
94
95         ServiceReference svcRef = mock(ServiceReference.class);
96         Mockito.when(myBundleContext.getServiceReference(MessageAdapterFactory.class.getName())).thenReturn(svcRef);
97
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
102             (producer);
103
104         requestHandler = spy(new LocalRequestHandlerImpl());
105
106         recorder = mock(TransactionRecorder.class);
107         requestHandler.setTransactionRecorder(recorder);
108
109         List<RequestStatus> result = Arrays.asList(RequestStatus.ACCEPTED);
110         PowerMockito.when(recorder.getRecords(anyString(), anyString(), anyString(), anyString())).thenReturn(result);
111     }
112
113     /**
114      * Test response which contains status=Successful, status-reason=Successful
115      * <p>
116      * Search criteria one = vnf-id + request-id + sub-request-id + originator-id
117      */
118     @Test
119     public void testHandleRequestSuccessfulWithSearchCriteriaOne() throws APPCException {
120         final String payload = "{\"request-id\":\"requestId\"," +
121             "\"sub-request-id\":\"subRequestId\"," +
122             "\"originator-id\":\"originatorId\"}";
123
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);
127
128         requestHandler.handleRequest(runtimeContext);
129         Assert.assertTrue(SUCCESSFUL_SUCCESSFUL_Response.equals(runtimeContext.getResponseContext().getPayload()));
130     }
131
132     /**
133      * Test response which contains status=IN_PROGRESS, status-reason=RECEIVED
134      * <p>
135      * Search criteria one = vnf-id + request-id + sub-request-id + originator-id
136      */
137     @Test
138     public void testHandleRequestReceivedWithSearchCriteriaOne() throws APPCException {
139         final String payload = "{\"request-id\":\"requestId\"," +
140             "\"sub-request-id\":\"subRequestId\"," +
141             "\"originator-id\":\"originatorId\"}";
142
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);
146
147         requestHandler.handleRequest(runtimeContext);
148         Assert.assertTrue(RECEIVED_IN_PROGRESS_Response.equals(runtimeContext.getResponseContext().getPayload()));
149     }
150
151     /**
152      * Test response which contains status=FAILED, status-reason=UNKNOWN
153      * <p>
154      * Search criteria two = vnf-id + request-id + sub-request-id
155      */
156     @Test
157     public void testHandleRequestFailedWithSearchCriteriaTwo() throws APPCException {
158         final String payload = "{\"request-id\":\"requestId\"," +
159             "\"sub-request-id\":\"subRequestId\"}";
160
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);
164
165         requestHandler.handleRequest(runtimeContext);
166         Assert.assertTrue(UNKNOWN_FAILED_Response.equals(runtimeContext.getResponseContext().getPayload()));
167     }
168
169     @Test
170
171     public void testSuccessHandleRequest() throws Exception {
172         RuntimeContext runtimeContext = createRequestHandlerRuntimeContext("vnfId",
173             "{\"request-id\":\"request-id\"}");
174
175         requestHandler.handleRequest(runtimeContext);
176         Assert.assertTrue(ACCEPTED_IN_PROGRESS_Response.equals(runtimeContext.getResponseContext().getPayload()));
177     }
178
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);
184     }
185
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);
191     }
192
193     @Test
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);
197
198         RequestStatus status = Whitebox.invokeMethod(requestHandler,
199             "getStatusOfRequest", requestId, null, null, vnfId);
200         Assert.assertTrue(status.name().equals("ACCEPTED"));
201     }
202
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);
210     }
211
212     @Test
213     public void testGetStatusOfRequestNotFound() throws Exception {
214         List<RequestStatus> result = new ArrayList<>();
215         PowerMockito.when(recorder.getRecords(requestId, null, null, vnfId)).thenReturn(result);
216
217         RequestStatus status = Whitebox.invokeMethod(requestHandler,
218             "getStatusOfRequest", requestId, null, null, vnfId);
219         Assert.assertTrue(status.name().equals("NOT_FOUND"));
220     }
221
222
223 }