Package org.springframework.test.web.server.setup

Source Code of org.springframework.test.web.server.setup.ConditionalDelegatingFilterProxyTests$MockFilter

/*
* Copyright 2002-2012 the original author or authors.
*
* 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.
*/
package org.springframework.test.web.server.setup;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockFilterConfig;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.web.server.MockFilterChain;

/**
*
* @author Rob Winch
*/
public class ConditionalDelegatingFilterProxyTests {
  private MockHttpServletRequest request;
  private MockHttpServletResponse response;
  private MockFilterChain filterChain;
  private MockFilter delegate;
  private PatternMappingFilterProxy filter;

  @Before
  public void setup() {
    request = new MockHttpServletRequest();
    request.setContextPath("/context");
    response = new MockHttpServletResponse();
    filterChain = new MockFilterChain();
    delegate = new MockFilter();
  }

  @Test
  public void init() throws Exception {
    FilterConfig config = new MockFilterConfig();
    filter = new PatternMappingFilterProxy(delegate, "/");
    filter.init(config);
    assertThat(delegate.filterConfig, is(config));
  }

  @Test
  public void destroy() throws Exception {
    filter = new PatternMappingFilterProxy(delegate, "/");
    filter.destroy();
    assertThat(delegate.destroy, is(true));
  }

  @Test
  public void matchExact() throws Exception {
    assertFilterInvoked("/test", "/test");
  }

  @Test
  public void matchExactEmpty() throws Exception {
    assertFilterInvoked("", "");
  }

  @Test
  public void matchPathMappingAllFolder() throws Exception {
    assertFilterInvoked("/test/this", "/*");
  }

  @Test
  public void matchPathMappingAll() throws Exception {
    assertFilterInvoked("/test", "/*");
  }

  @Test
  public void matchPathMappingAllContextRoot() throws Exception {
    assertFilterInvoked("", "/*");
  }

  @Test
  public void matchPathMappingContextRootAndSlash() throws Exception {
    assertFilterInvoked("/", "/*");
  }

  @Test
  public void matchPathMappingFolderPatternWithMultiFolderPath() throws Exception {
    assertFilterInvoked("/test/this/here", "/test/*");
  }

  @Test
  public void matchPathMappingFolderPattern() throws Exception {
    assertFilterInvoked("/test/this", "/test/*");
  }

  @Test
  public void matchPathMappingNoSuffix() throws Exception {
    assertFilterInvoked("/test/", "/test/*");
  }

  @Test
  public void matchPathMappingMissingSlash() throws Exception {
    assertFilterInvoked("/test", "/test/*");
  }

  @Test
  public void noMatchPathMappingMulti() throws Exception {
    assertFilterNotInvoked("/this/test/here", "/test/*");
  }

  @Test
  public void noMatchPathMappingEnd() throws Exception {
    assertFilterNotInvoked("/this/test", "/test/*");
  }

  @Test
  public void noMatchPathMappingEndSuffix() throws Exception {
    assertFilterNotInvoked("/test2/", "/test/*");
  }

  @Test
  public void noMatchPathMappingMissingSlash() throws Exception {
    assertFilterNotInvoked("/test2", "/test/*");
  }

  @Test
  public void matchExtensionMulti() throws Exception {
    assertFilterInvoked("/test/this/here.html", "*.html");
  }

  @Test
  public void matchExtension() throws Exception {
    assertFilterInvoked("/test/this.html", "*.html");
  }

  @Test
  public void matchExtensionNoPrefix() throws Exception {
    assertFilterInvoked("/.html", "*.html");
  }

  @Test
  public void matchExtensionNoFolder() throws Exception {
    assertFilterInvoked("/test.html", "*.html");
  }

  @Test
  public void noMatchExtensionNoSlash() throws Exception {
    assertFilterNotInvoked(".html", "*.html");
  }

  @Test
  public void noMatchExtensionSlashEnd() throws Exception {
    assertFilterNotInvoked("/index.html/", "*.html");
  }

  @Test
  public void noMatchExtensionPeriodEnd() throws Exception {
    assertFilterNotInvoked("/index.html.", "*.html");
  }

  @Test
  public void noMatchExtensionLarger() throws Exception {
    assertFilterNotInvoked("/index.htm", "*.html");
  }

  @Test
  public void noMatchInvalidPattern() throws Exception {
    // pattern uses extension mapping but starts with / (treated as exact match)
    assertFilterNotInvoked("/index.html", "/*.html");
  }

  /*
   * Below are tests from Table 12-1 of the Servlet Specification
   */
  @Test
  public void specPathMappingMultiFolderPattern() throws Exception {
    assertFilterInvoked("/foo/bar/index.html", "/foo/bar/*");
  }

  @Test
  public void specPathMappingMultiFolderPatternAlternate() throws Exception {
    assertFilterInvoked("/foo/bar/index.bop", "/foo/bar/*");
  }

  @Test
  public void specPathMappingNoSlash() throws Exception {
    assertFilterInvoked("/baz", "/baz/*");
  }

  @Test
  public void specPathMapping() throws Exception {
    assertFilterInvoked("/baz/index.html", "/baz/*");
  }

  @Test
  public void specExactMatch() throws Exception {
    assertFilterInvoked("/catalog", "/catalog");
  }

  @Test
  public void specExtensionMappingSingleFolder() throws Exception {
    assertFilterInvoked("/catalog/racecar.bop", "*.bop");
  }

  @Test
  public void specExtensionMapping() throws Exception {
    assertFilterInvoked("/index.bop", "*.bop");
  }

  private void assertFilterNotInvoked(String requestUri, String pattern) throws Exception {
    request.setRequestURI(request.getContextPath() + requestUri);
    filter = new PatternMappingFilterProxy(delegate, pattern);
    filter.doFilter(request, response, filterChain);

    assertThat(delegate.request, equalTo((ServletRequest) null));
    assertThat(delegate.response, equalTo((ServletResponse) null));
    assertThat(delegate.chain, equalTo((FilterChain) null));

    assertThat(filterChain.getRequest(), equalTo((ServletRequest) request));
    assertThat(filterChain.getResponse(), equalTo((ServletResponse) response));
    filterChain = new MockFilterChain();
  }

  private void assertFilterInvoked(String requestUri, String pattern) throws Exception {
    request.setRequestURI(request.getContextPath() + requestUri);
    filter = new PatternMappingFilterProxy(delegate, pattern);
    filter.doFilter(request, response, filterChain);

    assertThat(delegate.request, equalTo((ServletRequest) request));
    assertThat(delegate.response, equalTo((ServletResponse) response));
    assertThat(delegate.chain, equalTo((FilterChain) filterChain));
    delegate = new MockFilter();
  }

  private static class MockFilter implements Filter {
    private FilterConfig filterConfig;
    private ServletRequest request;
    private ServletResponse response;
    private FilterChain chain;
    private boolean destroy;

    public void init(FilterConfig filterConfig) throws ServletException {
      this.filterConfig = filterConfig;
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
        ServletException {
      this.request = request;
      this.response = response;
      this.chain = chain;
    }

    public void destroy() {
      this.destroy = true;
    }
  }
}
TOP

Related Classes of org.springframework.test.web.server.setup.ConditionalDelegatingFilterProxyTests$MockFilter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.