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