aboutsummaryrefslogtreecommitdiffstats
path: root/appc-dispatcher/appc-request-handler/appc-request-handler-core/src
diff options
context:
space:
mode:
Diffstat (limited to 'appc-dispatcher/appc-request-handler/appc-request-handler-core/src')
-rwxr-xr-xappc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/AbstractRequestHandlerImplTest.java225
-rw-r--r--appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestHandlerImplTest.java120
-rw-r--r--appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestHanlderTestHelper.java51
-rw-r--r--appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestValidatorImplTest.java50
-rwxr-xr-xappc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/RequestHandlerImplTest.java272
-rw-r--r--appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/RequestValidatorImplTest.java354
6 files changed, 986 insertions, 86 deletions
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/AbstractRequestHandlerImplTest.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/AbstractRequestHandlerImplTest.java
new file mode 100755
index 000000000..226c670da
--- /dev/null
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/AbstractRequestHandlerImplTest.java
@@ -0,0 +1,225 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
+ * file except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.appc.requesthandler.impl;
+
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.powermock.api.mockito.PowerMockito.mockStatic;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFLogger.Level;
+import com.att.eelf.configuration.EELFManager;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.onap.appc.domainmodel.lcm.ActionIdentifiers;
+import org.onap.appc.domainmodel.lcm.CommonHeader;
+import org.onap.appc.domainmodel.lcm.RequestContext;
+import org.onap.appc.domainmodel.lcm.RequestStatus;
+import org.onap.appc.domainmodel.lcm.ResponseContext;
+import org.onap.appc.domainmodel.lcm.RuntimeContext;
+import org.onap.appc.domainmodel.lcm.Status;
+import org.onap.appc.domainmodel.lcm.TransactionRecord;
+import org.onap.appc.domainmodel.lcm.VNFOperation;
+import org.onap.appc.exceptions.APPCException;
+import org.onap.appc.exceptions.InvalidInputException;
+import org.onap.appc.executor.objects.LCMCommandStatus;
+import org.onap.appc.lockmanager.api.LockException;
+import org.onap.appc.messageadapter.MessageAdapter;
+import org.onap.appc.metricservice.MetricRegistry;
+import org.onap.appc.metricservice.impl.MetricRegistryImpl;
+import org.onap.appc.metricservice.metric.MetricType;
+import org.onap.appc.metricservice.metric.impl.DispatchingFuntionMetricImpl;
+import org.onap.appc.requesthandler.exceptions.RequestValidationException;
+import org.onap.appc.requesthandler.helper.RequestValidator;
+import org.onap.appc.requesthandler.objects.RequestHandlerInput;
+import org.onap.appc.requesthandler.objects.RequestHandlerOutput;
+import org.onap.appc.transactionrecorder.TransactionRecorder;
+import org.osgi.framework.FrameworkUtil;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.reflect.Whitebox;
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({FrameworkUtil.class})
+public class AbstractRequestHandlerImplTest implements LocalRequestHanlderTestHelper {
+
+ private AbstractRequestHandlerImpl requestHandler;
+ private TransactionRecorder recorder;
+
+ @Before
+ public void setUp() throws Exception {
+ setupForHandlerImplTests();
+ requestHandler = spy(new LocalRequestHandlerImpl());
+ recorder = mock(TransactionRecorder.class);
+ requestHandler.setTransactionRecorder(recorder);
+ List<RequestStatus> result = Arrays.asList(RequestStatus.ACCEPTED);
+ PowerMockito.when(recorder.getRecords(anyString(), anyString(), anyString(), anyString())).thenReturn(result);
+ final EELFLogger logger = EELFManager.getInstance().getLogger(AbstractRequestHandlerImpl.class);
+ logger.setLevel(Level.TRACE);
+ Whitebox.setInternalState(requestHandler, "logger", logger);
+ }
+
+ @Test
+ public void testHandleRequestAbstractRequestHandler() {
+ RequestHandlerInput rhi = setupTestForHandleRequest();
+ RequestValidator rv = mock(RequestValidator.class);
+ doNothing().when(requestHandler).handleRequest(Mockito.any(RuntimeContext.class));
+ requestHandler.setRequestValidator(rv);
+ Assert.assertTrue(requestHandler.handleRequest(rhi) instanceof RequestHandlerOutput);
+ }
+
+ @Test
+ public void testHandleRequestAbstractRequestHandlerRequestValidationException() throws Exception {
+ RequestHandlerInput rhi = setupTestForHandleRequest();
+ RequestValidator rv = mock(RequestValidator.class);
+ RequestValidationException rve = new RequestValidationException("TEST");
+ rve.setTargetEntity("TEST_TARGET_ENTITY");
+ rve.setTargetService("TEST_TARGET_SERVICE");
+ rve.setLogMessage("TEST_LOG_MESSAGE");
+ rve.setLcmCommandStatus(LCMCommandStatus.SUCCESS);
+ rve.setParams(null);
+ RequestHandlerOutput output = null;
+ doThrow(rve).when(rv).validateRequest(Mockito.any(RuntimeContext.class));
+ doNothing().when(requestHandler).handleRequest(Mockito.any(RuntimeContext.class));
+ requestHandler.setRequestValidator(rv);
+ output = requestHandler.handleRequest(rhi);
+ Assert.assertEquals(LCMCommandStatus.SUCCESS.getResponseCode(),
+ output.getResponseContext().getStatus().getCode());
+ }
+
+ @Test
+ public void testHandleRequestAbstractRequestHandlerInvalidInputException() throws Exception {
+ RequestHandlerInput rhi = setupTestForHandleRequest();
+ RequestValidator rv = mock(RequestValidator.class);
+ InvalidInputException iie = new InvalidInputException("TEST");
+ RequestHandlerOutput output = null;
+ doThrow(iie).when(rv).validateRequest(Mockito.any(RuntimeContext.class));
+ doNothing().when(requestHandler).handleRequest(Mockito.any(RuntimeContext.class));
+ requestHandler.setRequestValidator(rv);
+ output = requestHandler.handleRequest(rhi);
+ Assert.assertEquals(LCMCommandStatus.INVALID_INPUT_PARAMETER.getResponseCode(),
+ output.getResponseContext().getStatus().getCode());
+ }
+
+ @Test
+ public void testHandleRequestAbstractRequestHandlerLockException() throws Exception {
+ RequestHandlerInput rhi = setupTestNoMetric();
+ RequestValidator rv = mock(RequestValidator.class);
+ LockException le = new LockException("TEST");
+ RequestHandlerOutput output = null;
+ doThrow(le).when(rv).validateRequest(Mockito.any(RuntimeContext.class));
+ doNothing().when(requestHandler).handleRequest(Mockito.any(RuntimeContext.class));
+ requestHandler.setRequestValidator(rv);
+ output = requestHandler.handleRequest(rhi);
+ Assert.assertEquals(LCMCommandStatus.LOCKED_VNF_ID.getResponseCode(),
+ output.getResponseContext().getStatus().getCode());
+ }
+
+ @Test
+ public void testHandleRequestAbstractRequestHandlerException() throws Exception {
+ RequestHandlerInput rhi = setupTestNoMetric();
+ RequestValidator rv = mock(RequestValidator.class);
+ Exception exception = new Exception("TEST");
+ RequestHandlerOutput output = null;
+ doThrow(exception).when(rv).validateRequest(Mockito.any(RuntimeContext.class));
+ doNothing().when(requestHandler).handleRequest(Mockito.any(RuntimeContext.class));
+ requestHandler.setRequestValidator(rv);
+ output = requestHandler.handleRequest(rhi);
+ Assert.assertEquals(LCMCommandStatus.UNEXPECTED_ERROR.getResponseCode(),
+ output.getResponseContext().getStatus().getCode());
+ }
+
+ @Test
+ public void testOnRequestExecutionEnd() {
+ RuntimeContext runtimeContext = spy(new RuntimeContext());
+ TransactionRecord record = new TransactionRecord();
+ record.setRequestState(RequestStatus.ACCEPTED);
+ runtimeContext.setTransactionRecord(record);
+ MessageAdapter messageAdapter = mock(MessageAdapter.class);
+ requestHandler.setMessageAdapter(messageAdapter);
+ RequestContext rc = mock(RequestContext.class);
+ Status status = new Status();
+ status.setCode(100);
+ ResponseContext responseContext = spy(new ResponseContext());
+ Mockito.doReturn(status).when(responseContext).getStatus();
+ Mockito.doReturn(VNFOperation.ActionStatus).when(rc).getAction();
+ Mockito.doReturn(rc).when(runtimeContext).getRequestContext();
+ Mockito.doReturn(responseContext).when(runtimeContext).getResponseContext();
+ requestHandler.onRequestExecutionEnd(runtimeContext);
+ Mockito.verify(runtimeContext, times(3)).getTransactionRecord();
+ }
+
+ @Test
+ public void testGetInprogressRequestCount() throws APPCException {
+ int i = 0;
+ Mockito.doReturn(19).when(recorder).getInProgressRequestsCount();
+ i = requestHandler.getInprogressRequestCount();
+ Assert.assertEquals(19, i);
+ }
+
+ private RequestHandlerInput setupTestForHandleRequest() {
+ Whitebox.setInternalState(requestHandler, "isMetricEnabled", true);
+ MetricRegistry metricRegistry = spy(new MetricRegistryImpl("TEST_METRIC_REGISTRY"));
+ DispatchingFuntionMetricImpl metric =
+ spy(new DispatchingFuntionMetricImpl("DISPATCH_FUNCTION", MetricType.COUNTER, 0, 0));
+ metricRegistry.register(metric);
+ doNothing().when(metric).incrementAcceptedRequest();
+ Whitebox.setInternalState(RequestHandlerImpl.class, "metricRegistry", metricRegistry);
+ RequestHandlerInput rhi = new RequestHandlerInput();
+ RequestContext rc = new RequestContext();
+ CommonHeader ch = new CommonHeader();
+ rc.setCommonHeader(ch);
+ ch.setRequestId("TEST");
+ ch.setTimestamp(new Date(System.currentTimeMillis()));
+ VNFOperation vo = VNFOperation.findByString("ActionStatus");
+ rc.setAction(vo);
+ ActionIdentifiers ai = new ActionIdentifiers();
+ rc.setActionIdentifiers(ai);
+ rhi.setRequestContext(rc);
+ return rhi;
+ }
+
+ private RequestHandlerInput setupTestNoMetric() {
+ RequestHandlerInput rhi = new RequestHandlerInput();
+ RequestContext rc = new RequestContext();
+ CommonHeader ch = new CommonHeader();
+ rc.setCommonHeader(ch);
+ ch.setRequestId("TEST");
+ ch.setTimestamp(new Date(System.currentTimeMillis()));
+ VNFOperation vo = VNFOperation.findByString("ActionStatus");
+ rc.setAction(vo);
+ ActionIdentifiers ai = new ActionIdentifiers();
+ rc.setActionIdentifiers(ai);
+ rhi.setRequestContext(rc);
+ return rhi;
+ }
+}
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestHandlerImplTest.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestHandlerImplTest.java
index f19eee14d..f44aa3907 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestHandlerImplTest.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestHandlerImplTest.java
@@ -5,60 +5,54 @@
* Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Copyright (C) 2017 Amdocs
- * =============================================================================
+ * ================================================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved
+ * ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
+ *
* ============LICENSE_END=========================================================
*/
package org.onap.appc.requesthandler.impl;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
-import org.onap.appc.adapter.message.MessageAdapterFactory;
-import org.onap.appc.adapter.message.Producer;
-import org.onap.appc.domainmodel.lcm.ActionLevel;
-import org.onap.appc.domainmodel.lcm.RequestContext;
import org.onap.appc.domainmodel.lcm.RequestStatus;
-import org.onap.appc.domainmodel.lcm.ResponseContext;
import org.onap.appc.domainmodel.lcm.RuntimeContext;
-import org.onap.appc.domainmodel.lcm.VNFOperation;
+import org.onap.appc.domainmodel.lcm.Status;
import org.onap.appc.exceptions.APPCException;
import org.onap.appc.requesthandler.exceptions.MultipleRecordsRetrievedException;
import org.onap.appc.transactionrecorder.TransactionRecorder;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.ServiceReference;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyCollection;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.powermock.api.mockito.PowerMockito.mockStatic;
/**
* Test class for LocalRequestHandlerImpl
@@ -70,41 +64,24 @@ public class LocalRequestHandlerImplTest implements LocalRequestHanlderTestHelpe
private final String vnfId = "vnfId";
private final String subRequestId = "subRequestId";
private final String originatorId = "originatorId";
- private final String ACCEPTED_IN_PROGRESS_Response = "{\"status-reason\":\"ACCEPTED\"," +
- "\"status\":\"IN_PROGRESS\"}";
- private final String SUCCESSFUL_SUCCESSFUL_Response = "{\"status-reason\":\"SUCCESSFUL\"," +
- "\"status\":\"SUCCESSFUL\"}";
- private final String RECEIVED_IN_PROGRESS_Response = "{\"status-reason\":\"RECEIVED\"," +
- "\"status\":\"IN_PROGRESS\"}";
- private final String UNKNOWN_FAILED_Response = "{\"status-reason\":\"UNKNOWN\"," +
- "\"status\":\"FAILED\"}";
+ private final String ACCEPTED_IN_PROGRESS_Response = "{\"status-reason\":\"ACCEPTED\","
+ + "\"status\":\"IN_PROGRESS\"}";
+ private final String SUCCESSFUL_SUCCESSFUL_Response = "{\"status-reason\":\"SUCCESSFUL\","
+ + "\"status\":\"SUCCESSFUL\"}";
+ private final String RECEIVED_IN_PROGRESS_Response = "{\"status-reason\":\"RECEIVED\","
+ + "\"status\":\"IN_PROGRESS\"}";
+ private final String UNKNOWN_FAILED_Response = "{\"status-reason\":\"UNKNOWN\","
+ + "\"status\":\"FAILED\"}";
private LocalRequestHandlerImpl requestHandler;
private TransactionRecorder recorder;
@Before
public void setUp() throws Exception {
- mockStatic(FrameworkUtil.class);
- Bundle myBundle = mock(Bundle.class);
- PowerMockito.when(FrameworkUtil.getBundle(any())).thenReturn(myBundle);
-
- BundleContext myBundleContext = mock(BundleContext.class);
- Mockito.when(myBundle.getBundleContext()).thenReturn(myBundleContext);
-
- ServiceReference svcRef = mock(ServiceReference.class);
- Mockito.when(myBundleContext.getServiceReference(MessageAdapterFactory.class.getName())).thenReturn(svcRef);
-
- Producer producer = mock(Producer.class);
- MessageAdapterFactory factory = mock(MessageAdapterFactory.class);
- Mockito.when(myBundleContext.getService(svcRef)).thenReturn(factory);
- Mockito.when(factory.createProducer(anyCollection(), anyString(), anyString(), anyString())).thenReturn
- (producer);
-
+ setupForHandlerImplTests();
requestHandler = spy(new LocalRequestHandlerImpl());
-
recorder = mock(TransactionRecorder.class);
requestHandler.setTransactionRecorder(recorder);
-
List<RequestStatus> result = Arrays.asList(RequestStatus.ACCEPTED);
PowerMockito.when(recorder.getRecords(anyString(), anyString(), anyString(), anyString())).thenReturn(result);
}
@@ -116,9 +93,9 @@ public class LocalRequestHandlerImplTest implements LocalRequestHanlderTestHelpe
*/
@Test
public void testHandleRequestSuccessfulWithSearchCriteriaOne() throws APPCException {
- final String payload = "{\"request-id\":\"requestId\"," +
- "\"sub-request-id\":\"subRequestId\"," +
- "\"originator-id\":\"originatorId\"}";
+ final String payload = "{\"request-id\":\"requestId\","
+ + "\"sub-request-id\":\"subRequestId\","
+ + "\"originator-id\":\"originatorId\"}";
List<RequestStatus> result = Arrays.asList(RequestStatus.SUCCESSFUL);
PowerMockito.when(recorder.getRecords(requestId, subRequestId, originatorId, vnfId)).thenReturn(result);
@@ -135,9 +112,9 @@ public class LocalRequestHandlerImplTest implements LocalRequestHanlderTestHelpe
*/
@Test
public void testHandleRequestReceivedWithSearchCriteriaOne() throws APPCException {
- final String payload = "{\"request-id\":\"requestId\"," +
- "\"sub-request-id\":\"subRequestId\"," +
- "\"originator-id\":\"originatorId\"}";
+ final String payload = "{\"request-id\":\"requestId\","
+ + "\"sub-request-id\":\"subRequestId\","
+ + "\"originator-id\":\"originatorId\"}";
List<RequestStatus> result = Arrays.asList(RequestStatus.RECEIVED);
PowerMockito.when(recorder.getRecords(requestId, subRequestId, originatorId, vnfId)).thenReturn(result);
@@ -154,8 +131,8 @@ public class LocalRequestHandlerImplTest implements LocalRequestHanlderTestHelpe
*/
@Test
public void testHandleRequestFailedWithSearchCriteriaTwo() throws APPCException {
- final String payload = "{\"request-id\":\"requestId\"," +
- "\"sub-request-id\":\"subRequestId\"}";
+ final String payload = "{\"request-id\":\"requestId\","
+ + "\"sub-request-id\":\"subRequestId\"}";
List<RequestStatus> result = Arrays.asList(RequestStatus.UNKNOWN);
PowerMockito.when(recorder.getRecords(requestId, subRequestId, null, vnfId)).thenReturn(result);
@@ -166,7 +143,6 @@ public class LocalRequestHandlerImplTest implements LocalRequestHanlderTestHelpe
}
@Test
-
public void testSuccessHandleRequest() throws Exception {
RuntimeContext runtimeContext = createRequestHandlerRuntimeContext("vnfId",
"{\"request-id\":\"request-id\"}");
@@ -215,8 +191,28 @@ public class LocalRequestHandlerImplTest implements LocalRequestHanlderTestHelpe
RequestStatus status = Whitebox.invokeMethod(requestHandler,
"getStatusOfRequest", requestId, null, null, vnfId);
- Assert.assertTrue(status.name().equals("NOT_FOUND"));
+ Assert.assertEquals("NOT_FOUND",status.name());
}
-
-}
+ @Test
+ public void testHandleRequestMultipleRecordException() throws Exception {
+ final EELFLogger logger = spy(EELFManager.getInstance().getLogger(LocalRequestHandlerImpl.class));
+ Whitebox.setInternalState(requestHandler, "logger", logger);
+ RuntimeContext runtimeContext = createRequestHandlerRuntimeContext("vnfId",
+ "{\"request-id\":\"request-id\"}");
+ RequestStatus rs1 = RequestStatus.ABORTED;
+ RequestStatus rs2 = RequestStatus.ACCEPTED;
+ List<RequestStatus> rqList = new ArrayList<RequestStatus>(2);
+ rqList.add(rs1);
+ rqList.add(rs2);
+ Mockito.when(recorder.getRecords(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(),
+ Mockito.anyString())).thenReturn(rqList);
+ requestHandler.handleRequest(runtimeContext);
+ Status status = new Status();
+ status.setCode(315);
+ status.setMessage("MULTIPLE REQUESTS FOUND - using search criteria: request-id=request-id AND vnf-id=vnfId");
+ Mockito.verify(logger).debug("RequestStatus is set to MULTIPLE_REQUESTS_FOUND due to "
+ + "MultipleRecordsRetrievedException", "MULTIPLE REQUESTS FOUND USING SEARCH CRITERIA: request-id="
+ + "request-id AND vnf-id=vnfId");
+ }
+} \ No newline at end of file
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestHanlderTestHelper.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestHanlderTestHelper.java
index 69f3b7b3e..a6bbe571a 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestHanlderTestHelper.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestHanlderTestHelper.java
@@ -17,21 +17,40 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
+ *
* ============LICENSE_END=========================================================
*/
package org.onap.appc.requesthandler.impl;
+import org.mockito.Mockito;
+import org.onap.appc.adapter.message.MessageAdapterFactory;
+import org.onap.appc.adapter.message.Producer;
import org.onap.appc.domainmodel.lcm.ActionIdentifiers;
import org.onap.appc.domainmodel.lcm.ActionLevel;
import org.onap.appc.domainmodel.lcm.CommonHeader;
+import org.onap.appc.domainmodel.lcm.Flags;
import org.onap.appc.domainmodel.lcm.RequestContext;
+import org.onap.appc.domainmodel.lcm.RequestStatus;
import org.onap.appc.domainmodel.lcm.ResponseContext;
import org.onap.appc.domainmodel.lcm.RuntimeContext;
import org.onap.appc.domainmodel.lcm.VNFOperation;
-
+import org.onap.appc.lockmanager.api.LockManager;
+import org.onap.appc.requesthandler.RequestHandler;
+import org.onap.appc.transactionrecorder.TransactionRecorder;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceReference;
+import org.powermock.api.mockito.PowerMockito;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyCollectionOf;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.powermock.api.mockito.PowerMockito.mockStatic;
+import java.util.Arrays;
import java.util.Date;
+import java.util.List;
/**
* Creates RequestContextInput for ActionStatus JUnits
@@ -79,4 +98,32 @@ public interface LocalRequestHanlderTestHelper {
builder.setTimestamp(new Date(System.currentTimeMillis()));
return builder;
}
+
+ default CommonHeader getCommonHeader(String requestId, Date date) {
+ CommonHeader builder = new CommonHeader();
+ builder.setRequestId(requestId);
+ builder.setTimestamp(date);
+ Flags flags = new Flags();
+ flags.setTtl(0);
+ builder.setFlags(flags);
+ return builder;
+ }
+
+ default void setupForHandlerImplTests() {
+ mockStatic(FrameworkUtil.class);
+ Bundle myBundle = mock(Bundle.class);
+ PowerMockito.when(FrameworkUtil.getBundle(any())).thenReturn(myBundle);
+
+ BundleContext myBundleContext = mock(BundleContext.class);
+ Mockito.when(myBundle.getBundleContext()).thenReturn(myBundleContext);
+
+ ServiceReference svcRef = mock(ServiceReference.class);
+ Mockito.when(myBundleContext.getServiceReference(MessageAdapterFactory.class.getName())).thenReturn(svcRef);
+
+ Producer producer = mock(Producer.class);
+ MessageAdapterFactory factory = mock(MessageAdapterFactory.class);
+ Mockito.when(myBundleContext.getService(svcRef)).thenReturn(factory);
+ Mockito.when(factory.createProducer(anyCollectionOf(String.class), anyString(), anyString(), anyString()))
+ .thenReturn(producer);
+ }
}
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestValidatorImplTest.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestValidatorImplTest.java
index 51dfa6a1b..27f0897cc 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestValidatorImplTest.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/LocalRequestValidatorImplTest.java
@@ -22,34 +22,40 @@
package org.onap.appc.requesthandler.impl;
-// import com.att.eelf.configuration.EELFLogger;
-// import com.att.eelf.configuration.EELFManager;
+
+import static org.junit.Assert.fail;
+import static org.powermock.api.mockito.PowerMockito.spy;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFLogger.Level;
+import com.att.eelf.configuration.EELFManager;
+
+import java.util.Date;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
-import org.mockito.Matchers;
-import org.mockito.runners.MockitoJUnitRunner;
import org.onap.appc.domainmodel.lcm.ActionIdentifiers;
-import org.onap.appc.domainmodel.lcm.ActionLevel;
import org.onap.appc.domainmodel.lcm.RuntimeContext;
import org.onap.appc.domainmodel.lcm.VNFOperation;
import org.onap.appc.exceptions.InvalidInputException;
import org.onap.appc.requesthandler.LCMStateManager;
import org.onap.appc.requesthandler.exceptions.DuplicateRequestException;
import org.onap.appc.requesthandler.exceptions.LCMOperationsDisabledException;
+import org.onap.appc.requesthandler.exceptions.RequestExpiredException;
import org.onap.appc.transactionrecorder.TransactionRecorder;
-
-import static org.powermock.api.mockito.PowerMockito.spy;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.reflect.Whitebox;
/**
* Test class for LocalRequestValidatorImpl
*/
-@RunWith(MockitoJUnitRunner.class)
-public class LocalRequestValidatorImplTest implements LocalRequestHanlderTestHelper {
- // protected final EELFLogger logger = EELFManager.getInstance().getLogger(LocalRequestValidatorImplTest.class);
+@RunWith(PowerMockRunner.class)
+public class LocalRequestValidatorImplTest implements LocalRequestHanlderTestHelper {
@Mock
private LCMStateManager lcmStateManager;
@@ -67,6 +73,9 @@ public class LocalRequestValidatorImplTest implements LocalRequestHanlderTestHel
Mockito.when(lcmStateManager.isLCMOperationEnabled()).thenReturn(true);
Mockito.when(transactionRecorder.isTransactionDuplicate(Matchers.anyObject())).thenReturn(false);
+ final EELFLogger logger = EELFManager.getInstance().getLogger(LocalRequestValidatorImpl.class);
+ logger.setLevel(Level.TRACE);
+ Whitebox.setInternalState(requestValidator, "logger", logger);
}
@Test(expected = LCMOperationsDisabledException.class)
@@ -99,7 +108,6 @@ public class LocalRequestValidatorImplTest implements LocalRequestHanlderTestHel
RuntimeContext context = createRequestValidatorInput();
ActionIdentifiers ai = context.getRequestContext().getActionIdentifiers();
ai.setVnfId(null);
- // logger.warn("Set vnfId in ActionIdentifiers extracted from createRequestValidatorInput's RequestContext to null");
requestValidator.validateRequest(context);
}
@@ -110,6 +118,26 @@ public class LocalRequestValidatorImplTest implements LocalRequestHanlderTestHel
requestValidator.validateRequest(context);
}
+ @Test(expected = InvalidInputException.class)
+ public void validateRequestInvalidInputInvalidTime() throws Exception {
+ RuntimeContext context = createRequestValidatorInput();
+ context.getResponseContext().getCommonHeader().setTimestamp(new Date(System.currentTimeMillis() + 999999));
+ final EELFLogger logger = EELFManager.getInstance().getLogger(AbstractRequestValidatorImpl.class);
+ logger.setLevel(Level.TRACE);
+ Whitebox.setInternalState(requestValidator, "logger", logger);
+ requestValidator.validateRequest(context);
+ }
+
+ @Test(expected = RequestExpiredException.class)
+ public void validateRequestRequestExpiredException() throws Exception {
+ RuntimeContext context = createRequestValidatorInput();
+ context.getResponseContext().getCommonHeader().setTimestamp(new Date(System.currentTimeMillis() - 999999));
+ final EELFLogger logger = EELFManager.getInstance().getLogger(AbstractRequestValidatorImpl.class);
+ logger.setLevel(Level.TRACE);
+ Whitebox.setInternalState(requestValidator, "logger", logger);
+ requestValidator.validateRequest(context);
+ }
+
private RuntimeContext createRequestValidatorInput() {
return createRequestHandlerRuntimeContext("VSCP", "{\"request-id\":\"request-id\"}");
}
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/RequestHandlerImplTest.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/RequestHandlerImplTest.java
new file mode 100755
index 000000000..f163c6eab
--- /dev/null
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/RequestHandlerImplTest.java
@@ -0,0 +1,272 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use
+ * this file except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.appc.requesthandler.impl;
+
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFLogger.Level;
+import com.att.eelf.configuration.EELFManager;
+import com.att.eelf.i18n.EELFResourceManager;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.onap.appc.domainmodel.lcm.ActionIdentifiers;
+import org.onap.appc.domainmodel.lcm.CommonHeader;
+import org.onap.appc.domainmodel.lcm.Flags;
+import org.onap.appc.domainmodel.lcm.RequestContext;
+import org.onap.appc.domainmodel.lcm.RequestStatus;
+import org.onap.appc.domainmodel.lcm.ResponseContext;
+import org.onap.appc.domainmodel.lcm.RuntimeContext;
+import org.onap.appc.domainmodel.lcm.VNFContext;
+import org.onap.appc.domainmodel.lcm.VNFOperation;
+import org.onap.appc.exceptions.APPCException;
+import org.onap.appc.executor.CommandExecutor;
+import org.onap.appc.executor.objects.CommandExecutorInput;
+import org.onap.appc.executor.objects.LCMCommandStatus;
+import org.onap.appc.executor.objects.Params;
+import org.onap.appc.i18n.Msg;
+import org.onap.appc.lockmanager.api.LockException;
+import org.onap.appc.lockmanager.api.LockManager;
+import org.onap.appc.logging.LoggingConstants;
+import org.onap.appc.metricservice.MetricRegistry;
+import org.onap.appc.metricservice.impl.MetricRegistryImpl;
+import org.onap.appc.metricservice.metric.MetricType;
+import org.onap.appc.metricservice.metric.impl.DispatchingFuntionMetricImpl;
+import org.onap.appc.transactionrecorder.TransactionRecorder;
+import org.osgi.framework.FrameworkUtil;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.reflect.Whitebox;
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({ FrameworkUtil.class })
+public class RequestHandlerImplTest implements LocalRequestHanlderTestHelper {
+
+ private RequestHandlerImpl requestHandler;
+ private TransactionRecorder recorder;
+ private LockManager lockManager;
+
+ @Before
+ public void setUp() throws Exception {
+ setupForHandlerImplTests();
+ requestHandler = PowerMockito.spy(new RequestHandlerImpl());
+ recorder = mock(TransactionRecorder.class);
+ requestHandler.setTransactionRecorder(recorder);
+ lockManager = mock(LockManager.class);
+ requestHandler.setLockManager(lockManager);
+ List<RequestStatus> result = Arrays.asList(RequestStatus.ACCEPTED);
+ PowerMockito.when(recorder.getRecords(anyString(), anyString(), anyString(), anyString())).thenReturn(result);
+ final EELFLogger logger = EELFManager.getInstance().getLogger(RequestHandlerImpl.class);
+ logger.setLevel(Level.TRACE);
+ Whitebox.setInternalState(requestHandler, "logger", logger);
+ }
+
+ @Test
+ public void testHandleRequestRuntimeContext() {
+ Whitebox.setInternalState(requestHandler, "isMetricEnabled", true);
+ MetricRegistry metricRegistry = spy(new MetricRegistryImpl("TEST_METRIC_REGISTRY"));
+ DispatchingFuntionMetricImpl metric = spy(
+ new DispatchingFuntionMetricImpl("DISPATCH_FUNCTION", MetricType.COUNTER, 0, 0));
+ metricRegistry.register(metric);
+ doNothing().when(metric).incrementAcceptedRequest();
+ Whitebox.setInternalState(RequestHandlerImpl.class, "metricRegistry", metricRegistry);
+ RuntimeContext runtimeContext = spy(new RuntimeContext());
+ RequestContext requestContext = setupRequestContext();
+ runtimeContext.setRequestContext(requestContext);
+ CommonHeader ch = getCommonHeader("TEST", new Date(System.currentTimeMillis()));
+ requestContext.setCommonHeader(ch);
+ CommandExecutor commandExecutor = mock(CommandExecutor.class);
+ requestHandler.setCommandExecutor(commandExecutor);
+ doNothing().when(requestHandler).fillStatus(Mockito.any(RuntimeContext.class),
+ Mockito.any(LCMCommandStatus.class), Mockito.any());
+ requestHandler.handleRequest(runtimeContext);
+ Mockito.verify(requestHandler).fillStatus(runtimeContext, LCMCommandStatus.ACCEPTED, null);
+ }
+
+ @Test
+ public void testHandleRequestRuntimeContextNegativeTTL() {
+ RuntimeContext runtimeContext = spy(new RuntimeContext());
+ RequestContext requestContext = setupRequestContext();
+ runtimeContext.setRequestContext(requestContext);
+ CommonHeader ch = getCommonHeader("TEST", new Date(System.currentTimeMillis() - 100000));
+ requestContext.setCommonHeader(ch);
+ CommandExecutor commandExecutor = mock(CommandExecutor.class);
+ requestHandler.setCommandExecutor(commandExecutor);
+ doNothing().when(requestHandler).fillStatus(Mockito.any(RuntimeContext.class),
+ Mockito.any(LCMCommandStatus.class), Mockito.any());
+ doNothing().when(requestHandler).storeErrorMessageToLog(Mockito.any(RuntimeContext.class), Mockito.anyString(),
+ Mockito.anyString(), Mockito.anyString());
+ requestHandler.handleRequest(runtimeContext);
+ Mockito.verify(requestHandler).fillStatus(runtimeContext, LCMCommandStatus.EXPIRED_REQUEST, null);
+
+ }
+
+ @Test
+ public void testHandleRequestRuntimeContextAPPCException() throws APPCException {
+ RuntimeContext runtimeContext = spy(new RuntimeContext());
+ RequestContext requestContext = setupRequestContext();
+ runtimeContext.setRequestContext(requestContext);
+ CommonHeader ch = getCommonHeader("TEST", new Date(System.currentTimeMillis()));
+ requestContext.setCommonHeader(ch);
+ CommandExecutor commandExecutor = mock(CommandExecutor.class);
+ requestHandler.setCommandExecutor(commandExecutor);
+ doNothing().when(requestHandler).fillStatus(Mockito.any(RuntimeContext.class),
+ Mockito.any(LCMCommandStatus.class), Mockito.any());
+ doThrow(new APPCException("TEST_APPC_EXCEPTION")).when(commandExecutor)
+ .executeCommand(Mockito.any(CommandExecutorInput.class));
+ doNothing().when(requestHandler).storeErrorMessageToLog(Mockito.any(RuntimeContext.class), Mockito.anyString(),
+ Mockito.anyString(), Mockito.anyString());
+ requestHandler.handleRequest(runtimeContext);
+ Mockito.verify(requestHandler).fillStatus(Mockito.any(RuntimeContext.class),
+ Mockito.any(LCMCommandStatus.class), Mockito.any(Params.class));
+ }
+
+ @Test
+ public void testHandleRequestRuntimeContextCaseLock() throws LockException {
+ RuntimeContext runtimeContext = spy(new RuntimeContext());
+ RequestContext requestContext = new RequestContext();
+ requestContext.setAction(VNFOperation.Lock);
+ runtimeContext.setRequestContext(requestContext);
+ VNFContext vnfContext = new VNFContext();
+ vnfContext.setId("TEST_VNF_CONTEXT_ID");
+ runtimeContext.setVnfContext(vnfContext);
+ CommonHeader ch = getCommonHeader("TEST", new Date(System.currentTimeMillis()));
+ requestContext.setCommonHeader(ch);
+ CommandExecutor commandExecutor = mock(CommandExecutor.class);
+ requestHandler.setCommandExecutor(commandExecutor);
+ doNothing().when(requestHandler).fillStatus(Mockito.any(RuntimeContext.class),
+ Mockito.any(LCMCommandStatus.class), Mockito.any());
+ doReturn(true).when(lockManager).acquireLock(Mockito.anyString(), Mockito.anyString(), Mockito.anyLong());
+ requestHandler.handleRequest(runtimeContext);
+ Mockito.verify(requestHandler).fillStatus(runtimeContext, LCMCommandStatus.SUCCESS, null);
+ }
+
+ @Test
+ public void testHandleRequestRuntimeContextLockError() throws LockException {
+ RuntimeContext runtimeContext = spy(new RuntimeContext());
+ RequestContext requestContext = new RequestContext();
+ requestContext.setAction(VNFOperation.Lock);
+ runtimeContext.setRequestContext(requestContext);
+ VNFContext vnfContext = new VNFContext();
+ vnfContext.setId("TEST_VNF_CONTEXT_ID");
+ runtimeContext.setVnfContext(vnfContext);
+ CommonHeader ch = getCommonHeader("TEST", new Date(System.currentTimeMillis()));
+ requestContext.setCommonHeader(ch);
+ CommandExecutor commandExecutor = mock(CommandExecutor.class);
+ requestHandler.setCommandExecutor(commandExecutor);
+ doNothing().when(requestHandler).fillStatus(Mockito.any(RuntimeContext.class),
+ Mockito.any(LCMCommandStatus.class), Mockito.any());
+ doThrow(new LockException("TEST_LOCK_EXCEPTION")).when(lockManager).acquireLock(Mockito.anyString(),
+ Mockito.anyString(), Mockito.anyLong());
+ doNothing().when(requestHandler).storeErrorMessageToLog(Mockito.any(RuntimeContext.class), Mockito.anyString(),
+ Mockito.anyString(), Mockito.anyString());
+ requestHandler.handleRequest(runtimeContext);
+ Mockito.verify(requestHandler).storeErrorMessageToLog(runtimeContext, LoggingConstants.TargetNames.APPC,
+ LoggingConstants.TargetNames.LOCK_MANAGER,
+ EELFResourceManager.format(Msg.VF_SERVER_BUSY, "TEST_VNF_CONTEXT_ID"));
+ }
+
+ @Test
+ public void testHandleRequestRuntimeContextCaseUnlock() throws LockException {
+ RuntimeContext runtimeContext = spy(new RuntimeContext());
+ RequestContext requestContext = new RequestContext();
+ requestContext.setAction(VNFOperation.Unlock);
+ runtimeContext.setRequestContext(requestContext);
+ VNFContext vnfContext = new VNFContext();
+ vnfContext.setId("TEST_VNF_CONTEXT_ID");
+ runtimeContext.setVnfContext(vnfContext);
+ CommonHeader ch = getCommonHeader("TEST", new Date(System.currentTimeMillis()));
+ requestContext.setCommonHeader(ch);
+ CommandExecutor commandExecutor = mock(CommandExecutor.class);
+ requestHandler.setCommandExecutor(commandExecutor);
+ doNothing().when(requestHandler).fillStatus(Mockito.any(RuntimeContext.class),
+ Mockito.any(LCMCommandStatus.class), Mockito.any());
+ doReturn(true).when(lockManager).acquireLock(Mockito.anyString(), Mockito.anyString(), Mockito.anyLong());
+ requestHandler.handleRequest(runtimeContext);
+ Mockito.verify(requestHandler).fillStatus(runtimeContext, LCMCommandStatus.SUCCESS, null);
+ }
+
+ @Test
+ public void testHandleRequestRuntimeContextUnlockError() throws LockException {
+ RuntimeContext runtimeContext = spy(new RuntimeContext());
+ RequestContext requestContext = new RequestContext();
+ requestContext.setAction(VNFOperation.Unlock);
+ runtimeContext.setRequestContext(requestContext);
+ VNFContext vnfContext = new VNFContext();
+ vnfContext.setId("TEST_VNF_CONTEXT_ID");
+ runtimeContext.setVnfContext(vnfContext);
+ CommonHeader ch = getCommonHeader("TEST", new Date(System.currentTimeMillis()));
+ requestContext.setCommonHeader(ch);
+ CommandExecutor commandExecutor = mock(CommandExecutor.class);
+ requestHandler.setCommandExecutor(commandExecutor);
+ doNothing().when(requestHandler).fillStatus(Mockito.any(RuntimeContext.class),
+ Mockito.any(LCMCommandStatus.class), Mockito.any());
+ doThrow(new LockException("TEST_LOCK_EXCEPTION")).when(lockManager).releaseLock(Mockito.anyString(),
+ Mockito.anyString());
+ doNothing().when(requestHandler).storeErrorMessageToLog(Mockito.any(RuntimeContext.class), Mockito.anyString(),
+ Mockito.anyString(), Mockito.anyString());
+ requestHandler.handleRequest(runtimeContext);
+ Mockito.verify(requestHandler).fillStatus(Mockito.any(RuntimeContext.class),
+ Mockito.any(LCMCommandStatus.class), Mockito.any(Params.class));
+ }
+
+ @Test
+ public void testHandleRequestRuntimeContextCaseCheckLock() {
+ RuntimeContext runtimeContext = spy(new RuntimeContext());
+ RequestContext requestContext = new RequestContext();
+ ResponseContext responseContext = spy(new ResponseContext());
+ runtimeContext.setResponseContext(responseContext);
+ requestContext.setAction(VNFOperation.CheckLock);
+ runtimeContext.setRequestContext(requestContext);
+ VNFContext vnfContext = new VNFContext();
+ vnfContext.setId("TEST_VNF_CONTEXT_ID");
+ runtimeContext.setVnfContext(vnfContext);
+ CommonHeader ch = getCommonHeader("TEST", new Date(System.currentTimeMillis()));
+ requestContext.setCommonHeader(ch);
+ CommandExecutor commandExecutor = mock(CommandExecutor.class);
+ requestHandler.setCommandExecutor(commandExecutor);
+ doNothing().when(requestHandler).fillStatus(Mockito.any(RuntimeContext.class),
+ Mockito.any(LCMCommandStatus.class), Mockito.any());
+ doReturn(true).when(lockManager).isLocked("TEST_VNF_CONTEXT_ID");
+ requestHandler.handleRequest(runtimeContext);
+ Mockito.verify(responseContext).addKeyValueToAdditionalContext("locked", String.valueOf(true).toUpperCase());
+ }
+
+ private RequestContext setupRequestContext() {
+ RequestContext requestContext = new RequestContext();
+ requestContext.setAction(VNFOperation.ActionStatus);
+ ActionIdentifiers actionIdentifiers = new ActionIdentifiers();
+ actionIdentifiers.setVnfId("TEST_VNF_ID");
+ requestContext.setActionIdentifiers(actionIdentifiers);
+ return requestContext;
+ }
+}
diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/RequestValidatorImplTest.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/RequestValidatorImplTest.java
index 8ecb08757..e1c10dae1 100644
--- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/RequestValidatorImplTest.java
+++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/test/java/org/onap/appc/requesthandler/impl/RequestValidatorImplTest.java
@@ -5,44 +5,144 @@
* Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Copyright (C) 2017 Amdocs
- * =============================================================================
+ * ================================================================================
+ * Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
+ *
* ============LICENSE_END=========================================================
*/
package org.onap.appc.requesthandler.impl;
+import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFLogger.Level;
+import com.att.eelf.configuration.EELFManager;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.ProtocolVersion;
+import org.apache.http.entity.BasicHttpEntity;
+import org.apache.http.message.BasicHttpResponse;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
+import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.internal.util.reflection.Whitebox;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
import org.onap.appc.configuration.Configuration;
+import org.onap.appc.configuration.ConfigurationFactory;
+import org.onap.appc.domainmodel.lcm.ActionIdentifiers;
+import org.onap.appc.domainmodel.lcm.CommonHeader;
+import org.onap.appc.domainmodel.lcm.Flags;
+import org.onap.appc.domainmodel.lcm.Flags.Mode;
+import org.onap.appc.domainmodel.lcm.RequestContext;
+import org.onap.appc.domainmodel.lcm.ResponseContext;
+import org.onap.appc.domainmodel.lcm.RuntimeContext;
+import org.onap.appc.domainmodel.lcm.TransactionRecord;
+import org.onap.appc.domainmodel.lcm.VNFOperation;
import org.onap.appc.exceptions.APPCException;
+import org.onap.appc.lockmanager.api.LockException;
+import org.onap.appc.lockmanager.api.LockManager;
+import org.onap.appc.requesthandler.LCMStateManager;
+import org.onap.appc.requesthandler.exceptions.DGWorkflowNotFoundException;
+import org.onap.appc.requesthandler.exceptions.LCMOperationsDisabledException;
+import org.onap.appc.requesthandler.exceptions.RequestValidationException;
+import org.onap.appc.requesthandler.exceptions.WorkflowNotFoundException;
+import org.onap.appc.rest.client.RestClientInvoker;
+import org.onap.appc.transactionrecorder.TransactionRecorder;
+import org.onap.appc.validationpolicy.RequestValidationPolicy;
+import org.onap.appc.validationpolicy.executors.RuleExecutor;
+import org.onap.appc.validationpolicy.objects.RuleResult;
+import org.onap.appc.workflow.WorkFlowManager;
+import org.onap.appc.workflow.impl.WorkFlowManagerImpl;
+import org.onap.appc.workflow.objects.WorkflowExistsOutput;
+import org.onap.appc.workflow.objects.WorkflowRequest;
+import org.onap.ccsdk.sli.adaptors.aai.AAIService;
+import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
+import org.onap.ccsdk.sli.core.sli.SvcLogicResource;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceReference;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
-import java.util.Properties;
-
-import static org.mockito.Mockito.mock;
-
-public class RequestValidatorImplTest {
- private Configuration mockConfig = mock(Configuration.class);
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({FrameworkUtil.class})
+public class RequestValidatorImplTest implements LocalRequestHanlderTestHelper {
+ private Configuration mockConfig = ConfigurationFactory.getConfiguration();
private RequestValidatorImpl impl;
+ private final BundleContext bundleContext = Mockito.mock(BundleContext.class);
+ private final Bundle bundleService = Mockito.mock(Bundle.class);
+ private final ServiceReference sref = Mockito.mock(ServiceReference.class);
+ private EELFLogger logger;
+ private TransactionRecorder transactionRecorder;
+ private LockManager lockManager;
+ private LCMStateManager lcmStateManager;
+
@Before
public void setUp() throws Exception {
- impl = new RequestValidatorImpl();
+ impl = PowerMockito.spy(new RequestValidatorImpl());
Whitebox.setInternalState(impl, "configuration", mockConfig);
+ logger = Mockito.spy(EELFManager.getInstance().getLogger(RequestHandlerImpl.class));
+ logger.setLevel(Level.TRACE);
+ Whitebox.setInternalState(impl, "logger", logger);
+ lcmStateManager = new LCMStateManagerImpl();
+ impl.setLcmStateManager(lcmStateManager);
+ AAIService aaiService = Mockito.mock(AAIService.class);
+ PowerMockito.when(aaiService.query(
+ anyString(), anyBoolean(), anyString(), anyString(), anyString(), anyString(), anyObject()))
+ .thenAnswer(new Answer<SvcLogicResource.QueryStatus>() {
+ @Override
+ public SvcLogicResource.QueryStatus answer(InvocationOnMock invocation) throws Exception {
+ Object[] args = invocation.getArguments();
+ SvcLogicContext ctx = (SvcLogicContext) args[6];
+ String prefix = (String) args[4];
+ String key = (String) args[3];
+ if (key.contains("'28'")) {
+ return SvcLogicResource.QueryStatus.FAILURE;
+ } else if (key.contains("'8'")) {
+ return SvcLogicResource.QueryStatus.NOT_FOUND;
+ } else {
+ ctx.setAttribute(prefix + ".vnf-type", "FIREWALL");
+ ctx.setAttribute(prefix + ".orchestration-status", "Instantiated");
+ }
+ return SvcLogicResource.QueryStatus.SUCCESS;
+ }
+ });
+ PowerMockito.mockStatic(FrameworkUtil.class);
+ PowerMockito.when(FrameworkUtil.getBundle(AAIService.class)).thenReturn(bundleService);
+ PowerMockito.when(bundleService.getBundleContext()).thenReturn(bundleContext);
+ PowerMockito.when(bundleContext.getServiceReference(AAIService.class.getName())).thenReturn(sref);
+ PowerMockito.when(bundleContext.getService(sref)).thenReturn(aaiService);
+ lockManager = mock(LockManager.class);
+ impl.setLockManager(lockManager);
}
// TODO: remove Ignore when initialize method actually throws APPCException
@@ -72,4 +172,236 @@ public class RequestValidatorImplTest {
Mockito.doReturn(mockProp).when(mockConfig).getProperties();
impl.initialize();
}
+
+ @Test(expected = LCMOperationsDisabledException.class)
+ public void testValidateRequestLCMException() throws Exception {
+ RuntimeContext runtimeContext = createRequestValidatorInput();
+ logger = Mockito.spy(EELFManager.getInstance().getLogger(LCMStateManager.class));
+ logger.setLevel(Level.TRACE);
+ Whitebox.setInternalState(lcmStateManager, "logger", logger);
+ lcmStateManager.disableLCMOperations();
+ impl.validateRequest(runtimeContext);
+ }
+
+
+ @Test(expected = RequestValidationException.class)
+ public void testValidateRequest() throws Exception {
+ RuntimeContext runtimeContext = createRequestValidatorInput();
+ logger = Mockito.spy(EELFManager.getInstance().getLogger(LCMStateManager.class));
+ logger.setLevel(Level.TRACE);
+ Whitebox.setInternalState(lcmStateManager, "logger", logger);
+ lcmStateManager.enableLCMOperations();
+ transactionRecorder = Mockito.mock(TransactionRecorder.class);
+ Mockito.when(transactionRecorder.isTransactionDuplicate(anyObject())).thenReturn(false);
+ TransactionRecord transactionRecord = new TransactionRecord();
+ transactionRecord.setMode(Mode.EXCLUSIVE);
+ runtimeContext.setTransactionRecord(transactionRecord);
+ impl.setTransactionRecorder(transactionRecorder);
+ WorkflowExistsOutput workflowExistsOutput = new WorkflowExistsOutput(true, true);
+ WorkFlowManager workflowManager = Mockito.mock(WorkFlowManagerImpl.class);
+ Mockito.when(workflowManager.workflowExists(Mockito.any(WorkflowRequest.class))).thenReturn(workflowExistsOutput);
+ impl.setWorkflowManager(workflowManager);
+ ResponseContext responseContext = runtimeContext.getResponseContext();
+ CommonHeader commonHeader = returnResponseContextCommonHeader(responseContext);
+ RestClientInvoker client = mock(RestClientInvoker.class);
+ HttpResponse httpResponse = new BasicHttpResponse(new ProtocolVersion("HTTP",1,0), 200, "ACCEPTED");
+ httpResponse.setEntity(getHttpEntity());
+ Mockito.when(client.doPost(Mockito.anyString(), Mockito.anyString())).thenReturn(httpResponse);
+ impl.setClient(client);
+ RequestValidationPolicy requestValidationPolicy = Mockito.mock(RequestValidationPolicy.class);
+ RuleExecutor ruleExecutor = Mockito.mock(RuleExecutor.class);
+ RuleResult ruleResult = RuleResult.REJECT;
+ Mockito.when(requestValidationPolicy.getInProgressRuleExecutor()).thenReturn(ruleExecutor);
+ Mockito.when(ruleExecutor.executeRule(Mockito.anyString(), Mockito.anyListOf(VNFOperation.class))).thenReturn(ruleResult);
+ impl.setRequestValidationPolicy(requestValidationPolicy);
+ impl.validateRequest(runtimeContext);
+ }
+
+ @Test
+ public void testInitializeMalformed() throws Exception {
+ Properties properties = new Properties();
+ properties.setProperty("appc.LCM.scopeOverlap.endpoint", "/not/a/URL");
+ mockConfig.setProperties(properties);
+ Whitebox.setInternalState(impl, "configuration", mockConfig);
+ impl.initialize();
+ Mockito.verify(logger).error(Mockito.anyString(), Mockito.any(MalformedURLException.class));
+ }
+
+ @Test
+ public void testInitialize() throws Exception {
+ Configuration mockConfigForInitTest = ConfigurationFactory.getConfiguration(new Properties());
+ Whitebox.setInternalState(impl, "configuration", mockConfigForInitTest);
+ impl.initialize();
+ Mockito.verify(logger).error("End point is not defined for scope over lap service in appc.properties.");
+ }
+
+ @Test(expected = RequestValidationException.class)
+ public void testValidateRequestExclusiveRequestCount() throws Exception {
+ RuntimeContext runtimeContext = createRequestValidatorInput();
+ lcmStateManager.enableLCMOperations();
+ transactionRecorder = Mockito.mock(TransactionRecorder.class);
+ Mockito.when(transactionRecorder.isTransactionDuplicate(anyObject())).thenReturn(false);
+ List<TransactionRecord> transactionRecordList = new ArrayList<TransactionRecord>(1);
+ TransactionRecord inProgressTransaction = new TransactionRecord();
+ inProgressTransaction.setMode(Mode.EXCLUSIVE);
+ transactionRecordList.add(inProgressTransaction);
+ Mockito.when(transactionRecorder.getInProgressRequests(Mockito.any(TransactionRecord.class)))
+ .thenReturn(transactionRecordList);
+ runtimeContext.setTransactionRecord(inProgressTransaction);
+ impl.setTransactionRecorder(transactionRecorder);
+ WorkflowExistsOutput workflowExistsOutput = new WorkflowExistsOutput(true, true);
+ WorkFlowManager workflowManager = Mockito.mock(WorkFlowManagerImpl.class);
+ Mockito.when(workflowManager.workflowExists(Mockito.any(WorkflowRequest.class)))
+ .thenReturn(workflowExistsOutput);
+ impl.setWorkflowManager(workflowManager);
+ ResponseContext responseContext = runtimeContext.getResponseContext();
+ CommonHeader commonHeader = returnResponseContextCommonHeader(responseContext);
+ impl.validateRequest(runtimeContext);
+ }
+
+ @Test(expected = LockException.class)
+ public void testValidateLockException() throws Exception {
+ RuntimeContext runtimeContext = createRequestValidatorInput();
+ lcmStateManager.enableLCMOperations();
+ Mockito.when(lockManager.getLockOwner(Mockito.anyString())).thenReturn("TEST_LOCK_OWNER");
+ transactionRecorder = Mockito.mock(TransactionRecorder.class);
+ Mockito.when(transactionRecorder.isTransactionDuplicate(anyObject())).thenReturn(false);
+ impl.setTransactionRecorder(transactionRecorder);
+ TransactionRecord inProgressTransaction = new TransactionRecord();
+ runtimeContext.setTransactionRecord(inProgressTransaction);
+ impl.validateRequest(runtimeContext);
+ }
+
+ @Test
+ public void testValidateRequestInProgressTransactionLoop() throws Exception {
+ RuntimeContext runtimeContext = createRequestValidatorInput();
+ lcmStateManager.enableLCMOperations();
+ transactionRecorder = Mockito.mock(TransactionRecorder.class);
+ Mockito.when(transactionRecorder.isTransactionDuplicate(anyObject())).thenReturn(false);
+ List<TransactionRecord> transactionRecordList = new ArrayList<TransactionRecord>(1);
+ TransactionRecord inProgressTransaction = new TransactionRecord();
+ inProgressTransaction.setMode(Mode.NORMAL);
+ inProgressTransaction.setOperation(VNFOperation.ActionStatus);
+ transactionRecordList.add(inProgressTransaction);
+ runtimeContext.setTransactionRecord(inProgressTransaction);
+ Mockito.when(transactionRecorder.getInProgressRequests(Mockito.any(TransactionRecord.class)))
+ .thenReturn(transactionRecordList);
+ impl.setTransactionRecorder(transactionRecorder);
+ WorkflowExistsOutput workflowExistsOutput = new WorkflowExistsOutput(true, true);
+ WorkFlowManager workflowManager = Mockito.mock(WorkFlowManagerImpl.class);
+ Mockito.when(workflowManager.workflowExists(Mockito.any(WorkflowRequest.class)))
+ .thenReturn(workflowExistsOutput);
+ impl.setWorkflowManager(workflowManager);
+ ResponseContext responseContext = runtimeContext.getResponseContext();
+ CommonHeader commonHeader = returnResponseContextCommonHeader(responseContext);
+ RestClientInvoker client = mock(RestClientInvoker.class);
+ HttpResponse httpResponse = new BasicHttpResponse(new ProtocolVersion("HTTP",1,0), 200, "ACCEPTED");
+ httpResponse.setEntity(getHttpEntity());
+ Mockito.when(client.doPost(Mockito.anyString(), Mockito.anyString())).thenReturn(httpResponse);
+ impl.setClient(client);
+ RequestValidationPolicy requestValidationPolicy = Mockito.mock(RequestValidationPolicy.class);
+ RuleExecutor ruleExecutor = Mockito.mock(RuleExecutor.class);
+ RuleResult ruleResult = RuleResult.ACCEPT;
+ Mockito.when(requestValidationPolicy.getInProgressRuleExecutor()).thenReturn(ruleExecutor);
+ Mockito.when(ruleExecutor.executeRule(Mockito.anyString(), Mockito.anyListOf(VNFOperation.class)))
+ .thenReturn(ruleResult);
+ impl.setRequestValidationPolicy(requestValidationPolicy);
+ RequestContext requestContext = new RequestContext();
+ ActionIdentifiers actionIdentifiers = new ActionIdentifiers();
+ actionIdentifiers.setServiceInstanceId("TEST_SERVICE_INSTANCE_ID");
+ actionIdentifiers.setVfModuleId("TEST_VNF_MODULE_ID");
+ actionIdentifiers.setVnfcName("TEST_VNFC_NAME");
+ actionIdentifiers.setVnfId("TEST_VNF_ID");
+ actionIdentifiers.setvServerId("TEST_SERVER_ID");
+ requestContext.setActionIdentifiers(actionIdentifiers);
+ impl.validateRequest(runtimeContext);
+ Mockito.verify(logger).debug("Policy validation result ACCEPT");
+ }
+
+ @Test(expected = WorkflowNotFoundException.class)
+ public void testValidateRequestWorkflowNotFoundException() throws Exception {
+ RuntimeContext runtimeContext = createRequestValidatorInput();
+ lcmStateManager.enableLCMOperations();
+ transactionRecorder = Mockito.mock(TransactionRecorder.class);
+ Mockito.when(transactionRecorder.isTransactionDuplicate(anyObject())).thenReturn(false);
+ TransactionRecord transactionRecord = new TransactionRecord();
+ transactionRecord.setMode(Mode.EXCLUSIVE);
+ runtimeContext.setTransactionRecord(transactionRecord);
+ impl.setTransactionRecorder(transactionRecorder);
+ WorkflowExistsOutput workflowExistsOutput = Mockito.spy(new WorkflowExistsOutput(true, true));
+ WorkFlowManager workflowManager = Mockito.mock(WorkFlowManagerImpl.class);
+ Mockito.when(workflowManager.workflowExists(Mockito.any(WorkflowRequest.class)))
+ .thenReturn(workflowExistsOutput);
+ Mockito.when(workflowExistsOutput.isMappingExist()).thenReturn(false);
+ impl.setWorkflowManager(workflowManager);
+ ResponseContext responseContext = runtimeContext.getResponseContext();
+ CommonHeader commonHeader = returnResponseContextCommonHeader(responseContext);
+ RestClientInvoker client = mock(RestClientInvoker.class);
+ HttpResponse httpResponse = new BasicHttpResponse(new ProtocolVersion("HTTP",1,0), 200, "ACCEPTED");;
+ httpResponse.setEntity(getHttpEntity());
+ Mockito.when(client.doPost(Mockito.anyString(), Mockito.anyString())).thenReturn(httpResponse);
+ impl.setClient(client);
+ RequestValidationPolicy requestValidationPolicy = Mockito.mock(RequestValidationPolicy.class);
+ RuleExecutor ruleExecutor = Mockito.mock(RuleExecutor.class);
+ RuleResult ruleResult = RuleResult.REJECT;
+ Mockito.when(requestValidationPolicy.getInProgressRuleExecutor()).thenReturn(ruleExecutor);
+ Mockito.when(ruleExecutor.executeRule(Mockito.anyString(), Mockito.anyListOf(VNFOperation.class)))
+ .thenReturn(ruleResult);
+ impl.setRequestValidationPolicy(requestValidationPolicy);
+ impl.validateRequest(runtimeContext);
+ }
+
+ @Test(expected = DGWorkflowNotFoundException.class)
+ public void testValidateRequestDGWorkflowNotFoundException() throws Exception {
+ RuntimeContext runtimeContext = createRequestValidatorInput();
+ lcmStateManager.enableLCMOperations();
+ transactionRecorder = Mockito.mock(TransactionRecorder.class);
+ Mockito.when(transactionRecorder.isTransactionDuplicate(anyObject())).thenReturn(false);
+ TransactionRecord transactionRecord = new TransactionRecord();
+ transactionRecord.setMode(Mode.EXCLUSIVE);
+ runtimeContext.setTransactionRecord(transactionRecord);
+ impl.setTransactionRecorder(transactionRecorder);
+ WorkflowExistsOutput workflowExistsOutput = Mockito.spy(new WorkflowExistsOutput(true, true));
+ WorkFlowManager workflowManager = Mockito.mock(WorkFlowManagerImpl.class);
+ Mockito.when(workflowManager.workflowExists(Mockito.any(WorkflowRequest.class)))
+ .thenReturn(workflowExistsOutput);
+ Mockito.when(workflowExistsOutput.isDgExist()).thenReturn(false);
+ impl.setWorkflowManager(workflowManager);
+ ResponseContext responseContext = runtimeContext.getResponseContext();
+ CommonHeader commonHeader = returnResponseContextCommonHeader(responseContext);
+ RestClientInvoker client = mock(RestClientInvoker.class);
+ HttpResponse httpResponse = new BasicHttpResponse(new ProtocolVersion("HTTP",1,0), 200, "ACCEPTED");
+ httpResponse.setEntity(getHttpEntity());
+ Mockito.when(client.doPost(Mockito.anyString(), Mockito.anyString())).thenReturn(httpResponse);
+ impl.setClient(client);
+ RequestValidationPolicy requestValidationPolicy = Mockito.mock(RequestValidationPolicy.class);
+ RuleExecutor ruleExecutor = Mockito.mock(RuleExecutor.class);
+ RuleResult ruleResult = RuleResult.REJECT;
+ Mockito.when(requestValidationPolicy.getInProgressRuleExecutor()).thenReturn(ruleExecutor);
+ Mockito.when(ruleExecutor.executeRule(Mockito.anyString(), Mockito.anyListOf(VNFOperation.class)))
+ .thenReturn(ruleResult);
+ impl.setRequestValidationPolicy(requestValidationPolicy);
+ impl.validateRequest(runtimeContext);
+ }
+
+ private RuntimeContext createRequestValidatorInput() {
+ return createRequestHandlerRuntimeContext("VSCP", "{\"request-id\":\"request-id\"}");
+ }
+
+ private CommonHeader returnResponseContextCommonHeader(ResponseContext responseContext) {
+ CommonHeader commonHeader = responseContext.getCommonHeader();
+ Flags flags = new Flags();
+ flags.setForce(false);
+ commonHeader.setFlags(flags);
+ commonHeader.setRequestId("TEST_REQUEST_ID");
+ return commonHeader;
+ }
+
+ private BasicHttpEntity getHttpEntity() {
+ BasicHttpEntity httpEntity = new BasicHttpEntity();
+ InputStream inputStream = new ByteArrayInputStream(
+ "{\"output\": {\"status\": {\"message\": \"test_messge\",\"code\": \"400\",\"status\":\"test_status\"},\"response-info\": { \"block\": \"true\"}}}".getBytes());
+ httpEntity.setContent(inputStream);
+ return httpEntity;
+ }
}