Updated Branches:
  refs/heads/master f98cc63e1 -> e8dab4a01

WICKET-5138


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e8dab4a0
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e8dab4a0
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e8dab4a0

Branch: refs/heads/master
Commit: e8dab4a0112d2cf84b381fe37cbb48b6c0bcf310
Parents: f98cc63
Author: Igor Vaynberg <igor.vaynb...@gmail.com>
Authored: Mon Apr 8 10:35:07 2013 -0700
Committer: Igor Vaynberg <igor.vaynb...@gmail.com>
Committed: Mon Apr 8 10:35:07 2013 -0700

----------------------------------------------------------------------
 .../apache/wicket/protocol/http/WicketFilter.java  |   28 +++--
 .../wicket/protocol/http/WicketFilterTest.java     |   82 ++++++++++++++-
 2 files changed, 94 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/e8dab4a0/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java 
b/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
index eb73ee7..be577f3 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
@@ -96,8 +96,8 @@ public class WicketFilter implements Filter
        private boolean isServlet = false;
 
        /**
-        * default constructor, usually invoked through the servlet 
-        * container by the web.xml configuration
+        * default constructor, usually invoked through the servlet container 
by the web.xml
+        * configuration
         */
        public WicketFilter()
        {
@@ -106,11 +106,11 @@ public class WicketFilter implements Filter
        /**
         * constructor supporting programmatic setup of the filter
         * <p/>
-        *  this can be useful for programmatically creating and appending the 
-        *  wicket filter to the servlet context using servlet 3 features.
+        * this can be useful for programmatically creating and appending the 
wicket filter to the
+        * servlet context using servlet 3 features.
         * 
         * @param application
-        *           web application
+        *            web application
         */
        public WicketFilter(WebApplication application)
        {
@@ -174,7 +174,7 @@ public class WicketFilter implements Filter
                                return false;
                        }
 
-                       if ("OPTIONS".equals(httpServletRequest.getMethod()))
+                       if 
("OPTIONS".equalsIgnoreCase(httpServletRequest.getMethod()))
                        {
                                // handle the OPTIONS request outside of normal 
request processing.
                                // wicket pages normally only support GET and 
POST methods, but resources and
@@ -198,7 +198,8 @@ public class WicketFilter implements Filter
                                        httpServletResponse);
 
                                RequestCycle requestCycle = 
application.createRequestCycle(webRequest, webResponse);
-                               res = processRequestCycle(requestCycle, 
webResponse, httpServletRequest, httpServletResponse, chain);
+                               res = processRequestCycle(requestCycle, 
webResponse, httpServletRequest,
+                                       httpServletResponse, chain);
                        }
                        else
                        {
@@ -238,7 +239,7 @@ public class WicketFilter implements Filter
 
        /**
         * Process the request cycle
-        *
+        * 
         * @param requestCycle
         * @param webResponse
         * @param httpServletRequest
@@ -249,8 +250,9 @@ public class WicketFilter implements Filter
         * @throws ServletException
         */
        protected boolean processRequestCycle(RequestCycle requestCycle, 
WebResponse webResponse,
-           HttpServletRequest httpServletRequest, HttpServletResponse 
httpServletResponse,
-               final FilterChain chain) throws IOException, ServletException {
+               HttpServletRequest httpServletRequest, HttpServletResponse 
httpServletResponse,
+               final FilterChain chain) throws IOException, ServletException
+       {
                // Assume we are able to handle the request
                boolean res = true;
 
@@ -518,6 +520,7 @@ public class WicketFilter implements Filter
 
        /**
         * Provide a standard getter for filterPath.
+        * 
         * @return The configured filterPath.
         */
        protected String getFilterPath()
@@ -651,7 +654,8 @@ public class WicketFilter implements Filter
                if (this.filterPath != null)
                {
                        throw new IllegalStateException(
-                               "Filter path is write-once. You can not change 
it. Current value='" + filterPath + '\'');
+                               "Filter path is write-once. You can not change 
it. Current value='" + filterPath +
+                                       '\'');
                }
                if (filterPath != null)
                {
@@ -775,7 +779,7 @@ public class WicketFilter implements Filter
         * A filterPath should have all leading slashes removed and exactly one 
trailing slash. A
         * wildcard asterisk character has no special meaning. If your 
intention is to mean the top
         * level "/" then an empty string should be used instead.
-        *
+        * 
         * @param filterPath
         * @return
         */

http://git-wip-us.apache.org/repos/asf/wicket/blob/e8dab4a0/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketFilterTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketFilterTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketFilterTest.java
index 5c5234f..82c7320 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketFilterTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketFilterTest.java
@@ -16,10 +16,7 @@
  */
 package org.apache.wicket.protocol.http;
 
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -54,8 +51,11 @@ import 
org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
 import org.apache.wicket.protocol.http.mock.MockHttpServletResponse;
 import org.apache.wicket.protocol.http.mock.MockServletContext;
 import org.apache.wicket.request.http.WebRequest;
+import org.apache.wicket.request.resource.AbstractResource;
 import org.apache.wicket.request.resource.DynamicImageResource;
+import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.util.file.WebXmlFile;
+import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.tester.DummyHomePage;
 import org.junit.After;
 import org.junit.Assert;
@@ -171,6 +171,80 @@ public class WicketFilterTest extends Assert
                }
        }
 
