2d148ab324513a084980477239a7892b43c125d0Phill Cunnington/*
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington * The contents of this file are subject to the terms of the Common Development and
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington * Distribution License (the License). You may not use this file except in compliance with the
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington * License.
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington *
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington * specific language governing permission and limitations under the License.
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington *
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington * When distributing Covered Software, include this CDDL Header Notice in each file and include
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington * Header, with the fields enclosed by brackets [] replaced by your own identifying
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington * information: "Portions copyright [year] [name of copyright owner]".
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington *
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington * Copyright 2015 ForgeRock AS.
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington */
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonpackage com.sun.identity.setup;
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport static org.assertj.core.api.Assertions.assertThat;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport static org.mockito.BDDMockito.given;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport static org.mockito.Mockito.*;
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunningtonimport static org.mockito.MockitoAnnotations.initMocks;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport static org.testng.Assert.fail;
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunningtonimport java.io.File;
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport javax.servlet.FilterChain;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport javax.servlet.FilterConfig;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport javax.servlet.ServletContext;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport javax.servlet.ServletException;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport javax.servlet.http.HttpServletRequest;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport javax.servlet.http.HttpServletResponse;
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunningtonimport org.mockito.Mock;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport org.testng.annotations.AfterMethod;
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunningtonimport org.testng.annotations.BeforeClass;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport org.testng.annotations.BeforeMethod;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport org.testng.annotations.DataProvider;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport org.testng.annotations.Test;
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunningtonimport com.google.inject.Injector;
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunningtonimport com.sun.identity.common.configuration.ConfigurationException;
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunningtonimport com.sun.identity.shared.Constants;
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonpublic class AMSetupFilterTest {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington private AMSetupFilter setupFilter;
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington @Mock
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington private AMSetupManager setupManager;
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington private Injector injector;
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington @BeforeClass
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington public void setupClass() {
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington injector = mock(Injector.class);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington SystemStartupInjectorHolder.initialise(injector);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington @BeforeMethod
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void setup() {
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington initMocks(this);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(injector.getInstance(AMSetupManager.class)).willReturn(setupManager);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington setupFilter = new AMSetupFilter();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington @AfterMethod
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void tearDown() {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington System.clearProperty(Constants.CONFIG_STORE_DOWN_REDIRECT_URL);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington @Test
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void initShouldSetEncryptionPasswordIfNotConfigured() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Given
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterConfig config = mock(FilterConfig.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington ServletContext context = mock(ServletContext.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington given(config.getServletContext()).willReturn(context);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington systemIsNotConfigured();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //When
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.init(config);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Then
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington verify(context).setAttribute(eq("am.enc.pwd"), anyString());
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington @Test
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void initShouldNotSetEncryptionPasswordIfConfigured() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Given
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterConfig config = mock(FilterConfig.class);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington ServletContext context = mock(ServletContext.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington given(config.getServletContext()).willReturn(context);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington systemIsConfigured();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //When
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.init(config);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Then
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verifyZeroInteractions(context);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington @Test
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldAllowRequestsThroughIfConfigured() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Given
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington initializeFilter();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest("REQUEST_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington systemIsConfigured();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //When
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Then
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verify(chain).doFilter(request, response);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington @DataProvider
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington private Object[][] setupRequestUris() {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington return new Object[][]{
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {"/config/options.htm"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {"/setup/setSetupProgress"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {"/config/upgrade/upgrade.htm"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {"/upgrade/setUpgradeProgress"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington };
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington @Test(dataProvider = "setupRequestUris")
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldRedirectSetupRequestsIfConfigured(String requestUri) throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Given
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington initializeFilter();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest(requestUri);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington systemIsConfigured();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //When
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Then
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verify(response).sendRedirect("SCHEME://SERVER_NAME:8080/CONTEXT_PATH");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verifyZeroInteractions(chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington @Test
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldRedirectRequestsIfUpgradeInProgressButConfigStoreIsDown() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Given
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington initializeFilter();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest("REQUEST_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington systemIsBeingUpgraded();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington configStoreIsDown("CONFIG_STORE_DOWN_REDIRECT_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //When
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Then
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verify(response).sendRedirect("CONFIG_STORE_DOWN_REDIRECT_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verifyZeroInteractions(chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington @Test
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldThrowConfigurationExceptionIfUpgradeInProgressAndConfigStoreIsDownButNoRedirectUriSet()
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Given
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington initializeFilter();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest("REQUEST_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington systemIsBeingUpgraded();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington configStoreIsDown(null);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //When
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington try {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington fail("Expected ServletException with ConfigurationException is cause");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington } catch (ServletException e) {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Then
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington assertThat(e.getCause()).isInstanceOf(ConfigurationException.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verifyZeroInteractions(response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington @Test
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldAllowConfiguratorRequestsThroughIfNotConfigured() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Given
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington initializeFilter();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest("/configurator");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington systemIsNotConfigured();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //When
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Then
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verify(chain).doFilter(request, response);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington @Test
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldRedirectRequestsToSetupPageIfNotConfigured() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Given
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington initializeFilter();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest("REQUEST_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington systemIsNotConfigured();
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington withWritePermissionsOnBootstrapRootDirectory();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //When
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Then
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verify(response).sendRedirect("SCHEME://SERVER_NAME:8080/CONTEXT_PATH/config/options.htm");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verifyZeroInteractions(chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington @Test
c757a6cc9f2b643d0675bc85bd648964ac012eb6Mark de Reeper public void filterShouldThrowExceptionIfNotConfiguredAndCannotWriteToUserHomeDirectory()
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Given
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington initializeFilter();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest("REQUEST_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington systemIsNotConfigured();
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington noWritePermissionsOnBootstrapRootDirectory();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //When
c757a6cc9f2b643d0675bc85bd648964ac012eb6Mark de Reeper try {
c757a6cc9f2b643d0675bc85bd648964ac012eb6Mark de Reeper setupFilter.doFilter(request, response, chain);
c757a6cc9f2b643d0675bc85bd648964ac012eb6Mark de Reeper fail("Expected ServletException with ConfigurationException as cause");
c757a6cc9f2b643d0675bc85bd648964ac012eb6Mark de Reeper } catch (ServletException e) {
c757a6cc9f2b643d0675bc85bd648964ac012eb6Mark de Reeper //Then
c757a6cc9f2b643d0675bc85bd648964ac012eb6Mark de Reeper assertThat(e.getCause()).isInstanceOf(ConfigurationException.class);
c757a6cc9f2b643d0675bc85bd648964ac012eb6Mark de Reeper verifyZeroInteractions(response, chain);
c757a6cc9f2b643d0675bc85bd648964ac012eb6Mark de Reeper }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington @DataProvider
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington private Object[][] allowedRequestsWhilstConfiguring() {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington return new Object[][]{
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {".ico"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {".htm"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {".css"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {".js"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {".jpg"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {".gif"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {".png"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {".JPG"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {"SMSObjectIF"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {"setSetupProgress"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {"setUpgradeProgress"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {"/legal-notices/"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington };
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington @Test(dataProvider = "allowedRequestsWhilstConfiguring")
c7d07c25d6652360abd5e774190c0d419c63cabaPeter Major public void filterShouldAllowCertainRequestsThroughIfNotConfiguredAndInConfigurationMode(String suffix)
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Previous request must have been redirected to setup page to set the pass-through flag
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington filterShouldRedirectRequestsToSetupPageIfNotConfigured();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Given
c7d07c25d6652360abd5e774190c0d419c63cabaPeter Major HttpServletRequest request = mockRequest(suffix);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //When
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Then
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verify(chain).doFilter(request, response);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington @Test
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldRedirectRequestsToSetupPageIfNotConfiguredAndInConfigurationMode() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Given
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Previous request must have been redirected to setup page to set the pass-through flag
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington filterShouldRedirectRequestsToSetupPageIfNotConfigured();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //When/Then
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington filterShouldRedirectRequestsToSetupPageIfNotConfigured();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington private void initializeFilter() throws ServletException {
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington FilterConfig config = mock(FilterConfig.class);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington ServletContext context = mock(ServletContext.class);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(config.getServletContext()).willReturn(context);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington setupFilter.init(config);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington }
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington private void systemIsNotConfigured() {
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.isConfigured()).willReturn(false);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.isCurrentConfigurationValid()).willReturn(false);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington private void systemIsConfigured() {
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.isConfigured()).willReturn(true);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.isCurrentConfigurationValid()).willReturn(true);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington private void systemIsBeingUpgraded() {
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.isCurrentConfigurationValid()).willReturn(false);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington private void configStoreIsDown(String redirectUri) {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington if (redirectUri != null) {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington System.setProperty(Constants.CONFIG_STORE_DOWN_REDIRECT_URL, redirectUri);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.getBootStrapFileLocation()).willReturn("BOOTSTRAP_FILE_LOCATION");
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.isVersionNewer()).willReturn(false);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.isUpgradeCompleted()).willReturn(false);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
c7d07c25d6652360abd5e774190c0d419c63cabaPeter Major private HttpServletRequest mockRequest(String suffix) {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mock(HttpServletRequest.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington given(request.getScheme()).willReturn("SCHEME");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington given(request.getServerName()).willReturn("SERVER_NAME");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington given(request.getServerPort()).willReturn(8080);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington given(request.getContextPath()).willReturn("/CONTEXT_PATH");
c7d07c25d6652360abd5e774190c0d419c63cabaPeter Major given(request.getRequestURI()).willReturn("REQUEST_URI" + suffix);
c7d07c25d6652360abd5e774190c0d419c63cabaPeter Major given(request.getServletPath()).willReturn("SERVLET_PATH" + suffix);
0d29d2c9c206eb1652fa951dd55bcc0cfa4b48feNeil Madden given(request.getPathInfo()).willReturn("PATH_INFO" + suffix);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington return request;
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington private void withWritePermissionsOnBootstrapRootDirectory() {
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington File bootstrapRootDirectory = mock(File.class);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.getUserHomeDirectory()).willReturn(bootstrapRootDirectory);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(bootstrapRootDirectory.canWrite()).willReturn(true);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington private void noWritePermissionsOnBootstrapRootDirectory() {
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington File bootstrapRootDirectory = mock(File.class);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.getUserHomeDirectory()).willReturn(bootstrapRootDirectory);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(bootstrapRootDirectory.canWrite()).willReturn(false);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington }
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington}