This is an automated email from the ASF dual-hosted git repository.

isapir pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new af95c367a0 Added unit test for RemoteCIDRFilter
af95c367a0 is described below

commit af95c367a01826d69941b5d546b0543ecaa89f3b
Author: Igal Sapir <isa...@apache.org>
AuthorDate: Sun May 21 21:45:09 2023 -0700

    Added unit test for RemoteCIDRFilter
---
 .../catalina/filters/TestRemoteCIDRFilter.java     | 185 +++++++++++++++++++++
 .../catalina/filters/TestRemoteIpFilter.java       |   5 +
 2 files changed, 190 insertions(+)

diff --git a/test/org/apache/catalina/filters/TestRemoteCIDRFilter.java 
b/test/org/apache/catalina/filters/TestRemoteCIDRFilter.java
new file mode 100644
index 0000000000..96370a5f04
--- /dev/null
+++ b/test/org/apache/catalina/filters/TestRemoteCIDRFilter.java
@@ -0,0 +1,185 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.catalina.filters;
+
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletResponse;
+import org.apache.catalina.Context;
+import org.apache.catalina.connector.Request;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.catalina.startup.TomcatBaseTest;
+import org.apache.tomcat.unittest.TesterResponse;
+import org.apache.tomcat.unittest.TesterServletContext;
+import org.apache.tomcat.util.descriptor.web.FilterDef;
+import org.apache.tomcat.util.descriptor.web.FilterMap;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Map;
+
+public class TestRemoteCIDRFilter extends TomcatBaseTest {
+
+    @Test
+    public void testAllowOnly() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+        Context root = tomcat.addContext("", TEMP_DIR);
+        tomcat.start();
+
+        TestRemoteIpFilter.MockFilterChain filterChain = new 
TestRemoteIpFilter.MockFilterChain();
+
+        FilterDef filterDef = new FilterDef();
+        filterDef.addInitParameter("allow", "192.168.10.0/24, 
192.168.20.0/24");
+        Filter filter = createTestFilter(filterDef, RemoteCIDRFilter.class, 
root, "*");
+
+        String ipAddr;
+        Request request;
+        TesterResponse response;
+        int expected;
+
+        for (int i=0; i < 256; i++) {
+            for (int j=0; j < 256; j += 11) {
+                ipAddr = String.format("192.168.%s.%s", i, j);
+                request = new 
TestRemoteIpFilter.MockHttpServletRequest(ipAddr);
+                response = new TestRateLimitFilter.TesterResponseWithStatus();
+                expected = (i == 10 || i == 20) ? HttpServletResponse.SC_OK : 
HttpServletResponse.SC_FORBIDDEN;
+                filter.doFilter(request, response, filterChain);
+                Assert.assertEquals(expected, response.getStatus());
+            }
+        }
+    }
+
+    @Test
+    public void testDenyOnly() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+        Context root = tomcat.addContext("", TEMP_DIR);
+        tomcat.start();
+
+        TestRemoteIpFilter.MockFilterChain filterChain = new 
TestRemoteIpFilter.MockFilterChain();
+
+        FilterDef filterDef = new FilterDef();
+        filterDef.addInitParameter("deny", "192.168.10.0/24, 192.168.20.0/24");
+        Filter filter = createTestFilter(filterDef, RemoteCIDRFilter.class, 
root, "*");
+
+        String ipAddr;
+        Request request;
+        TesterResponse response;
+        int expected;
+
+        for (int i=0; i < 256; i++) {
+            for (int j=0; j < 256; j += 11) {
+                ipAddr = String.format("192.168.%s.%s", i, j);
+                request = new 
TestRemoteIpFilter.MockHttpServletRequest(ipAddr);
+                response = new TestRateLimitFilter.TesterResponseWithStatus();
+                expected = (i != 10 && i != 20) ? HttpServletResponse.SC_OK : 
HttpServletResponse.SC_FORBIDDEN;
+                filter.doFilter(request, response, filterChain);
+                Assert.assertEquals(expected, response.getStatus());
+            }
+        }
+    }
+
+    @Test
+    public void testAllowDeny() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+        Context root = tomcat.addContext("", TEMP_DIR);
+        tomcat.start();
+
+        TestRemoteIpFilter.MockFilterChain filterChain = new 
TestRemoteIpFilter.MockFilterChain();
+
+        FilterDef filterDef = new FilterDef();
+        filterDef.addInitParameter("allow", "10.10.0.0/16");
+        filterDef.addInitParameter("deny", "10.10.10.0/24, 10.10.20.0/24");
+        Filter filter = createTestFilter(filterDef, RemoteCIDRFilter.class, 
root, "*");
+
+        String ipAddr;
+        Request request;
+        TesterResponse response;
+        int expected;
+
+        for (int i=0; i < 256; i++) {
+            for (int j=0; j < 256; j += 11) {
+                ipAddr = String.format("10.10.%s.%s", i, j);
+                request = new 
TestRemoteIpFilter.MockHttpServletRequest(ipAddr);
+                response = new TestRateLimitFilter.TesterResponseWithStatus();
+                expected = (i != 10 && i != 20) ? HttpServletResponse.SC_OK : 
HttpServletResponse.SC_FORBIDDEN;
+                filter.doFilter(request, response, filterChain);
+                Assert.assertEquals(expected, response.getStatus());
+            }
+        }
+    }
+
+    private Filter createTestFilter(FilterDef filterDef, Class 
testFilterClass, Context root, String urlPattern) throws ServletException {
+
+        RemoteCIDRFilter remoteCIDRFilter = new RemoteCIDRFilter();
+
+        filterDef.setFilterClass(testFilterClass.getName());
+        filterDef.setFilterName(testFilterClass.getName());
+        filterDef.setFilter(remoteCIDRFilter);
+        root.addFilterDef(filterDef);
+
+        root.addFilterDef(filterDef);
+
+        FilterMap filterMap = new FilterMap();
+        filterMap.setFilterName(testFilterClass.getName());
+        filterMap.addURLPatternDecoded(urlPattern);
+        root.addFilterMap(filterMap);
+
+        FilterConfig filterConfig = generateFilterConfig(filterDef);
+
+        remoteCIDRFilter.init(filterConfig);
+
+        return remoteCIDRFilter;
+    }
+
+    private static FilterConfig generateFilterConfig(FilterDef filterDef) {
+
+        TesterServletContext mockServletContext = new TesterServletContext();
+        Map<String,String> parameters = filterDef.getParameterMap();
+
+        FilterConfig filterConfig = new FilterConfig() {
+
+            @Override
+            public String getFilterName() {
+                return filterDef.getFilterName();
+            }
+
+            @Override
+            public ServletContext getServletContext() {
+                return mockServletContext;
+            }
+
+            @Override
+            public String getInitParameter(String name) {
+
+                return parameters.get(name);
+            }
+
+            @Override
+            public Enumeration<String> getInitParameterNames() {
+                return Collections.enumeration(parameters.keySet());
+            }
+        };
+
+        return filterConfig;
+    }
+
+}
diff --git a/test/org/apache/catalina/filters/TestRemoteIpFilter.java 
b/test/org/apache/catalina/filters/TestRemoteIpFilter.java
index ee35cfabf1..aebd10cd2d 100644
--- a/test/org/apache/catalina/filters/TestRemoteIpFilter.java
+++ b/test/org/apache/catalina/filters/TestRemoteIpFilter.java
@@ -124,6 +124,11 @@ public class TestRemoteIpFilter extends TomcatBaseTest {
             setCoyoteRequest(new org.apache.coyote.Request());
         }
 
+        public MockHttpServletRequest(String ipAddress) {
+            this();
+            this.setRemoteAddr(ipAddress);
+        }
+
         public void setHeader(String name, String value) {
             
getCoyoteRequest().getMimeHeaders().setValue(name).setString(value);
         }


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to