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.provider.lcm.service;
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.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.Action;
33 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.ActionStatusInput;
34 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.ActionStatusOutputBuilder;
35 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.Payload;
36 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.ZULU;
37 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.action.identifiers.ActionIdentifiers;
38 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.CommonHeader;
39 import org.onap.appc.domainmodel.lcm.ActionLevel;
40 import org.onap.appc.domainmodel.lcm.RequestContext;
41 import org.onap.appc.domainmodel.lcm.ResponseContext;
42 import org.onap.appc.domainmodel.lcm.Status;
43 import org.onap.appc.executor.objects.LCMCommandStatus;
44 import org.onap.appc.provider.lcm.util.RequestInputBuilder;
45 import org.onap.appc.requesthandler.objects.RequestHandlerInput;
46 import org.onap.appc.requesthandler.objects.RequestHandlerOutput;
47 import org.powermock.core.classloader.annotations.PrepareForTest;
48 import org.powermock.modules.junit4.PowerMockRunner;
49 import org.powermock.reflect.Whitebox;
51 import java.text.ParseException;
53 import static org.mockito.Matchers.any;
54 import static org.mockito.Mockito.mock;
55 import static org.mockito.Mockito.spy;
56 import static org.mockito.Mockito.times;
57 import static org.powermock.api.mockito.PowerMockito.whenNew;
60 @RunWith(PowerMockRunner.class)
61 @PrepareForTest({ActionStatusService.class, RequestExecutor.class, RequestInputBuilder.class,})
62 public class ActionStatusServiceTest {
63 private RequestHandlerInput mockRequestHandlerInput = mock(RequestHandlerInput.class);
64 private RequestContext mockRequestContext = mock(RequestContext.class);
65 private RequestHandlerOutput mockOutput = mock(RequestHandlerOutput.class);
66 private ResponseContext mockResponseContext = mock(ResponseContext.class);
68 private ActionStatusService actionStatusService;
71 public void setUp() throws Exception {
72 Mockito.doReturn(mockRequestContext).when(mockRequestHandlerInput).getRequestContext();
73 actionStatusService = spy(new ActionStatusService());
77 public void testConstructor() throws Exception {
78 Assert.assertEquals("Should have proper ACTION", Action.ActionStatus,
79 (Action) Whitebox.getInternalState(actionStatusService, "expectedAction"));
80 Assert.assertEquals("Should have action-status RPC name", "action-status",
81 (Whitebox.getInternalState(actionStatusService, "rpcName")).toString());
85 public void testQueryStatus() throws Exception {
86 // =========== test input validation ============
87 CommonHeader mockCommonHeader = mock(CommonHeader.class);
88 ActionStatusInput mockInput = mock(ActionStatusInput.class);
90 Mockito.doReturn(mockCommonHeader).when(mockInput).getCommonHeader();
91 // test commonHeader error
92 ActionStatusOutputBuilder output = actionStatusService.queryStatus(mockInput);
93 Assert.assertEquals("Should have commonHeader", mockCommonHeader, output.getCommonHeader());
94 Assert.assertEquals("should return missing parameter",
95 Integer.valueOf(LCMCommandStatus.MISSING_MANDATORY_PARAMETER.getResponseCode()),
96 output.getStatus().getCode());
98 ZULU zuluTimeStamp = new ZULU("2017-06-29T21:44:00.35Z");
99 Mockito.doReturn(zuluTimeStamp).when(mockCommonHeader).getTimestamp();
100 Mockito.doReturn("api ver").when(mockCommonHeader).getApiVer();
101 Mockito.doReturn("originator Id").when(mockCommonHeader).getOriginatorId();
102 Mockito.doReturn("request Id").when(mockCommonHeader).getRequestId();
104 // test invalid action
105 Mockito.doReturn(Action.Query).when(mockInput).getAction();
106 output = actionStatusService.queryStatus(mockInput);
107 Assert.assertEquals("Should have commonHeader", mockCommonHeader, output.getCommonHeader());
108 Assert.assertEquals("Should return invalid parameter for action",
109 Integer.valueOf(LCMCommandStatus.INVALID_INPUT_PARAMETER.getResponseCode()),
110 output.getStatus().getCode());
112 // test null actionIdentifier
113 Mockito.doReturn(Action.ActionStatus).when(mockInput).getAction();
114 output = actionStatusService.queryStatus(mockInput);
115 Assert.assertEquals("Should have commonHeader", mockCommonHeader, output.getCommonHeader());
116 Assert.assertEquals("should return missing parameter",
117 Integer.valueOf(LCMCommandStatus.MISSING_MANDATORY_PARAMETER.getResponseCode()),
118 output.getStatus().getCode());
120 // test missing VNF ID
121 ActionIdentifiers mockAI = mock(ActionIdentifiers.class);
122 Mockito.doReturn(mockAI).when(mockInput).getActionIdentifiers();
123 output = actionStatusService.queryStatus(mockInput);
124 Assert.assertEquals("Should have commonHeader", mockCommonHeader, output.getCommonHeader());
125 Assert.assertEquals("should return missing parameter",
126 Integer.valueOf(LCMCommandStatus.MISSING_MANDATORY_PARAMETER.getResponseCode()),
127 output.getStatus().getCode());
129 // test invalid VNF ID
130 Mockito.doReturn("").when(mockAI).getVnfId();
131 output = actionStatusService.queryStatus(mockInput);
132 Assert.assertEquals("Should have commonHeader", mockCommonHeader, output.getCommonHeader());
133 Assert.assertEquals("Should return invalid parameter for action",
134 Integer.valueOf(LCMCommandStatus.INVALID_INPUT_PARAMETER.getResponseCode()),
135 output.getStatus().getCode());
138 Mockito.doReturn("test VNF ID").when(mockAI).getVnfId();
139 output = actionStatusService.queryStatus(mockInput);
140 Assert.assertEquals("Should have commonHeader", mockCommonHeader, output.getCommonHeader());
141 Assert.assertEquals("should return missing parameter",
142 Integer.valueOf(LCMCommandStatus.MISSING_MANDATORY_PARAMETER.getResponseCode()),
143 output.getStatus().getCode());
145 // test payload with empty string
146 Payload mockPayload = mock(Payload.class);
147 Mockito.doReturn(mockPayload).when(mockInput).getPayload();
148 output = actionStatusService.queryStatus(mockInput);
149 Assert.assertEquals("Should have commonHeader", mockCommonHeader, output.getCommonHeader());
150 Assert.assertEquals("should return invalid parameter",
151 Integer.valueOf(LCMCommandStatus.INVALID_INPUT_PARAMETER.getResponseCode()),
152 output.getStatus().getCode());
154 // test validation passed
155 Mockito.doReturn("testing payload").when(mockPayload).getValue();
157 // =========== test success ============
158 RequestExecutor mockExecutor = mock(RequestExecutor.class);
159 whenNew(RequestExecutor.class).withNoArguments().thenReturn(mockExecutor);
160 Mockito.doReturn(mockOutput).when(mockExecutor).executeRequest(any());
161 Mockito.doReturn(mockPayload).when(mockExecutor).getPayload(mockOutput);
163 Mockito.doReturn(mockResponseContext).when(mockOutput).getResponseContext();
165 Integer statusCode = 400;
166 Status mockStatus = mock(Status.class);
167 Mockito.doReturn(statusCode).when(mockStatus).getCode();
168 Mockito.doReturn(mockStatus).when(mockResponseContext).getStatus();
170 output = actionStatusService.queryStatus(mockInput);
171 Mockito.verify(actionStatusService, times(1)).buildStatusWithDispatcherOutput(mockOutput);
172 Mockito.verify(mockExecutor, times(1)).getPayload(mockOutput);
173 Assert.assertTrue("Should have payload", output.getPayload() != null);
174 Assert.assertEquals("Should have commonHeader", mockCommonHeader, output.getCommonHeader());
175 Assert.assertEquals("Should return proper code", statusCode, output.getStatus().getCode());
177 // =========== test parserException ============
178 RequestInputBuilder mockInputBuilder = mock(RequestInputBuilder.class);
179 whenNew(RequestInputBuilder.class).withNoArguments().thenReturn(mockInputBuilder);
180 Mockito.doReturn(mockInputBuilder).when(mockInputBuilder).requestContext();
181 ParseException parserException = new ParseException("testing exception", 0);
182 Mockito.doThrow(parserException).when(mockInputBuilder).commonHeader(mockCommonHeader);
184 output = actionStatusService.queryStatus(mockInput);
185 Mockito.verify(actionStatusService, times(1)).buildStatusWithParseException(parserException);
186 Assert.assertEquals("Should have commonHeader", mockCommonHeader, output.getCommonHeader());
187 Assert.assertEquals("Should return request failed",
188 Integer.valueOf(LCMCommandStatus.REQUEST_PARSING_FAILED.getResponseCode()),
189 output.getStatus().getCode());
193 public void testUpdateToMgmtActionLevel() throws Exception {
194 actionStatusService.updateToMgmtActionLevel(mockRequestHandlerInput);
195 Mockito.verify(mockRequestContext, times(1)).setActionLevel(ActionLevel.MGMT);