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 * 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 * 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 * Copyright 2015 ForgeRock AS.
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport static org.assertj.core.api.Assertions.assertThat;
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunningtonimport static org.mockito.MockitoAnnotations.initMocks;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport javax.servlet.http.HttpServletRequest;
2d148ab324513a084980477239a7892b43c125d0Phill Cunningtonimport javax.servlet.http.HttpServletResponse;
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunningtonimport com.sun.identity.common.configuration.ConfigurationException;
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington SystemStartupInjectorHolder.initialise(injector);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(injector.getInstance(AMSetupManager.class)).willReturn(setupManager);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington System.clearProperty(Constants.CONFIG_STORE_DOWN_REDIRECT_URL);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void initShouldSetEncryptionPasswordIfNotConfigured() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterConfig config = mock(FilterConfig.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington ServletContext context = mock(ServletContext.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington given(config.getServletContext()).willReturn(context);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington verify(context).setAttribute(eq("am.enc.pwd"), anyString());
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void initShouldNotSetEncryptionPasswordIfConfigured() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterConfig config = mock(FilterConfig.class);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington ServletContext context = mock(ServletContext.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington given(config.getServletContext()).willReturn(context);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldAllowRequestsThroughIfConfigured() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest("REQUEST_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington return new Object[][]{
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldRedirectSetupRequestsIfConfigured(String requestUri) throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest(requestUri);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verify(response).sendRedirect("SCHEME://SERVER_NAME:8080/CONTEXT_PATH");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldRedirectRequestsIfUpgradeInProgressButConfigStoreIsDown() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest("REQUEST_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington configStoreIsDown("CONFIG_STORE_DOWN_REDIRECT_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verify(response).sendRedirect("CONFIG_STORE_DOWN_REDIRECT_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldThrowConfigurationExceptionIfUpgradeInProgressAndConfigStoreIsDownButNoRedirectUriSet()
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest("REQUEST_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington fail("Expected ServletException with ConfigurationException is cause");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington assertThat(e.getCause()).isInstanceOf(ConfigurationException.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldAllowConfiguratorRequestsThroughIfNotConfigured() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest("/configurator");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldRedirectRequestsToSetupPageIfNotConfigured() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest("REQUEST_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington withWritePermissionsOnBootstrapRootDirectory();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington verify(response).sendRedirect("SCHEME://SERVER_NAME:8080/CONTEXT_PATH/config/options.htm");
c757a6cc9f2b643d0675bc85bd648964ac012eb6Mark de Reeper public void filterShouldThrowExceptionIfNotConfiguredAndCannotWriteToUserHomeDirectory()
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletRequest request = mockRequest("REQUEST_URI");
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington noWritePermissionsOnBootstrapRootDirectory();
c757a6cc9f2b643d0675bc85bd648964ac012eb6Mark de Reeper setupFilter.doFilter(request, response, chain);
c757a6cc9f2b643d0675bc85bd648964ac012eb6Mark de Reeper fail("Expected ServletException with ConfigurationException as cause");
c757a6cc9f2b643d0675bc85bd648964ac012eb6Mark de Reeper assertThat(e.getCause()).isInstanceOf(ConfigurationException.class);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington private Object[][] allowedRequestsWhilstConfiguring() {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington return new Object[][]{
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {"SMSObjectIF"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {"setSetupProgress"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {"setUpgradeProgress"},
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington {"/legal-notices/"},
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington @Test(dataProvider = "allowedRequestsWhilstConfiguring")
c7d07c25d6652360abd5e774190c0d419c63cabaPeter Major public void filterShouldAllowCertainRequestsThroughIfNotConfiguredAndInConfigurationMode(String suffix)
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Previous request must have been redirected to setup page to set the pass-through flag
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington filterShouldRedirectRequestsToSetupPageIfNotConfigured();
c7d07c25d6652360abd5e774190c0d419c63cabaPeter Major HttpServletRequest request = mockRequest(suffix);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington HttpServletResponse response = mock(HttpServletResponse.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington FilterChain chain = mock(FilterChain.class);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington setupFilter.doFilter(request, response, chain);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington public void filterShouldRedirectRequestsToSetupPageIfNotConfiguredAndInConfigurationMode() throws Exception {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington //Previous request must have been redirected to setup page to set the pass-through flag
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington filterShouldRedirectRequestsToSetupPageIfNotConfigured();
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington filterShouldRedirectRequestsToSetupPageIfNotConfigured();
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 given(setupManager.isConfigured()).willReturn(false);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.isCurrentConfigurationValid()).willReturn(false);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.isConfigured()).willReturn(true);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.isCurrentConfigurationValid()).willReturn(true);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.isCurrentConfigurationValid()).willReturn(false);
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington private void configStoreIsDown(String redirectUri) {
2d148ab324513a084980477239a7892b43c125d0Phill Cunnington System.setProperty(Constants.CONFIG_STORE_DOWN_REDIRECT_URL, redirectUri);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.getBootStrapFileLocation()).willReturn("BOOTSTRAP_FILE_LOCATION");
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.isVersionNewer()).willReturn(false);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.isUpgradeCompleted()).willReturn(false);
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);
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);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington private void noWritePermissionsOnBootstrapRootDirectory() {
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington File bootstrapRootDirectory = mock(File.class);
9446b3153033ef93a59c5288074e6c688e7fdf5dPhill Cunnington given(setupManager.getUserHomeDirectory()).willReturn(bootstrapRootDirectory);