/* * ============LICENSE_START========================================== * ONAP Portal SDK * =================================================================== * Copyright © 2018 AT&T Intellectual Property. All rights reserved. * =================================================================== * * Unless otherwise specified, all software contained herein is licensed * under the Apache License, Version 2.0 (the "License"); * you may not use this software 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. * * Unless otherwise specified, all documentation contained herein is licensed * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); * you may not use this documentation except in compliance with the License. * You may obtain a copy of the License at * * https://creativecommons.org/licenses/by/4.0/ * * Unless required by applicable law or agreed to in writing, documentation * 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.portalsdk.analytics.controller; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.onap.portalsdk.analytics.error.ReportSQLException; import org.onap.portalsdk.analytics.model.runtime.ReportRuntime; import org.onap.portalsdk.analytics.system.AppUtils; import org.onap.portalsdk.analytics.system.Globals; import org.onap.portalsdk.analytics.util.AppConstants; import org.onap.portalsdk.analytics.xmlobj.MockitoTestSuite; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest({Globals.class, AppUtils.class}) public class ControllerTest { Controller controller; String ACTION_KEY = "testAction"; Action action; ActionMapping actionMapping; private String ACTION = "testAction"; private String CONTROLLER_CLASS = "org.onap.portalsdk.analytics.controller.DummyController"; private String PRIVATE_CONTROLLER_CLASS = "org.onap.portalsdk.analytics.controller.PrivateDummyController"; private String ABSTRACT_CONTROLLER_CLASS = "org.onap.portalsdk.analytics.controller.AbstractDummyController"; private String CONTROLLER_METHOD = "view"; private String JSP_NAME = "testJsp"; private String ERROR_PAGE = "errorPage"; private String ERROR_MESSAGE = "testErrorMessage"; private String TEST_ID = "testID"; private String REPORT_NAME = "testReport"; private String REPORT_SQL = "testReportSQL"; private String LOG_VAR_IN_SESSION = "test"; @Before public void setup() { controller = new Controller(); MockitoAnnotations.initMocks(this); } MockitoTestSuite mockitoTestSuite = new MockitoTestSuite(); HttpServletRequest mockedRequest = mockitoTestSuite.getMockedRequest(); HttpServletResponse mockResponse = mockitoTestSuite.getMockedResponse(); @Test public void processRequestTest_WhenClassNotFoundException() throws Exception { actionMapping = new ActionMapping(); action = new Action(ACTION, "AdminController", CONTROLLER_METHOD, JSP_NAME); actionMapping.addAction(action); PowerMockito.mockStatic(Globals.class); PowerMockito.mockStatic(AppUtils.class); when(Globals.getRaptorActionMapping()).thenReturn(actionMapping); HttpSession session = mockedRequest.getSession(); when(Globals.getLogVariablesInSession()).thenReturn(LOG_VAR_IN_SESSION); ReportRuntime rr = PowerMockito.mock(ReportRuntime.class); when(rr.getReportID()).thenReturn(TEST_ID); when(rr.getReportName()).thenReturn(REPORT_NAME); when(session.getAttribute(AppConstants.SI_REPORT_RUNTIME)).thenReturn(rr); ReportSQLException rse = new ReportSQLException(ERROR_MESSAGE,REPORT_SQL); PowerMockito.doNothing().when(AppUtils.class, "processErrorNotification", new Object[]{mockedRequest, rse}); when(AppUtils.getErrorPage()).thenReturn(ERROR_PAGE); assertEquals(ERROR_PAGE, controller.processRequest(ACTION_KEY, mockedRequest)); } @Test public void processRequestTest_WhenActionIsNull() throws Exception { actionMapping = new ActionMapping(); PowerMockito.mockStatic(Globals.class); PowerMockito.mockStatic(AppUtils.class); when(Globals.getRaptorActionMapping()).thenReturn(actionMapping); HttpSession session = mockedRequest.getSession(); when(Globals.getLogVariablesInSession()).thenReturn(LOG_VAR_IN_SESSION); ReportRuntime rr = PowerMockito.mock(ReportRuntime.class); when(rr.getReportID()).thenReturn(TEST_ID); when(rr.getReportName()).thenReturn(REPORT_NAME); when(session.getAttribute(AppConstants.SI_REPORT_RUNTIME)).thenReturn(rr); ReportSQLException rse = new ReportSQLException(ERROR_MESSAGE,REPORT_SQL); PowerMockito.doNothing().when(AppUtils.class, "processErrorNotification", new Object[]{mockedRequest, rse}); when(AppUtils.getErrorPage()).thenReturn(ERROR_PAGE); assertEquals(ERROR_PAGE, controller.processRequest(ACTION_KEY, mockedRequest)); } @Test public void processRequestTest() throws Exception { actionMapping = new ActionMapping(); action = new Action("report.run", CONTROLLER_CLASS, CONTROLLER_METHOD, JSP_NAME); actionMapping.addAction(action); PowerMockito.mockStatic(Globals.class); PowerMockito.mockStatic(AppUtils.class); when(Globals.getRaptorActionMapping()).thenReturn(actionMapping); HttpSession session = mockedRequest.getSession(); when(Globals.getLogVariablesInSession()).thenReturn(LOG_VAR_IN_SESSION); ReportRuntime rr = PowerMockito.mock(ReportRuntime.class); when(rr.getReportID()).thenReturn(TEST_ID); when(rr.getReportName()).thenReturn(REPORT_NAME); when(session.getAttribute(AppConstants.SI_REPORT_RUNTIME)).thenReturn(rr); ReportSQLException rse = new ReportSQLException(ERROR_MESSAGE,REPORT_SQL); PowerMockito.doNothing().when(AppUtils.class, "processErrorNotification", new Object[]{mockedRequest, rse}); when(AppUtils.getErrorPage()).thenReturn(ERROR_PAGE); assertEquals(JSP_NAME, controller.processRequest(mockedRequest)); } @Test public void processRequestTest_WithNoSuchMethodException() throws Exception { actionMapping = new ActionMapping(); action = new Action(ACTION, CONTROLLER_CLASS, "viewHome", JSP_NAME); actionMapping.addAction(action); PowerMockito.mockStatic(Globals.class); PowerMockito.mockStatic(AppUtils.class); when(Globals.getRaptorActionMapping()).thenReturn(actionMapping); HttpSession session = mockedRequest.getSession(); when(Globals.getLogVariablesInSession()).thenReturn(LOG_VAR_IN_SESSION); ReportRuntime rr = PowerMockito.mock(ReportRuntime.class); when(rr.getReportID()).thenReturn(TEST_ID); when(rr.getReportName()).thenReturn(REPORT_NAME); when(session.getAttribute(AppConstants.SI_REPORT_RUNTIME)).thenReturn(rr); ReportSQLException rse = new ReportSQLException(ERROR_MESSAGE,REPORT_SQL); PowerMockito.doNothing().when(AppUtils.class, "processErrorNotification", new Object[]{mockedRequest, rse}); when(AppUtils.getErrorPage()).thenReturn(ERROR_PAGE); assertEquals(ERROR_PAGE, controller.processRequest(ACTION_KEY, mockedRequest)); } @Test public void handleRequestTest() throws Exception { actionMapping = new ActionMapping(); action = new Action("report.run", CONTROLLER_CLASS, CONTROLLER_METHOD, JSP_NAME); actionMapping.addAction(action); PowerMockito.mockStatic(Globals.class); PowerMockito.mockStatic(AppUtils.class); when(Globals.getRaptorActionMapping()).thenReturn(actionMapping); HttpSession session = mockedRequest.getSession(); when(Globals.getLogVariablesInSession()).thenReturn(LOG_VAR_IN_SESSION); ReportRuntime rr = PowerMockito.mock(ReportRuntime.class); when(rr.getReportID()).thenReturn(TEST_ID); when(rr.getReportName()).thenReturn(REPORT_NAME); when(session.getAttribute(AppConstants.SI_REPORT_RUNTIME)).thenReturn(rr); ReportSQLException rse = new ReportSQLException(ERROR_MESSAGE,REPORT_SQL); PowerMockito.doNothing().when(AppUtils.class, "processErrorNotification", new Object[]{mockedRequest, rse}); when(AppUtils.getErrorPage()).thenReturn(ERROR_PAGE); ServletContext sc= Mockito.mock(ServletContext.class); RequestDispatcher mockedRequestDispatcher = Mockito.mock(RequestDispatcher.class); when(sc.getRequestDispatcher(Mockito.any(String.class))).thenReturn(mockedRequestDispatcher); Mockito.doNothing().when(mockedRequestDispatcher).forward(Mockito.any(HttpServletRequest.class), Mockito.any(HttpServletResponse.class)); controller.handleRequest(mockedRequest, mockResponse,sc); } @Test public void processRequestTest_WithIllegalAccess() throws Exception { actionMapping = new ActionMapping(); action = new Action(ACTION, PRIVATE_CONTROLLER_CLASS, "", JSP_NAME); actionMapping.addAction(action); PowerMockito.mockStatic(Globals.class); PowerMockito.mockStatic(AppUtils.class); when(Globals.getRaptorActionMapping()).thenReturn(actionMapping); HttpSession session = mockedRequest.getSession(); when(Globals.getLogVariablesInSession()).thenReturn(LOG_VAR_IN_SESSION); ReportRuntime rr = PowerMockito.mock(ReportRuntime.class); when(rr.getReportID()).thenReturn(TEST_ID); when(rr.getReportName()).thenReturn(REPORT_NAME); when(session.getAttribute(AppConstants.SI_REPORT_RUNTIME)).thenReturn(rr); ReportSQLException rse = new ReportSQLException(ERROR_MESSAGE,REPORT_SQL); PowerMockito.doNothing().when(AppUtils.class, "processErrorNotification", new Object[]{mockedRequest, rse}); when(AppUtils.getErrorPage()).thenReturn(ERROR_PAGE); assertEquals(ERROR_PAGE, controller.processRequest(ACTION_KEY, mockedRequest)); } @Test public void processRequestTest_WithInvocationTargetException() throws Exception { actionMapping = new ActionMapping(); action = new Action(ACTION, CONTROLLER_CLASS, "throwInvocationTarget", JSP_NAME); actionMapping.addAction(action); PowerMockito.mockStatic(Globals.class); PowerMockito.mockStatic(AppUtils.class); when(Globals.getRaptorActionMapping()).thenReturn(actionMapping); HttpSession session = mockedRequest.getSession(); when(Globals.getLogVariablesInSession()).thenReturn(LOG_VAR_IN_SESSION); ReportRuntime rr = PowerMockito.mock(ReportRuntime.class); when(rr.getReportID()).thenReturn(TEST_ID); when(rr.getReportName()).thenReturn(REPORT_NAME); when(session.getAttribute(AppConstants.SI_REPORT_RUNTIME)).thenReturn(rr); ReportSQLException rse = new ReportSQLException(ERROR_MESSAGE,REPORT_SQL); PowerMockito.doNothing().when(AppUtils.class, "processErrorNotification", new Object[]{mockedRequest, rse}); when(AppUtils.getErrorPage()).thenReturn(ERROR_PAGE); assertEquals(ERROR_PAGE, controller.processRequest(ACTION_KEY, mockedRequest)); } @Test public void processRequestTest_WithInstantiationException() throws Exception { actionMapping = new ActionMapping(); action = new Action(ACTION, ABSTRACT_CONTROLLER_CLASS, "throwInstantiation", JSP_NAME); actionMapping.addAction(action); PowerMockito.mockStatic(Globals.class); PowerMockito.mockStatic(AppUtils.class); when(Globals.getRaptorActionMapping()).thenReturn(actionMapping); HttpSession session = mockedRequest.getSession(); when(Globals.getLogVariablesInSession()).thenReturn(LOG_VAR_IN_SESSION); ReportRuntime rr = PowerMockito.mock(ReportRuntime.class); when(rr.getReportID()).thenReturn(TEST_ID); when(rr.getReportName()).thenReturn(REPORT_NAME); when(session.getAttribute(AppConstants.SI_REPORT_RUNTIME)).thenReturn(rr); ReportSQLException rse = new ReportSQLException(ERROR_MESSAGE,REPORT_SQL); PowerMockito.doNothing().when(AppUtils.class, "processErrorNotification", new Object[]{mockedRequest, rse}); when(AppUtils.getErrorPage()).thenReturn(ERROR_PAGE); assertEquals(ERROR_PAGE, controller.processRequest(ACTION_KEY, mockedRequest)); } }