+       @Test
+       public void options() throws IOException, ServletException, 
ParseException
+       {
+               try
+               {
+                       application = new MockApplication();
+                       WicketFilter filter = new WicketFilter();
+                       filter.init(new FilterTestingConfig());
+                       ThreadContext.setApplication(application);
+                       final String failure = "Should never get here when an 
OPTIONS request is issued";
+                       IResource resource = new AbstractResource()
+                       {
+                               @Override
+                               protected ResourceResponse 
newResourceResponse(Attributes attributes)
+                               {
+
+                                       fail(failure);
+                                       return null;
+                               }
+                       };
+                       application.getSharedResources().add("foo.txt", 
resource);
+
+                       // check OPTIONS request is processed correctly
+
+                       MockHttpServletRequest request = new 
MockHttpServletRequest(application, null, null);
+                       request.setURL(request.getContextPath() + 
request.getServletPath() +
+                               "/wicket/resource/" + 
Application.class.getName() + "/foo.txt");
+                       request.setMethod("OPtioNS"); // test that we do not 
care about case
+                       MockHttpServletResponse response = new 
MockHttpServletResponse(request);
+                       filter.doFilter(request, response, new FilterChain()
+                       {
+                               @Override
+                               public void doFilter(ServletRequest 
servletRequest, ServletResponse servletResponse)
+                                       throws IOException, ServletException
+                               {
+                               }
+                       });
+
+                       assertEquals(HttpServletResponse.SC_OK, 
response.getStatus());
+                       assertEquals("0", response.getHeader("Content-Length"));
+                       
assertFalse(Strings.isEmpty(response.getHeader("Allow")));
+                       
assertTrue(response.getHeader("Allow").toUpperCase().contains("GET"));
+                       
assertTrue(response.getHeader("Allow").toUpperCase().contains("POST"));
+
+                       // try with a GET request to make sure we fail correctly
+
+                       request = new MockHttpServletRequest(application, null, 
null);
+                       request.setURL(request.getContextPath() + 
request.getServletPath() +
+                               "/wicket/resource/" + 
Application.class.getName() + "/foo.txt");
+                       response = new MockHttpServletResponse(request);
+                       try
+                       {
+                               filter.doFilter(request, response, new 
FilterChain()
+                               {
+                                       @Override
+                                       public void doFilter(ServletRequest 
servletRequest,
+                                               ServletResponse 
servletResponse) throws IOException, ServletException
+                                       {
+                                       }
+                               });
+                       }
+                       catch (AssertionError e)
+                       {
+                               assertTrue(failure.equals(e.getMessage()));
+                       }
+
+               }
+               finally
+               {
+                       ThreadContext.detach();
+               }
+       }
+
+
        private void setIfModifiedSinceToNextWeek(MockHttpServletRequest 
request)
        {
                Calendar nextWeek = Calendar.getInstance();

Reply via email to