2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2019 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;
26 import com.att.eelf.configuration.EELFLogger;
27 import com.att.eelf.configuration.EELFManager;
28 import org.junit.Assert;
29 import org.junit.Before;
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.mockito.Matchers;
33 import org.mockito.Mockito;
34 import org.onap.appc.configuration.Configuration;
35 import org.onap.appc.configuration.ConfigurationFactory;
36 import org.onap.appc.domainmodel.lcm.ActionIdentifiers;
37 import org.onap.appc.domainmodel.lcm.CommonHeader;
38 import org.onap.appc.domainmodel.lcm.Flags;
39 import org.onap.appc.domainmodel.lcm.RequestContext;
40 import org.onap.appc.domainmodel.lcm.ResponseContext;
41 import org.onap.appc.domainmodel.lcm.RuntimeContext;
42 import org.onap.appc.domainmodel.lcm.Status;
43 import org.onap.appc.domainmodel.lcm.VNFContext;
44 import org.onap.appc.domainmodel.lcm.VNFOperation;
45 import org.onap.appc.exceptions.InvalidInputException;
46 import org.onap.appc.executor.CommandExecutor;
47 import org.onap.appc.executor.objects.LCMCommandStatus;
48 import org.onap.appc.lifecyclemanager.LifecycleManager;
49 import org.onap.appc.lifecyclemanager.objects.LifecycleException;
50 import org.onap.appc.lifecyclemanager.objects.NoTransitionDefinedException;
51 import org.onap.appc.lockmanager.api.LockException;
52 import org.onap.appc.lockmanager.api.LockManager;
53 import org.onap.appc.messageadapter.MessageAdapter;
54 import org.onap.appc.messageadapter.impl.MessageAdapterImpl;
55 import org.onap.appc.requesthandler.exceptions.DGWorkflowNotFoundException;
56 import org.onap.appc.requesthandler.exceptions.DuplicateRequestException;
57 import org.onap.appc.requesthandler.exceptions.LCMOperationsDisabledException;
58 import org.onap.appc.requesthandler.exceptions.MissingVNFDataInAAIException;
59 import org.onap.appc.requesthandler.exceptions.RequestExpiredException;
60 import org.onap.appc.requesthandler.exceptions.VNFNotFoundException;
61 import org.onap.appc.requesthandler.exceptions.WorkflowNotFoundException;
62 import org.onap.appc.requesthandler.impl.RequestHandlerImpl;
63 import org.onap.appc.requesthandler.impl.RequestValidatorImpl;
64 import org.onap.appc.requesthandler.objects.RequestHandlerInput;
65 import org.onap.appc.requesthandler.objects.RequestHandlerOutput;
66 import org.onap.appc.transactionrecorder.TransactionRecorder;
67 import org.onap.appc.workflow.WorkFlowManager;
68 import org.onap.appc.workflow.objects.WorkflowExistsOutput;
69 import org.osgi.framework.Bundle;
70 import org.osgi.framework.BundleContext;
71 import org.osgi.framework.FrameworkUtil;
72 import org.osgi.framework.ServiceReference;
73 import org.powermock.api.mockito.PowerMockito;
74 import org.powermock.core.classloader.annotations.PrepareForTest;
75 import org.powermock.modules.junit4.PowerMockRunner;
77 import java.util.Date;
78 import java.util.HashMap;
79 import java.util.UUID;
81 import static org.mockito.Matchers.anyObject;
82 import static org.mockito.Mockito.doNothing;
83 import static org.mockito.Mockito.mock;
84 import static org.powermock.api.mockito.PowerMockito.when;
86 @RunWith(PowerMockRunner.class)
87 @PrepareForTest( {FrameworkUtil.class, TransactionRecorder.class, RequestHandlerImpl.class,RequestValidatorImpl.class, TransactionRecorder.class, MessageAdapterImpl.class})
88 public class RequestHandlerTest {
90 private final EELFLogger logger = EELFManager.getInstance().getLogger(RequestHandlerTest.class);
92 private RequestHandlerImpl requestHandler;
93 private RequestValidatorImpl requestValidator;
94 private WorkFlowManager workflowManager;
95 private LockManager lockManager;
96 private Configuration configuration;
99 public void init() throws Exception {
100 configuration = ConfigurationFactory.getConfiguration();
102 configuration.setProperty("appc.LCM.topic.write" , "TEST");
103 configuration.setProperty("appc.LCM.client.key" , "TEST");
104 configuration.setProperty("appc.LCM.client.secret" , "TEST");
106 PowerMockito.mockStatic(FrameworkUtil.class);
109 requestHandler = new RequestHandlerImpl();
110 LifecycleManager lifecyclemanager= mock(LifecycleManager.class);
111 workflowManager= mock(WorkFlowManager.class);
113 CommandExecutor commandExecutor= mock(CommandExecutor.class);
114 MessageAdapter messageAdapter = mock(MessageAdapter.class);
115 lockManager = mock(LockManager.class);
116 TransactionRecorder transactionRecorder= mock(TransactionRecorder.class);
118 requestHandler.setMessageAdapter(messageAdapter);
119 requestValidator = mock(RequestValidatorImpl.class);
120 requestValidator.setWorkflowManager(workflowManager);
121 requestHandler.setCommandExecutor(commandExecutor);
122 requestHandler.setRequestValidator(requestValidator);
123 requestHandler.setLockManager(lockManager);
124 requestHandler.setTransactionRecorder(transactionRecorder);
126 doNothing().when(transactionRecorder).store(anyObject());
127 // Mockito.when(commandExecutor.executeCommand((CommandExecutorInput)anyObject())).thenReturn(true);
130 private void threadSleep(){
133 } catch (InterruptedException e) {
137 //TODO needs to be fixed
139 public void testNegativeFlowWithRequestingUsedVnfId() throws Exception {
140 logger.debug("=====================testNegativeFlowWithRequestingUsedVnfId=============================");
141 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
142 RequestHandlerInput input1 = this.getRequestHandlerInput("131", VNFOperation.Configure, 1200,
143 false,UUID.randomUUID().toString(),UUID.randomUUID().toString(),UUID.randomUUID().toString(),new Date());
144 mockRuntimeContextAndVnfContext(input1);
145 PowerMockito.doNothing().when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
146 PowerMockito.doThrow(new LockException(" ")).when(lockManager).acquireLock(Matchers.anyString(), Matchers.anyString(), Matchers.anyByte());
147 RequestHandlerOutput output1 = requestHandler.handleRequest(input1);
149 Assert.assertEquals(LCMCommandStatus.LOCKING_FAILURE.getResponseCode(), output1.getResponseContext().getStatus().getCode());
150 logger.debug("testNegativeFlowWithRequestingUsedVnfId");
151 logger.debug("=====================testNegativeFlowWithRequestingUsedVnfId=============================");
155 public void testInvalidVNFExceptionRequest() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
156 String originatorID = UUID.randomUUID().toString();
157 String requestID = UUID.randomUUID().toString();
158 String subRequestID = UUID.randomUUID().toString();
159 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
160 RequestHandlerInput input = this.getRequestHandlerInput("3009", VNFOperation.Configure, 0,false,originatorID, requestID, subRequestID,new Date());
161 ///PowerMockito.doThrow(new VNFNotFoundException(" ")).when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
162 RequestHandlerOutput output = requestHandler.handleRequest(input);
163 Assert.assertEquals(LCMCommandStatus.VNF_NOT_FOUND.getResponseCode(), output.getResponseContext().getStatus().getCode());
167 public void testLifecycleException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
168 String originatorID = UUID.randomUUID().toString();
169 String requestID = UUID.randomUUID().toString();
170 String subRequestID = UUID.randomUUID().toString();
171 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
172 RequestHandlerInput input = this.getRequestHandlerInput("3009", VNFOperation.Configure,0,false,originatorID, requestID, subRequestID,new Date());
173 RequestHandlerOutput output = requestHandler.handleRequest(input);
174 Assert.assertEquals(LCMCommandStatus.INVALID_VNF_STATE.getResponseCode(), output.getResponseContext().getStatus().getCode());
179 public void testRequestExpiredException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
180 String originatorID = UUID.randomUUID().toString();
181 String requestID = UUID.randomUUID().toString();
182 String subRequestID = UUID.randomUUID().toString();
183 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
184 RequestHandlerInput input = this.getRequestHandlerInput("3009", VNFOperation.Configure,0,false,originatorID, requestID, subRequestID,new Date());
185 RequestHandlerOutput output = requestHandler.handleRequest(input);
186 Assert.assertEquals(LCMCommandStatus.EXPIRED_REQUEST.getResponseCode(), output.getResponseContext().getStatus().getCode());
190 public void testMissingVNFdata() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
191 String originatorID = UUID.randomUUID().toString();
192 String requestID = UUID.randomUUID().toString();
193 String subRequestID = UUID.randomUUID().toString();
195 RequestHandlerInput input = this.getRequestHandlerInput("3009", VNFOperation.Configure,0,false,originatorID, requestID, subRequestID,new Date());
196 *//*PowerMockito.doThrow(new MissingVNFDataInAAIException("vnf-type")).when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));*//*
197 RequestHandlerOutput output = requestHandler.handleRequest(input);
198 Assert.assertEquals(LCMCommandStatus.MISSING_VNF_DATA_IN_AAI.getResponseCode(), output.getResponseContext().getStatus().getCode());
202 public void testWorkflowNotFoundException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
203 String originatorID = UUID.randomUUID().toString();
204 String requestID = UUID.randomUUID().toString();
205 String subRequestID = UUID.randomUUID().toString();
206 //PowerMockito.doNothing().when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
207 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
208 RequestHandlerInput input = this.getRequestHandlerInput("3009", VNFOperation.Configure,0,false,originatorID, requestID, subRequestID,new Date());
209 //PowerMockito.doThrow(new WorkflowNotFoundException("Unable to find the DG","VNF-2.0.0.0", "Test")).when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
210 RequestHandlerOutput output = requestHandler.handleRequest(input);
211 Assert.assertEquals(LCMCommandStatus.WORKFLOW_NOT_FOUND.getResponseCode(), output.getResponseContext().getStatus().getCode());}
214 public void testDGWorkflowNotFoundException() throws Exception {
215 String originatorID = UUID.randomUUID().toString();
216 String requestID = UUID.randomUUID().toString();
217 String subRequestID = UUID.randomUUID().toString();
218 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true, true));
219 RequestHandlerInput input = this.getRequestHandlerInput("3009", VNFOperation.Configure, 0, false, originatorID, requestID, subRequestID, new Date());
220 PowerMockito.doThrow(new DGWorkflowNotFoundException("Unable to find the DG", "VNF-2.0.0.0", "temp", "Test","Test","Test")).when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
221 RequestHandlerOutput output = requestHandler.handleRequest(input);
222 Assert.assertEquals(LCMCommandStatus.DG_WORKFLOW_NOT_FOUND.getResponseCode(), output.getResponseContext().getStatus().getCode());
226 public void testInvalidInputException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
227 String originatorID1 = UUID.randomUUID().toString();
228 String requestID1 = UUID.randomUUID().toString();
229 String subRequestID1 = UUID.randomUUID().toString();
230 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
231 RequestHandlerInput input1 = this.getRequestHandlerInput("3009", VNFOperation.Configure,0,false,originatorID1, requestID1, subRequestID1,new Date());
232 //PowerMockito.doThrow(new InvalidInputException(" ")).when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
233 RequestHandlerOutput output1 = requestHandler.handleRequest(input1);
234 Assert.assertEquals(LCMCommandStatus.INVALID_INPUT_PARAMETER.getResponseCode(), output1.getResponseContext().getStatus().getCode());
238 public void testNoTransitionDefinedException() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
239 String originatorID = UUID.randomUUID().toString();
240 String requestID = UUID.randomUUID().toString();
241 String subRequestID = UUID.randomUUID().toString();
242 //PowerMockito.doNothing().when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
243 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
244 RequestHandlerInput input = this.getRequestHandlerInput("3010", VNFOperation.Configure,0,false,originatorID, requestID, subRequestID,new Date());
245 ///PowerMockito.doThrow(new NoTransitionDefinedException("Invalid VNF State","Unstable","Test event")).when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
246 RequestHandlerOutput output = requestHandler.handleRequest(input);
247 Assert.assertEquals(LCMCommandStatus.NO_TRANSITION_DEFINE.getResponseCode(), output.getResponseContext().getStatus().getCode());
251 public void rejectInvalidRequest() throws NoTransitionDefinedException, LifecycleException, InvalidInputException, RequestExpiredException, DuplicateRequestException, VNFNotFoundException, WorkflowNotFoundException, DGWorkflowNotFoundException, MissingVNFDataInAAIException, LCMOperationsDisabledException {
252 String originatorID = UUID.randomUUID().toString();
253 String requestID = UUID.randomUUID().toString();
254 String subRequestID = UUID.randomUUID().toString();
255 ///PowerMockito.doNothing().when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
256 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
257 RequestHandlerInput input = this.getRequestHandlerInput("3009", VNFOperation.Configure,0,false,originatorID, requestID, subRequestID,new Date());
258 ///PowerMockito.doThrow(new VNFNotFoundException(" ")).when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
259 RequestHandlerOutput output = requestHandler.handleRequest(input);
260 Assert.assertEquals(LCMCommandStatus.VNF_NOT_FOUND.getResponseCode(), output.getResponseContext().getStatus().getCode());
264 public void testUnstableWorkingState() throws Exception {
265 logger.debug("=====================testUnstableWorkingState=============================");
266 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
267 RequestHandlerInput input = this.getRequestHandlerInput("37", VNFOperation.Configure, 1200,
268 false,UUID.randomUUID().toString(),UUID.randomUUID().toString(),UUID.randomUUID().toString(),new Date());
269 PowerMockito.doNothing().when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
270 mockRuntimeContextAndVnfContext(input);
271 RequestHandlerOutput output = requestHandler.handleRequest(input);
273 Assert.assertEquals(LCMCommandStatus.ACCEPTED.getResponseCode(), output.getResponseContext().getStatus().getCode());
275 RequestHandlerInput input1 = this.getRequestHandlerInput("37", VNFOperation.Configure,1200,
276 false,UUID.randomUUID().toString(),UUID.randomUUID().toString(),UUID.randomUUID().toString(),new Date());
277 PowerMockito.doThrow(new LockException(" ")).when(lockManager).acquireLock(Matchers.anyString(), Matchers.anyString(), Matchers.anyByte());
278 mockRuntimeContextAndVnfContext(input1);
279 RequestHandlerOutput output1 = requestHandler.handleRequest(input1);
281 Assert.assertEquals(LCMCommandStatus.LOCKING_FAILURE.getResponseCode(), output1.getResponseContext().getStatus().getCode());
282 logger.debug("=====================testUnstableWorkingState=============================");
286 public void testOnRequestExecutionEndSuccessForWorkingState() throws Exception {
287 logger.debug("=====================testOnRequestExecutionEndSuccessForWorkingState=============================");
288 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
289 RequestHandlerInput input1 = this.getRequestHandlerInput("137", VNFOperation.Configure, 1200,
290 false,UUID.randomUUID().toString(),UUID.randomUUID().toString(),UUID.randomUUID().toString(),new Date());
291 mockRuntimeContextAndVnfContext(input1);
293 PowerMockito.doNothing().when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
296 RequestHandlerOutput output = requestHandler.handleRequest(input1);
297 Assert.assertEquals(LCMCommandStatus.ACCEPTED.getResponseCode(),output.getResponseContext().getStatus().getCode());
300 requestHandler.onRequestExecutionEnd(this.getAsyncResponse(true,LCMCommandStatus.SUCCESS,"137", "", "", ""));
302 input1 = this.getRequestHandlerInput("137", VNFOperation.Configure, 1200,
303 false,UUID.randomUUID().toString(),UUID.randomUUID().toString(),UUID.randomUUID().toString(),new Date());
304 mockRuntimeContextAndVnfContext(input1);
305 output = requestHandler.handleRequest(input1);
306 Assert.assertEquals(LCMCommandStatus.ACCEPTED.getResponseCode(),output.getResponseContext().getStatus().getCode());
307 logger.debug("=====================testOnRequestExecutionEndSuccessForWorkingState=============================");
310 private void mockRuntimeContextAndVnfContext(RequestHandlerInput input1) throws Exception {
311 RuntimeContext runtimeContext = PowerMockito.mock(RuntimeContext.class);
312 VNFContext vnfContext = new VNFContext();
313 vnfContext.setType("SCP");
314 vnfContext.setId("137");
315 when(runtimeContext.getVnfContext()).thenReturn(vnfContext);
316 when(runtimeContext.getRequestContext()).thenReturn(input1.getRequestContext());
317 when(runtimeContext.getRpcName()).thenReturn(input1.getRpcName());
318 Date startTime = new Date();
319 when(runtimeContext.getTimeStart()).thenReturn(startTime.toInstant());
322 ResponseContext responseContext = new ResponseContext();
323 responseContext.setStatus(new Status());
324 responseContext.setAdditionalContext(new HashMap<>(4));
325 responseContext.setCommonHeader(input1.getRequestContext().getCommonHeader());
326 runtimeContext.setResponseContext(responseContext);
327 when(runtimeContext.getResponseContext()).thenReturn(responseContext);
328 responseContext.setStatus(new Status());
329 runtimeContext.setResponseContext(responseContext);
330 PowerMockito.whenNew(RuntimeContext.class).withAnyArguments().thenReturn(runtimeContext);
335 public void testOnRequestExecutionEndFailureForWorkingState() throws Exception {
336 logger.debug("=====================testOnRequestExecutionEndFailureForWorkingState=============================");
337 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
339 PowerMockito.doNothing().when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
341 RuntimeContext noneMockRuntimeContext = this.getAsyncResponse(false,LCMCommandStatus.NO_TRANSITION_DEFINE,"38", "", "", "");
343 RequestHandlerInput input1 = this.getRequestHandlerInput("38", VNFOperation.Configure, 1200,
344 false,UUID.randomUUID().toString(),UUID.randomUUID().toString(),UUID.randomUUID().toString(),new Date());
345 mockRuntimeContextAndVnfContext(input1);
346 RequestHandlerOutput output = requestHandler.handleRequest(input1);
347 Assert.assertEquals(LCMCommandStatus.ACCEPTED.getResponseCode(),output.getResponseContext().getStatus().getCode());
349 requestHandler.onRequestExecutionEnd(noneMockRuntimeContext);
351 input1 = this.getRequestHandlerInput("38", VNFOperation.Configure, 1200,
352 false,UUID.randomUUID().toString(),UUID.randomUUID().toString(),UUID.randomUUID().toString(),new Date());
353 mockRuntimeContextAndVnfContext(input1);
354 output = requestHandler.handleRequest(input1);
355 Assert.assertEquals(LCMCommandStatus.UNSTABLE_VNF.getResponseCode(),output.getResponseContext().getStatus().getCode());
357 logger.debug("=====================testOnRequestExecutionEndFailureForWorkingState=============================");
361 public void testOnRequestExecutionEndTTLExpiredForWorkingState() throws Exception {
362 logger.debug("=====================testOnRequestExecutionEndFailureForWorkingState=============================");
363 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
365 RequestHandlerInput input1 = this.getRequestHandlerInput("39", VNFOperation.Configure, 1,
366 false,UUID.randomUUID().toString(),UUID.randomUUID().toString(),UUID.randomUUID().toString(),new Date());
368 PowerMockito.doNothing().when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
369 mockRuntimeContextAndVnfContext(input1);
371 RequestHandlerOutput output = requestHandler.handleRequest(input1);
372 Assert.assertEquals(LCMCommandStatus.ACCEPTED.getResponseCode(),output.getResponseContext().getStatus().getCode());
374 input1 = this.getRequestHandlerInput("39", VNFOperation.Configure, 1200,
375 false,UUID.randomUUID().toString(),UUID.randomUUID().toString(),UUID.randomUUID().toString(),new Date());
376 PowerMockito.doThrow(new LockException(" ")).when(lockManager).acquireLock(Matchers.anyString(), Matchers.anyString(), Matchers.anyByte());
377 output = requestHandler.handleRequest(input1);
378 Assert.assertEquals(LCMCommandStatus.LOCKING_FAILURE.getResponseCode(),output.getResponseContext().getStatus().getCode());
379 logger.debug("=====================testOnRequestExecutionEndFailureForWorkingState=============================");
383 public void testOnRequestTTLEndForWorkingState() throws Exception {
384 logger.debug("=====================testOnRequestTTLEndForWorkingState=============================");
385 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
387 PowerMockito.doNothing().when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
389 RequestHandlerInput input1 = this.getRequestHandlerInput("40", VNFOperation.Configure, 1200,
390 false,UUID.randomUUID().toString(),UUID.randomUUID().toString(),UUID.randomUUID().toString(),new Date());
391 mockRuntimeContextAndVnfContext(input1);
392 RequestHandlerOutput output = requestHandler.handleRequest(input1);
393 Assert.assertEquals(LCMCommandStatus.ACCEPTED.getResponseCode(),output.getResponseContext().getStatus().getCode());
395 RuntimeContext response = this.getAsyncResponse(false,LCMCommandStatus.EXPIRED_REQUEST_FAILURE,"40", "", "", "");
396 requestHandler.onRequestTTLEnd(response);
397 input1 = this.getRequestHandlerInput("40", VNFOperation.Configure, 1200,
398 false,UUID.randomUUID().toString(),UUID.randomUUID().toString(),UUID.randomUUID().toString(),new Date());
399 output = requestHandler.handleRequest(input1);
400 Assert.assertEquals(LCMCommandStatus.UNSTABLE_VNF.getResponseCode(),output.getResponseContext().getStatus().getCode());
401 logger.debug("=====================testOnRequestTTLEndForWorkingState=============================");
405 public void testForceCommandExecution() throws Exception {
406 logger.debug("=====================testForceCommandExecution=============================");
407 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
408 RequestHandlerInput input1 = this.getRequestHandlerInput("138", VNFOperation.Configure, 1200,
409 false,UUID.randomUUID().toString(),UUID.randomUUID().toString(),UUID.randomUUID().toString(),new Date());
410 mockRuntimeContextAndVnfContext(input1);
412 PowerMockito.doNothing().when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
413 RequestHandlerOutput output = requestHandler.handleRequest(input1);
414 Assert.assertEquals(LCMCommandStatus.ACCEPTED.getResponseCode(),output.getResponseContext().getStatus().getCode());
416 RuntimeContext response = this.getAsyncResponse(false,LCMCommandStatus.ACCEPTED,"138", "", "", "");
417 requestHandler.onRequestTTLEnd(response);
418 input1 = this.getRequestHandlerInput("138", VNFOperation.Configure, 1200,
419 false,UUID.randomUUID().toString(),UUID.randomUUID().toString(),UUID.randomUUID().toString(),new Date());
420 input1.getRequestContext().getCommonHeader().getFlags().setForce(true);
421 mockRuntimeContextAndVnfContext(input1);
422 output = requestHandler.handleRequest(input1);
423 Assert.assertEquals(LCMCommandStatus.ACCEPTED.getResponseCode(),output.getResponseContext().getStatus().getCode());
424 logger.debug("=====================testForceCommandExecution=============================");
428 public void testOnRequestExecutionEndSuccess() throws VNFNotFoundException {
429 logger.debug("=====================Positive TEST - On Request Execution End SUCCESS- Starts =============================");
430 requestHandler.onRequestExecutionEnd(this.getAsyncResponse(true,LCMCommandStatus.SUCCESS,"201", "", "", ""));
431 logger.debug("=====================Positive TEST - On Request Execution End SUCCESS- Ends =============================");
435 public void testOnRequestExecutionEndFailure() throws VNFNotFoundException {
436 logger.debug("=====================Positive TEST - On Request Execution End FAILURE- Starts =============================");
437 requestHandler.onRequestExecutionEnd(this.getAsyncResponse(false,LCMCommandStatus.DG_FAILURE,"202", "", "", ""));
438 logger.debug("=====================Positive TEST - On Request Execution End FAILURE- Ends =============================");
441 private RequestHandlerInput getRequestHandlerInput(String vnfID, VNFOperation action, int ttl, boolean force,String originatorId, String requestId, String subRequestId,Date timeStamp){
442 String API_VERSION= "2.0.0";
443 RequestHandlerInput input = new RequestHandlerInput();
444 RuntimeContext runtimeContext = createRuntimeContextWithSubObjects();
445 RequestContext requestContext = runtimeContext.getRequestContext();
446 input.setRequestContext(requestContext);
447 requestContext.getActionIdentifiers().setVnfId(vnfID);
448 requestContext.setAction(action);
449 input.setRpcName(convertActionNameToUrl(action.name()));
450 requestContext.getCommonHeader().setRequestId(requestId);
451 requestContext.getCommonHeader().setSubRequestId(subRequestId);
452 requestContext.getCommonHeader().setOriginatorId(originatorId);
453 requestContext.getCommonHeader().getFlags().setTtl(ttl);
454 requestContext.getCommonHeader().getFlags().setForce(force);
455 requestContext.getCommonHeader().setTimestamp(timeStamp);
456 requestContext.getCommonHeader().setApiVer(API_VERSION);
460 private RuntimeContext getAsyncResponse(boolean wfStatus, LCMCommandStatus commandStatus, String vnfId, String originatorId, String requestId, String subRequestId)
462 RuntimeContext output = createRuntimeContextWithSubObjects();
465 output.getRequestContext().getActionIdentifiers().setVnfId(vnfId);
466 output.getVnfContext().setId(vnfId);
467 output.getResponseContext().getCommonHeader().setApiVer("2.0.0");
468 output.getResponseContext().getCommonHeader().setTimestamp(new Date());
469 output.getResponseContext().getStatus().setCode(LCMCommandStatus.SUCCESS.getResponseCode());
470 output.setTimeStart(new Date().toInstant());
471 output.getResponseContext().getCommonHeader().setOriginatorId(originatorId);
472 output.getResponseContext().getCommonHeader().setRequestId(requestId);
473 output.getResponseContext().getCommonHeader().setSubRequestId(subRequestId);
475 output.getVnfContext().setType("FIREWALL");
476 output.getRequestContext().setAction(VNFOperation.Configure);
477 output.setRpcName("configure");
478 output.getResponseContext().setPayload("");
483 public void rejectDuplicateRequest() throws Exception {
484 String originatorID = UUID.randomUUID().toString();
485 String requestID = UUID.randomUUID().toString();
486 String subRequestID = UUID.randomUUID().toString();
487 PowerMockito.doNothing().when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
489 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
490 RequestHandlerInput input = this.getRequestHandlerInput("301", VNFOperation.Configure,0,false,originatorID, requestID, subRequestID,new Date());
491 mockRuntimeContextAndVnfContext(input);
493 RequestHandlerOutput output = requestHandler.handleRequest(input);
494 Assert.assertEquals(LCMCommandStatus.ACCEPTED.getResponseCode(), output.getResponseContext().getStatus().getCode());
496 input = this.getRequestHandlerInput("309", VNFOperation.Configure,0,false,originatorID, requestID, subRequestID,new Date());
498 PowerMockito.doThrow(new DuplicateRequestException(" ")).when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
499 output = requestHandler.handleRequest(input);
500 Assert.assertEquals(LCMCommandStatus.DUPLICATE_REQUEST.getResponseCode(), output.getResponseContext().getStatus().getCode());
504 public void removeRequestFromRegistryOnRequestCompletion() throws Exception {
505 String originatorID = UUID.randomUUID().toString();
506 String requestID = UUID.randomUUID().toString();
507 String subRequestID = UUID.randomUUID().toString();
508 PowerMockito.doNothing().when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
510 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
511 RequestHandlerInput input = this.getRequestHandlerInput("302", VNFOperation.Configure,0,false,originatorID, requestID, subRequestID,new Date());
512 mockRuntimeContextAndVnfContext(input);
514 RequestHandlerOutput output = requestHandler.handleRequest(input);
515 Assert.assertEquals(LCMCommandStatus.ACCEPTED.getResponseCode(), output.getResponseContext().getStatus().getCode());
517 RuntimeContext asyncResponse = this.getAsyncResponse(true,LCMCommandStatus.SUCCESS,"302",originatorID,requestID,subRequestID);
518 requestHandler.onRequestExecutionEnd(asyncResponse);
520 input = this.getRequestHandlerInput("310", VNFOperation.Configure,0,false,originatorID, requestID, subRequestID,new Date());
521 mockRuntimeContextAndVnfContext(input);
522 output = requestHandler.handleRequest(input);
523 Assert.assertEquals(LCMCommandStatus.ACCEPTED.getResponseCode(), output.getResponseContext().getStatus().getCode());
527 public void removeRequestFromRegistryOnTTLExpiration() throws Exception {
528 String originatorID = UUID.randomUUID().toString();
529 String requestID = UUID.randomUUID().toString();
530 String subRequestID = UUID.randomUUID().toString();
532 PowerMockito.doNothing().when(requestValidator).validateRequest(Matchers.any(RuntimeContext.class));
534 Mockito.when(workflowManager.workflowExists(anyObject())).thenReturn(new WorkflowExistsOutput(true,true));
535 RequestHandlerInput input = this.getRequestHandlerInput("303", VNFOperation.Configure,0,false,originatorID, requestID, subRequestID,new Date());
536 mockRuntimeContextAndVnfContext(input);
537 RequestHandlerOutput output = requestHandler.handleRequest(input);
538 Assert.assertEquals(LCMCommandStatus.ACCEPTED.getResponseCode(), output.getResponseContext().getStatus().getCode());
540 RuntimeContext asyncResponse = this.getAsyncResponse(true,LCMCommandStatus.ACCEPTED,"303",originatorID,requestID,subRequestID);
541 requestHandler.onRequestTTLEnd(asyncResponse);
543 output = requestHandler.handleRequest(input);
544 Assert.assertEquals(LCMCommandStatus.ACCEPTED.getResponseCode(), output.getResponseContext().getStatus().getCode());
548 public void getMetricserviceTest() throws Exception{
549 Method method = RequestHandlerImpl.class.getDeclaredMethod("getMetricservice", null);
550 method.setAccessible(true);
551 method.invoke(null, null);
555 public void onRequestExecutionStartTest() throws Exception{
556 requestHandler.onRequestExecutionStart("303",false, true);
557 Assert.assertNotNull(requestHandler);
561 private RuntimeContext createRuntimeContextWithSubObjects() {
562 RuntimeContext runtimeContext = new RuntimeContext();
563 RequestContext requestContext = new RequestContext();
564 runtimeContext.setRequestContext(requestContext);
565 ResponseContext responseContext = createResponseContextWithSuObjects();
566 runtimeContext.setResponseContext(responseContext);
567 CommonHeader commonHeader = new CommonHeader();
568 requestContext.setCommonHeader(commonHeader);
569 Flags flags = new Flags();
570 commonHeader.setFlags(flags);
571 ActionIdentifiers actionIdentifiers = new ActionIdentifiers();
572 requestContext.setActionIdentifiers(actionIdentifiers);
573 VNFContext vnfContext = new VNFContext();
574 runtimeContext.setVnfContext(vnfContext);
575 return runtimeContext;
579 private ResponseContext createResponseContextWithSuObjects(){
580 ResponseContext responseContext = new ResponseContext();
581 CommonHeader commonHeader = new CommonHeader();
582 Flags flags = new Flags();
583 Status status = new Status();
584 responseContext.setCommonHeader(commonHeader);
585 responseContext.setStatus(status);
586 commonHeader.setFlags(flags);
587 return responseContext;
590 private String convertActionNameToUrl(String action) {
591 String regex = "([a-z])([A-Z]+)";
592 String replacement = "$1-$2";
593 return action.replaceAll(regex, replacement)