Modified: tomcat/trunk/test/org/apache/catalina/valves/RemoteIpValveTest.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/valves/RemoteIpValveTest.java?rev=833300&r1=833299&r2=833300&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/valves/RemoteIpValveTest.java 
(original)
+++ tomcat/trunk/test/org/apache/catalina/valves/RemoteIpValveTest.java Fri Nov 
 6 05:12:50 2009
@@ -1,386 +1,386 @@
-/*
- * 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.valves;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.servlet.ServletException;
-
-import junit.framework.TestCase;
-
-import org.apache.catalina.connector.Request;
-import org.apache.catalina.connector.Response;
-import org.apache.catalina.valves.ValveBase;
-
-/**
- * {...@link RemoteIpValve} Tests
- */
-public class RemoteIpValveTest extends TestCase {
-    
-    static class RemoteAddrAndHostTrackerValve extends ValveBase {
-        private String remoteAddr;
-        private String remoteHost;
-        
-        public String getRemoteAddr() {
-            return remoteAddr;
-        }
-        
-        public String getRemoteHost() {
-            return remoteHost;
-        }
-        
-        @Override
-        public void invoke(Request request, Response response) throws 
IOException, ServletException {
-            this.remoteHost = request.getRemoteHost();
-            this.remoteAddr = request.getRemoteAddr();
-        }
-    }
-    
-    public void testCommaDelimitedListToStringArray() {
-        List<String> elements = Arrays.asList("element1", "element2", 
"element3");
-        String actual = RemoteIpValve.listToCommaDelimitedString(elements);
-        assertEquals("element1, element2, element3", actual);
-    }
-    
-    public void testCommaDelimitedListToStringArrayEmptyList() {
-        List<String> elements = new ArrayList<String>();
-        String actual = RemoteIpValve.listToCommaDelimitedString(elements);
-        assertEquals("", actual);
-    }
-    
-    public void testCommaDelimitedListToStringArrayNullList() {
-        String actual = RemoteIpValve.listToCommaDelimitedString(null);
-        assertEquals("", actual);
-    }
-    
-    public void testInvokeAllowedRemoteAddrWithNullRemoteIpHeader() throws 
Exception {
-        // PREPARE
-        RemoteIpValve remoteIpValve = new RemoteIpValve();
-        remoteIpValve.setInternalProxies("192\\.168\\.0\\.10, 
192\\.168\\.0\\.11");
-        remoteIpValve.setTrustedProxies("proxy1, proxy2, proxy3");
-        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
-        remoteIpValve.setProxiesHeader("x-forwarded-by");
-        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
-        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
-        
-        Request request = new Request();
-        request.setCoyoteRequest(new org.apache.coyote.Request());
-        request.setRemoteAddr("192.168.0.10");
-        request.setRemoteHost("remote-host-original-value");
-        
-        // TEST
-        remoteIpValve.invoke(request, null);
-        
-        // VERIFY
-        String actualXForwardedFor = request.getHeader("x-forwarded-for");
-        assertNull("x-forwarded-for must be null", actualXForwardedFor);
-        
-        String actualXForwardedBy = request.getHeader("x-forwarded-by");
-        assertNull("x-forwarded-by must be null", actualXForwardedBy);
-        
-        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
-        assertEquals("remoteAddr", "192.168.0.10", actualRemoteAddr);
-        
-        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
-        assertEquals("remoteHost", "remote-host-original-value", 
actualRemoteHost);
-        
-        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
-        assertEquals("postInvoke remoteAddr", "192.168.0.10", 
actualPostInvokeRemoteAddr);
-        
-        String actualPostInvokeRemoteHost = request.getRemoteHost();
-        assertEquals("postInvoke remoteAddr", "remote-host-original-value", 
actualPostInvokeRemoteHost);
-        
-    }
-    
-    public void testInvokeAllProxiesAreTrusted() throws Exception {
-        
-        // PREPARE
-        RemoteIpValve remoteIpValve = new RemoteIpValve();
-        remoteIpValve.setInternalProxies("192\\.168\\.0\\.10, 
192\\.168\\.0\\.11");
-        remoteIpValve.setTrustedProxies("proxy1, proxy2, proxy3");
-        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
-        remoteIpValve.setProxiesHeader("x-forwarded-by");
-        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
-        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
-        
-        Request request = new Request();
-        request.setCoyoteRequest(new org.apache.coyote.Request());
-        request.setRemoteAddr("192.168.0.10");
-        request.setRemoteHost("remote-host-original-value");
-        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("140.211.11.130,
 proxy1, proxy2");
-        
-        // TEST
-        remoteIpValve.invoke(request, null);
-        
-        // VERIFY
-        String actualXForwardedFor = request.getHeader("x-forwarded-for");
-        assertNull("all proxies are trusted, x-forwarded-for must be null", 
actualXForwardedFor);
-        
-        String actualXForwardedBy = request.getHeader("x-forwarded-by");
-        assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1, proxy2", actualXForwardedBy);
-        
-        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
-        assertEquals("remoteAddr", "140.211.11.130", actualRemoteAddr);
-        
-        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
-        assertEquals("remoteHost", "140.211.11.130", actualRemoteHost);
-        
-        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
-        assertEquals("postInvoke remoteAddr", "192.168.0.10", 
actualPostInvokeRemoteAddr);
-        
-        String actualPostInvokeRemoteHost = request.getRemoteHost();
-        assertEquals("postInvoke remoteAddr", "remote-host-original-value", 
actualPostInvokeRemoteHost);
-    }
-    
-    public void testInvokeAllProxiesAreTrustedOrInternal() throws Exception {
-        
-        // PREPARE
-        RemoteIpValve remoteIpValve = new RemoteIpValve();
-        remoteIpValve.setInternalProxies("192\\.168\\.0\\.10, 
192\\.168\\.0\\.11");
-        remoteIpValve.setTrustedProxies("proxy1, proxy2, proxy3");
-        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
-        remoteIpValve.setProxiesHeader("x-forwarded-by");
-        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
-        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
-        
-        Request request = new Request();
-        request.setCoyoteRequest(new org.apache.coyote.Request());
-        request.setRemoteAddr("192.168.0.10");
-        request.setRemoteHost("remote-host-original-value");
-        request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for")
-            .setString("140.211.11.130, proxy1, proxy2, 192.168.0.10, 
192.168.0.11");
-        
-        // TEST
-        remoteIpValve.invoke(request, null);
-        
-        // VERIFY
-        String actualXForwardedFor = request.getHeader("x-forwarded-for");
-        assertNull("all proxies are trusted, x-forwarded-for must be null", 
actualXForwardedFor);
-        
-        String actualXForwardedBy = request.getHeader("x-forwarded-by");
-        assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1, proxy2", actualXForwardedBy);
-        
-        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
-        assertEquals("remoteAddr", "140.211.11.130", actualRemoteAddr);
-        
-        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
-        assertEquals("remoteHost", "140.211.11.130", actualRemoteHost);
-        
-        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
-        assertEquals("postInvoke remoteAddr", "192.168.0.10", 
actualPostInvokeRemoteAddr);
-        
-        String actualPostInvokeRemoteHost = request.getRemoteHost();
-        assertEquals("postInvoke remoteAddr", "remote-host-original-value", 
actualPostInvokeRemoteHost);
-    }
-    
-    public void testInvokeAllProxiesAreInternal() throws Exception {
-        
-        // PREPARE
-        RemoteIpValve remoteIpValve = new RemoteIpValve();
-        remoteIpValve.setInternalProxies("192\\.168\\.0\\.10, 
192\\.168\\.0\\.11");
-        remoteIpValve.setTrustedProxies("proxy1, proxy2, proxy3");
-        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
-        remoteIpValve.setProxiesHeader("x-forwarded-by");
-        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
-        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
-        
-        Request request = new Request();
-        request.setCoyoteRequest(new org.apache.coyote.Request());
-        request.setRemoteAddr("192.168.0.10");
-        request.setRemoteHost("remote-host-original-value");
-        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("140.211.11.130,
 192.168.0.10, 192.168.0.11");
-        
-        // TEST
-        remoteIpValve.invoke(request, null);
-        
-        // VERIFY
-        String actualXForwardedFor = request.getHeader("x-forwarded-for");
-        assertNull("all proxies are internal, x-forwarded-for must be null", 
actualXForwardedFor);
-        
-        String actualXForwardedBy = request.getHeader("x-forwarded-by");
-        assertNull("all proxies are internal, x-forwarded-by must be null", 
actualXForwardedBy);
-        
-        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
-        assertEquals("remoteAddr", "140.211.11.130", actualRemoteAddr);
-        
-        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
-        assertEquals("remoteHost", "140.211.11.130", actualRemoteHost);
-        
-        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
-        assertEquals("postInvoke remoteAddr", "192.168.0.10", 
actualPostInvokeRemoteAddr);
-        
-        String actualPostInvokeRemoteHost = request.getRemoteHost();
-        assertEquals("postInvoke remoteAddr", "remote-host-original-value", 
actualPostInvokeRemoteHost);
-    }
-    
-    public void testInvokeAllProxiesAreTrustedAndRemoteAddrMatchRegexp() 
throws Exception {
-        
-        // PREPARE
-        RemoteIpValve remoteIpValve = new RemoteIpValve();
-        remoteIpValve.setInternalProxies("127\\.0\\.0\\.1, 192\\.168\\..*, 
another-internal-proxy");
-        remoteIpValve.setTrustedProxies("proxy1, proxy2, proxy3");
-        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
-        remoteIpValve.setProxiesHeader("x-forwarded-by");
-        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
-        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
-        
-        Request request = new Request();
-        request.setCoyoteRequest(new org.apache.coyote.Request());
-        request.setRemoteAddr("192.168.0.10");
-        request.setRemoteHost("remote-host-original-value");
-        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("140.211.11.130,
 proxy1, proxy2");
-        
-        // TEST
-        remoteIpValve.invoke(request, null);
-        
-        // VERIFY
-        String actualXForwardedFor = request.getHeader("x-forwarded-for");
-        assertNull("all proxies are trusted, x-forwarded-for must be null", 
actualXForwardedFor);
-        
-        String actualXForwardedBy = request.getHeader("x-forwarded-by");
-        assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1, proxy2", actualXForwardedBy);
-        
-        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
-        assertEquals("remoteAddr", "140.211.11.130", actualRemoteAddr);
-        
-        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
-        assertEquals("remoteHost", "140.211.11.130", actualRemoteHost);
-        
-        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
-        assertEquals("postInvoke remoteAddr", "192.168.0.10", 
actualPostInvokeRemoteAddr);
-        
-        String actualPostInvokeRemoteHost = request.getRemoteHost();
-        assertEquals("postInvoke remoteAddr", "remote-host-original-value", 
actualPostInvokeRemoteHost);
-    }
-    
-    public void testInvokeNotAllowedRemoteAddr() throws Exception {
-        // PREPARE
-        RemoteIpValve remoteIpValve = new RemoteIpValve();
-        remoteIpValve.setInternalProxies("192\\.168\\.0\\.10, 
192\\.168\\.0\\.11");
-        remoteIpValve.setTrustedProxies("proxy1,proxy2,proxy3");
-        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
-        remoteIpValve.setProxiesHeader("x-forwarded-by");
-        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
-        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
-        
-        Request request = new Request();
-        request.setCoyoteRequest(new org.apache.coyote.Request());
-        request.setRemoteAddr("not-allowed-internal-proxy");
-        request.setRemoteHost("not-allowed-internal-proxy-host");
-        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("140.211.11.130,
 proxy1, proxy2");
-        
-        // TEST
-        remoteIpValve.invoke(request, null);
-        
-        // VERIFY
-        String actualXForwardedFor = request.getHeader("x-forwarded-for");
-        assertEquals("x-forwarded-for must be unchanged", "140.211.11.130, 
proxy1, proxy2", actualXForwardedFor);
-        
-        String actualXForwardedBy = request.getHeader("x-forwarded-by");
-        assertNull("x-forwarded-by must be null", actualXForwardedBy);
-        
-        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
-        assertEquals("remoteAddr", "not-allowed-internal-proxy", 
actualRemoteAddr);
-        
-        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
-        assertEquals("remoteHost", "not-allowed-internal-proxy-host", 
actualRemoteHost);
-        
-        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
-        assertEquals("postInvoke remoteAddr", "not-allowed-internal-proxy", 
actualPostInvokeRemoteAddr);
-        
-        String actualPostInvokeRemoteHost = request.getRemoteHost();
-        assertEquals("postInvoke remoteAddr", 
"not-allowed-internal-proxy-host", actualPostInvokeRemoteHost);
-    }
-    
-    public void testInvokeUntrustedProxyInTheChain() throws Exception {
-        // PREPARE
-        RemoteIpValve remoteIpValve = new RemoteIpValve();
-        remoteIpValve.setInternalProxies("192\\.168\\.0\\.10, 
192\\.168\\.0\\.11");
-        remoteIpValve.setTrustedProxies("proxy1, proxy2, proxy3");
-        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
-        remoteIpValve.setProxiesHeader("x-forwarded-by");
-        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
-        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
-        
-        Request request = new Request();
-        request.setCoyoteRequest(new org.apache.coyote.Request());
-        request.setRemoteAddr("192.168.0.10");
-        request.setRemoteHost("remote-host-original-value");
-        request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for")
-            .setString("140.211.11.130, proxy1, untrusted-proxy, proxy2");
-        
-        // TEST
-        remoteIpValve.invoke(request, null);
-        
-        // VERIFY
-        String actualXForwardedFor = request.getHeader("x-forwarded-for");
-        assertEquals("ip/host before untrusted-proxy must appear in 
x-forwarded-for", "140.211.11.130, proxy1", actualXForwardedFor);
-        
-        String actualXForwardedBy = request.getHeader("x-forwarded-by");
-        assertEquals("ip/host after untrusted-proxy must appear in  
x-forwarded-by", "proxy2", actualXForwardedBy);
-        
-        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
-        assertEquals("remoteAddr", "untrusted-proxy", actualRemoteAddr);
-        
-        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
-        assertEquals("remoteHost", "untrusted-proxy", actualRemoteHost);
-        
-        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
-        assertEquals("postInvoke remoteAddr", "192.168.0.10", 
actualPostInvokeRemoteAddr);
-        
-        String actualPostInvokeRemoteHost = request.getRemoteHost();
-        assertEquals("postInvoke remoteAddr", "remote-host-original-value", 
actualPostInvokeRemoteHost);
-    }
-    
-    public void testListToCommaDelimitedString() {
-        String[] actual = 
RemoteIpValve.commaDelimitedListToStringArray("element1, element2, element3");
-        String[] expected = new String[] {
-            "element1", "element2", "element3"
-        };
-        assertArrayEquals(expected, actual);
-    }
-    
-    public void testListToCommaDelimitedStringMixedSpaceChars() {
-        String[] actual = 
RemoteIpValve.commaDelimitedListToStringArray("element1  , element2,\t 
element3");
-        String[] expected = new String[] {
-            "element1", "element2", "element3"
-        };
-        assertArrayEquals(expected, actual);
-    }
-    
-    private void assertArrayEquals(String[] expected, String[] actual) {
-        if (expected == null) {
-            assertNull(actual);
-            return;
-        }
-        assertNotNull(actual);
-        assertEquals(expected.length, actual.length);
-        List<String> e = new ArrayList<String>();
-        e.addAll(Arrays.asList(expected));
-        List<String> a = new ArrayList<String>();
-        a.addAll(Arrays.asList(actual));
-        
-        for (String entry : e) {
-            assertTrue(a.remove(entry));
-        }
-        assertTrue(a.isEmpty());
-    }
-}
+/*
+ * 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.valves;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.servlet.ServletException;
+
+import junit.framework.TestCase;
+
+import org.apache.catalina.connector.Request;
+import org.apache.catalina.connector.Response;
+import org.apache.catalina.valves.ValveBase;
+
+/**
+ * {...@link RemoteIpValve} Tests
+ */
+public class RemoteIpValveTest extends TestCase {
+    
+    static class RemoteAddrAndHostTrackerValve extends ValveBase {
+        private String remoteAddr;
+        private String remoteHost;
+        
+        public String getRemoteAddr() {
+            return remoteAddr;
+        }
+        
+        public String getRemoteHost() {
+            return remoteHost;
+        }
+        
+        @Override
+        public void invoke(Request request, Response response) throws 
IOException, ServletException {
+            this.remoteHost = request.getRemoteHost();
+            this.remoteAddr = request.getRemoteAddr();
+        }
+    }
+    
+    public void testCommaDelimitedListToStringArray() {
+        List<String> elements = Arrays.asList("element1", "element2", 
"element3");
+        String actual = RemoteIpValve.listToCommaDelimitedString(elements);
+        assertEquals("element1, element2, element3", actual);
+    }
+    
+    public void testCommaDelimitedListToStringArrayEmptyList() {
+        List<String> elements = new ArrayList<String>();
+        String actual = RemoteIpValve.listToCommaDelimitedString(elements);
+        assertEquals("", actual);
+    }
+    
+    public void testCommaDelimitedListToStringArrayNullList() {
+        String actual = RemoteIpValve.listToCommaDelimitedString(null);
+        assertEquals("", actual);
+    }
+    
+    public void testInvokeAllowedRemoteAddrWithNullRemoteIpHeader() throws 
Exception {
+        // PREPARE
+        RemoteIpValve remoteIpValve = new RemoteIpValve();
+        remoteIpValve.setInternalProxies("192\\.168\\.0\\.10, 
192\\.168\\.0\\.11");
+        remoteIpValve.setTrustedProxies("proxy1, proxy2, proxy3");
+        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
+        remoteIpValve.setProxiesHeader("x-forwarded-by");
+        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
+        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
+        
+        Request request = new Request();
+        request.setCoyoteRequest(new org.apache.coyote.Request());
+        request.setRemoteAddr("192.168.0.10");
+        request.setRemoteHost("remote-host-original-value");
+        
+        // TEST
+        remoteIpValve.invoke(request, null);
+        
+        // VERIFY
+        String actualXForwardedFor = request.getHeader("x-forwarded-for");
+        assertNull("x-forwarded-for must be null", actualXForwardedFor);
+        
+        String actualXForwardedBy = request.getHeader("x-forwarded-by");
+        assertNull("x-forwarded-by must be null", actualXForwardedBy);
+        
+        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
+        assertEquals("remoteAddr", "192.168.0.10", actualRemoteAddr);
+        
+        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
+        assertEquals("remoteHost", "remote-host-original-value", 
actualRemoteHost);
+        
+        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
+        assertEquals("postInvoke remoteAddr", "192.168.0.10", 
actualPostInvokeRemoteAddr);
+        
+        String actualPostInvokeRemoteHost = request.getRemoteHost();
+        assertEquals("postInvoke remoteAddr", "remote-host-original-value", 
actualPostInvokeRemoteHost);
+        
+    }
+    
+    public void testInvokeAllProxiesAreTrusted() throws Exception {
+        
+        // PREPARE
+        RemoteIpValve remoteIpValve = new RemoteIpValve();
+        remoteIpValve.setInternalProxies("192\\.168\\.0\\.10, 
192\\.168\\.0\\.11");
+        remoteIpValve.setTrustedProxies("proxy1, proxy2, proxy3");
+        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
+        remoteIpValve.setProxiesHeader("x-forwarded-by");
+        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
+        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
+        
+        Request request = new Request();
+        request.setCoyoteRequest(new org.apache.coyote.Request());
+        request.setRemoteAddr("192.168.0.10");
+        request.setRemoteHost("remote-host-original-value");
+        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("140.211.11.130,
 proxy1, proxy2");
+        
+        // TEST
+        remoteIpValve.invoke(request, null);
+        
+        // VERIFY
+        String actualXForwardedFor = request.getHeader("x-forwarded-for");
+        assertNull("all proxies are trusted, x-forwarded-for must be null", 
actualXForwardedFor);
+        
+        String actualXForwardedBy = request.getHeader("x-forwarded-by");
+        assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1, proxy2", actualXForwardedBy);
+        
+        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
+        assertEquals("remoteAddr", "140.211.11.130", actualRemoteAddr);
+        
+        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
+        assertEquals("remoteHost", "140.211.11.130", actualRemoteHost);
+        
+        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
+        assertEquals("postInvoke remoteAddr", "192.168.0.10", 
actualPostInvokeRemoteAddr);
+        
+        String actualPostInvokeRemoteHost = request.getRemoteHost();
+        assertEquals("postInvoke remoteAddr", "remote-host-original-value", 
actualPostInvokeRemoteHost);
+    }
+    
+    public void testInvokeAllProxiesAreTrustedOrInternal() throws Exception {
+        
+        // PREPARE
+        RemoteIpValve remoteIpValve = new RemoteIpValve();
+        remoteIpValve.setInternalProxies("192\\.168\\.0\\.10, 
192\\.168\\.0\\.11");
+        remoteIpValve.setTrustedProxies("proxy1, proxy2, proxy3");
+        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
+        remoteIpValve.setProxiesHeader("x-forwarded-by");
+        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
+        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
+        
+        Request request = new Request();
+        request.setCoyoteRequest(new org.apache.coyote.Request());
+        request.setRemoteAddr("192.168.0.10");
+        request.setRemoteHost("remote-host-original-value");
+        request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for")
+            .setString("140.211.11.130, proxy1, proxy2, 192.168.0.10, 
192.168.0.11");
+        
+        // TEST
+        remoteIpValve.invoke(request, null);
+        
+        // VERIFY
+        String actualXForwardedFor = request.getHeader("x-forwarded-for");
+        assertNull("all proxies are trusted, x-forwarded-for must be null", 
actualXForwardedFor);
+        
+        String actualXForwardedBy = request.getHeader("x-forwarded-by");
+        assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1, proxy2", actualXForwardedBy);
+        
+        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
+        assertEquals("remoteAddr", "140.211.11.130", actualRemoteAddr);
+        
+        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
+        assertEquals("remoteHost", "140.211.11.130", actualRemoteHost);
+        
+        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
+        assertEquals("postInvoke remoteAddr", "192.168.0.10", 
actualPostInvokeRemoteAddr);
+        
+        String actualPostInvokeRemoteHost = request.getRemoteHost();
+        assertEquals("postInvoke remoteAddr", "remote-host-original-value", 
actualPostInvokeRemoteHost);
+    }
+    
+    public void testInvokeAllProxiesAreInternal() throws Exception {
+        
+        // PREPARE
+        RemoteIpValve remoteIpValve = new RemoteIpValve();
+        remoteIpValve.setInternalProxies("192\\.168\\.0\\.10, 
192\\.168\\.0\\.11");
+        remoteIpValve.setTrustedProxies("proxy1, proxy2, proxy3");
+        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
+        remoteIpValve.setProxiesHeader("x-forwarded-by");
+        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
+        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
+        
+        Request request = new Request();
+        request.setCoyoteRequest(new org.apache.coyote.Request());
+        request.setRemoteAddr("192.168.0.10");
+        request.setRemoteHost("remote-host-original-value");
+        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("140.211.11.130,
 192.168.0.10, 192.168.0.11");
+        
+        // TEST
+        remoteIpValve.invoke(request, null);
+        
+        // VERIFY
+        String actualXForwardedFor = request.getHeader("x-forwarded-for");
+        assertNull("all proxies are internal, x-forwarded-for must be null", 
actualXForwardedFor);
+        
+        String actualXForwardedBy = request.getHeader("x-forwarded-by");
+        assertNull("all proxies are internal, x-forwarded-by must be null", 
actualXForwardedBy);
+        
+        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
+        assertEquals("remoteAddr", "140.211.11.130", actualRemoteAddr);
+        
+        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
+        assertEquals("remoteHost", "140.211.11.130", actualRemoteHost);
+        
+        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
+        assertEquals("postInvoke remoteAddr", "192.168.0.10", 
actualPostInvokeRemoteAddr);
+        
+        String actualPostInvokeRemoteHost = request.getRemoteHost();
+        assertEquals("postInvoke remoteAddr", "remote-host-original-value", 
actualPostInvokeRemoteHost);
+    }
+    
+    public void testInvokeAllProxiesAreTrustedAndRemoteAddrMatchRegexp() 
throws Exception {
+        
+        // PREPARE
+        RemoteIpValve remoteIpValve = new RemoteIpValve();
+        remoteIpValve.setInternalProxies("127\\.0\\.0\\.1, 192\\.168\\..*, 
another-internal-proxy");
+        remoteIpValve.setTrustedProxies("proxy1, proxy2, proxy3");
+        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
+        remoteIpValve.setProxiesHeader("x-forwarded-by");
+        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
+        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
+        
+        Request request = new Request();
+        request.setCoyoteRequest(new org.apache.coyote.Request());
+        request.setRemoteAddr("192.168.0.10");
+        request.setRemoteHost("remote-host-original-value");
+        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("140.211.11.130,
 proxy1, proxy2");
+        
+        // TEST
+        remoteIpValve.invoke(request, null);
+        
+        // VERIFY
+        String actualXForwardedFor = request.getHeader("x-forwarded-for");
+        assertNull("all proxies are trusted, x-forwarded-for must be null", 
actualXForwardedFor);
+        
+        String actualXForwardedBy = request.getHeader("x-forwarded-by");
+        assertEquals("all proxies are trusted, they must appear in 
x-forwarded-by", "proxy1, proxy2", actualXForwardedBy);
+        
+        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
+        assertEquals("remoteAddr", "140.211.11.130", actualRemoteAddr);
+        
+        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
+        assertEquals("remoteHost", "140.211.11.130", actualRemoteHost);
+        
+        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
+        assertEquals("postInvoke remoteAddr", "192.168.0.10", 
actualPostInvokeRemoteAddr);
+        
+        String actualPostInvokeRemoteHost = request.getRemoteHost();
+        assertEquals("postInvoke remoteAddr", "remote-host-original-value", 
actualPostInvokeRemoteHost);
+    }
+    
+    public void testInvokeNotAllowedRemoteAddr() throws Exception {
+        // PREPARE
+        RemoteIpValve remoteIpValve = new RemoteIpValve();
+        remoteIpValve.setInternalProxies("192\\.168\\.0\\.10, 
192\\.168\\.0\\.11");
+        remoteIpValve.setTrustedProxies("proxy1,proxy2,proxy3");
+        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
+        remoteIpValve.setProxiesHeader("x-forwarded-by");
+        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
+        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
+        
+        Request request = new Request();
+        request.setCoyoteRequest(new org.apache.coyote.Request());
+        request.setRemoteAddr("not-allowed-internal-proxy");
+        request.setRemoteHost("not-allowed-internal-proxy-host");
+        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("140.211.11.130,
 proxy1, proxy2");
+        
+        // TEST
+        remoteIpValve.invoke(request, null);
+        
+        // VERIFY
+        String actualXForwardedFor = request.getHeader("x-forwarded-for");
+        assertEquals("x-forwarded-for must be unchanged", "140.211.11.130, 
proxy1, proxy2", actualXForwardedFor);
+        
+        String actualXForwardedBy = request.getHeader("x-forwarded-by");
+        assertNull("x-forwarded-by must be null", actualXForwardedBy);
+        
+        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
+        assertEquals("remoteAddr", "not-allowed-internal-proxy", 
actualRemoteAddr);
+        
+        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
+        assertEquals("remoteHost", "not-allowed-internal-proxy-host", 
actualRemoteHost);
+        
+        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
+        assertEquals("postInvoke remoteAddr", "not-allowed-internal-proxy", 
actualPostInvokeRemoteAddr);
+        
+        String actualPostInvokeRemoteHost = request.getRemoteHost();
+        assertEquals("postInvoke remoteAddr", 
"not-allowed-internal-proxy-host", actualPostInvokeRemoteHost);
+    }
+    
+    public void testInvokeUntrustedProxyInTheChain() throws Exception {
+        // PREPARE
+        RemoteIpValve remoteIpValve = new RemoteIpValve();
+        remoteIpValve.setInternalProxies("192\\.168\\.0\\.10, 
192\\.168\\.0\\.11");
+        remoteIpValve.setTrustedProxies("proxy1, proxy2, proxy3");
+        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
+        remoteIpValve.setProxiesHeader("x-forwarded-by");
+        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
+        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
+        
+        Request request = new Request();
+        request.setCoyoteRequest(new org.apache.coyote.Request());
+        request.setRemoteAddr("192.168.0.10");
+        request.setRemoteHost("remote-host-original-value");
+        request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for")
+            .setString("140.211.11.130, proxy1, untrusted-proxy, proxy2");
+        
+        // TEST
+        remoteIpValve.invoke(request, null);
+        
+        // VERIFY
+        String actualXForwardedFor = request.getHeader("x-forwarded-for");
+        assertEquals("ip/host before untrusted-proxy must appear in 
x-forwarded-for", "140.211.11.130, proxy1", actualXForwardedFor);
+        
+        String actualXForwardedBy = request.getHeader("x-forwarded-by");
+        assertEquals("ip/host after untrusted-proxy must appear in  
x-forwarded-by", "proxy2", actualXForwardedBy);
+        
+        String actualRemoteAddr = 
remoteAddrAndHostTrackerValve.getRemoteAddr();
+        assertEquals("remoteAddr", "untrusted-proxy", actualRemoteAddr);
+        
+        String actualRemoteHost = 
remoteAddrAndHostTrackerValve.getRemoteHost();
+        assertEquals("remoteHost", "untrusted-proxy", actualRemoteHost);
+        
+        String actualPostInvokeRemoteAddr = request.getRemoteAddr();
+        assertEquals("postInvoke remoteAddr", "192.168.0.10", 
actualPostInvokeRemoteAddr);
+        
+        String actualPostInvokeRemoteHost = request.getRemoteHost();
+        assertEquals("postInvoke remoteAddr", "remote-host-original-value", 
actualPostInvokeRemoteHost);
+    }
+    
+    public void testListToCommaDelimitedString() {
+        String[] actual = 
RemoteIpValve.commaDelimitedListToStringArray("element1, element2, element3");
+        String[] expected = new String[] {
+            "element1", "element2", "element3"
+        };
+        assertArrayEquals(expected, actual);
+    }
+    
+    public void testListToCommaDelimitedStringMixedSpaceChars() {
+        String[] actual = 
RemoteIpValve.commaDelimitedListToStringArray("element1  , element2,\t 
element3");
+        String[] expected = new String[] {
+            "element1", "element2", "element3"
+        };
+        assertArrayEquals(expected, actual);
+    }
+    
+    private void assertArrayEquals(String[] expected, String[] actual) {
+        if (expected == null) {
+            assertNull(actual);
+            return;
+        }
+        assertNotNull(actual);
+        assertEquals(expected.length, actual.length);
+        List<String> e = new ArrayList<String>();
+        e.addAll(Arrays.asList(expected));
+        List<String> a = new ArrayList<String>();
+        a.addAll(Arrays.asList(actual));
+        
+        for (String entry : e) {
+            assertTrue(a.remove(entry));
+        }
+        assertTrue(a.isEmpty());
+    }
+}

Propchange: tomcat/trunk/test/org/apache/catalina/valves/RemoteIpValveTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tomcat/trunk/test/org/apache/tomcat/util/http/CookiesBaseTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowEquals.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesDefaultSysProps.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesDisallowEquals.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesNoFwdStrictSysProps.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesNoStrictNamingSysProps.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesStrictSysProps.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesSwitchSysProps.java
------------------------------------------------------------------------------
    svn:eol-style = native



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

Reply via email to