package org.ovirt.engine.core; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Locale; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner.Silent; import org.ovirt.engine.core.branding.BrandingManager; import org.ovirt.engine.core.common.interfaces.BackendLocal; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.utils.MockConfigRule; import org.ovirt.engine.core.utils.servlet.LocaleFilter; @RunWith(Silent.class) public class WelcomeServletTest { @ClassRule public static MockConfigRule mcr = new MockConfigRule(); @Spy WelcomeServlet testServlet; @Mock HttpServletRequest mockRequest; @Mock HttpSession mockSession; @Mock ServletContext mockContext; @Mock HttpServletResponse mockResponse; @Mock RequestDispatcher mockDispatcher; @Mock BackendLocal mockBackend; @Mock BrandingManager mockBrandingManager; final List<String> localeKeys = createLocaleKeys(); private void mockBackendQuery(VdcQueryType queryType, Object returnValue) { VdcQueryReturnValue queryReturnValueMock = when(mock(VdcQueryReturnValue.class).getReturnValue()) .thenReturn(returnValue).getMock(); when(mockBackend.runPublicQuery(eq(queryType), any(VdcQueryParametersBase.class))) .thenReturn(queryReturnValueMock); } @Before public void setUp() throws Exception { doReturn("http://localhost:8080/ovirt-engine/sso/credentials-change.html").when(testServlet).getCredentialsChangeUrl(any()); testServlet.setBackend(mockBackend); testServlet.init(mockBrandingManager, "/ovirt-engine"); mockBackendQuery(VdcQueryType.GetConfigurationValue, "oVirtVersion"); when(mockBrandingManager.getWelcomeSections(any(Locale.class))).thenReturn("Welcome Section HTML"); } @Test public void testDoGetHttpServletRequestHttpServletResponseNoDispatcher() throws IOException, ServletException { when(mockRequest.getAttribute(LocaleFilter.LOCALE)).thenReturn(Locale.JAPANESE); when(mockRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost:8080/ovirt-engine/")); when(mockRequest.getServletContext()).thenReturn(mockContext); when(mockRequest.getSession(true)).thenReturn(mockSession); when(mockSession.getAttribute("authCode")).thenReturn("aU1KZG1OUytQSktnd29SQ3NIOVhWckls"); when(mockSession.getAttribute("token")).thenReturn("aU1KZG1OUytQSktnd29SQ3NIOVhWckls"); when(mockSession.getAttribute("error")).thenReturn(""); when(mockSession.getAttribute("error_code")).thenReturn(""); when(mockRequest.getServletContext().getAttribute("sso_logout_url")).thenReturn( new StringBuffer("http://localhost:8080/ovirt-engine/logout")); when(mockRequest.getServletContext().getAttribute("sso_switch_user_url")).thenReturn( new StringBuffer("http://localhost:8080/ovirt-engine/login")); testServlet.doGet(mockRequest, mockResponse); verify(mockRequest).setAttribute("localeKeys", localeKeys); //Make sure the content type contains UTF-8 so the characters display properly. verify(mockResponse).setContentType("text/html;charset=UTF-8"); } @Test public void testDoGetHttpServletRequestHttpServletResponseWithDispatcher() throws IOException, ServletException { when(mockRequest.getAttribute(LocaleFilter.LOCALE)).thenReturn(Locale.JAPANESE); when(mockRequest.getRequestDispatcher("/WEB-INF/ovirt-engine.jsp")).thenReturn(mockDispatcher); when(mockRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost:8080/ovirt-engine/")); when(mockRequest.getServletContext()).thenReturn(mockContext); when(mockRequest.getSession(true)).thenReturn(mockSession); when(mockSession.getAttribute("authCode")).thenReturn("aU1KZG1OUytQSktnd29SQ3NIOVhWckls"); when(mockSession.getAttribute("token")).thenReturn("aU1KZG1OUytQSktnd29SQ3NIOVhWckls"); when(mockSession.getAttribute("error")).thenReturn(""); when(mockSession.getAttribute("error_code")).thenReturn(""); when(mockRequest.getServletContext().getAttribute("sso_logout_url")).thenReturn( new StringBuffer("http://localhost:8080/ovirt-engine/logout")); when(mockRequest.getServletContext().getAttribute("sso_switch_user_url")).thenReturn( new StringBuffer("http://localhost:8080/ovirt-engine/login")); testServlet.doGet(mockRequest, mockResponse); verify(mockRequest).setAttribute("localeKeys", localeKeys); //Make sure the content type contains UTF-8 so the characters display properly. verify(mockResponse).setContentType("text/html;charset=UTF-8"); //Make sure the include is called on the dispatcher. verify(mockDispatcher).include(mockRequest, mockResponse); } private List<String> createLocaleKeys() { List<String> keys = new ArrayList<>(); keys.add("de_DE"); keys.add("en_US"); keys.add("es_ES"); keys.add("fr_FR"); keys.add("it_IT"); keys.add("ja_JP"); keys.add("ko_KR"); keys.add("pt_BR"); keys.add("zh_CN"); return keys; } }