ProxySelectorTest.java revision 3b0348d1081a4645aa38da97ee299fadc040c1b4
1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package libcore.java.net; 18 19import static java.net.InetSocketAddress.createUnresolved; 20import java.net.Proxy; 21import java.net.ProxySelector; 22import java.net.URI; 23import java.net.URISyntaxException; 24import java.util.Arrays; 25import junit.framework.TestCase; 26 27public final class ProxySelectorTest extends TestCase { 28 29 private ProxySelector proxySelector; 30 31 private URI httpUri; 32 private URI ftpUri; 33 private URI httpsUri; 34 private URI socketUri; 35 private URI otherUri; 36 37 protected void setUp() throws Exception { 38 super.setUp(); 39 proxySelector = ProxySelector.getDefault(); 40 httpUri = new URI("http://android.com"); 41 ftpUri = new URI("ftp://android.com"); 42 httpsUri = new URI("https://android.com"); 43 socketUri = new URI("socket://android.com"); 44 otherUri = new URI("other://android.com"); 45 } 46 47 @Override protected void tearDown() throws Exception { 48 System.clearProperty("ftp.proxyHost"); 49 System.clearProperty("ftp.proxyPort"); 50 System.clearProperty("ftp.nonProxyHosts"); 51 System.clearProperty("http.proxyHost"); 52 System.clearProperty("http.proxyPort"); 53 System.clearProperty("http.nonProxyHosts"); 54 System.clearProperty("https.proxyHost"); 55 System.clearProperty("https.proxyPort"); 56 System.clearProperty("https.nonProxyHosts"); 57 System.clearProperty("other.proxyHost"); 58 System.clearProperty("other.proxyPort"); 59 System.clearProperty("socket.proxyHost"); 60 System.clearProperty("socket.proxyPort"); 61 System.clearProperty("proxyHost"); 62 System.clearProperty("proxyPort"); 63 } 64 65 public void testNoProxySystemProperty() throws URISyntaxException { 66 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(ftpUri)); 67 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpUri)); 68 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpsUri)); 69 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri)); 70 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); 71 } 72 73 public void testProxyHostOnly() throws URISyntaxException { 74 System.setProperty("ftp.proxyHost", "a"); 75 System.setProperty("http.proxyHost", "b"); 76 System.setProperty("https.proxyHost", "c"); 77 System.setProperty("other.proxyHost", "d"); 78 System.setProperty("socket.proxyHost", "d"); 79 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), 80 proxySelector.select(ftpUri)); 81 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("b", 80))), 82 proxySelector.select(httpUri)); 83 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("c", 443))), 84 proxySelector.select(httpsUri)); 85 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); 86 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri)); 87 } 88 89 public void testProxyHostPort() throws URISyntaxException { 90 System.setProperty("ftp.proxyHost", "a"); 91 System.setProperty("ftp.proxyPort", "1001"); 92 System.setProperty("http.proxyHost", "b"); 93 System.setProperty("http.proxyPort", "1002"); 94 System.setProperty("https.proxyHost", "c"); 95 System.setProperty("https.proxyPort", "1003"); 96 System.setProperty("other.proxyHost", "d"); 97 System.setProperty("other.proxyPort", "1004"); 98 System.setProperty("socket.proxyHost", "e"); 99 System.setProperty("socket.proxyPort", "1005"); 100 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 1001))), 101 proxySelector.select(ftpUri)); 102 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("b", 1002))), 103 proxySelector.select(httpUri)); 104 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("c", 1003))), 105 proxySelector.select(httpsUri)); 106 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri)); 107 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); 108 } 109 110 public void testProxyPortOnly() throws URISyntaxException { 111 System.setProperty("ftp.proxyPort", "1001"); 112 System.setProperty("http.proxyPort", "1002"); 113 System.setProperty("https.proxyPort", "1003"); 114 System.setProperty("other.proxyPort", "1004"); 115 System.setProperty("socket.proxyPort", "1005"); 116 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(ftpUri)); 117 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpUri)); 118 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpsUri)); 119 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri)); 120 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); 121 } 122 123 public void testHttpsDoesNotUseHttpProperties() throws URISyntaxException { 124 System.setProperty("http.proxyHost", "a"); 125 System.setProperty("http.proxyPort", "1001"); 126 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(httpsUri)); 127 } 128 129 public void testProxyHost() throws URISyntaxException { 130 System.setProperty("proxyHost", "a"); 131 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), 132 proxySelector.select(ftpUri)); 133 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), 134 proxySelector.select(httpUri)); 135 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 443))), 136 proxySelector.select(httpsUri)); 137 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(socketUri)); 138 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); 139 } 140 141 public void testHttpProxyHostPreferredOverProxyHost() throws URISyntaxException { 142 System.setProperty("http.proxyHost", "a"); 143 System.setProperty("proxyHost", "b"); 144 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), 145 proxySelector.select(httpUri)); 146 } 147 148 public void testSocksProxyHost() throws URISyntaxException { 149 System.setProperty("socksProxyHost", "a"); 150 assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1080))), 151 proxySelector.select(ftpUri)); 152 assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1080))), 153 proxySelector.select(httpUri)); 154 assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1080))), 155 proxySelector.select(httpsUri)); 156 assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1080))), 157 proxySelector.select(socketUri)); 158 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); 159 } 160 161 public void testSocksProxyHostAndPort() throws URISyntaxException { 162 System.setProperty("socksProxyHost", "a"); 163 System.setProperty("socksProxyPort", "1001"); 164 assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1001))), 165 proxySelector.select(ftpUri)); 166 assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1001))), 167 proxySelector.select(httpUri)); 168 assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1001))), 169 proxySelector.select(httpsUri)); 170 assertEquals(Arrays.asList(new Proxy(Proxy.Type.SOCKS, createUnresolved("a", 1001))), 171 proxySelector.select(socketUri)); 172 assertEquals(Arrays.asList(Proxy.NO_PROXY), proxySelector.select(otherUri)); 173 } 174 175 public void testNonProxyHostsFtp() throws URISyntaxException { 176 System.setProperty("ftp.nonProxyHosts", "*.com"); 177 System.setProperty("ftp.proxyHost", "a"); 178 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), 179 proxySelector.select(new URI("ftp://foo.net"))); 180 assertEquals(Arrays.asList(Proxy.NO_PROXY), 181 proxySelector.select(new URI("ftp://foo.com"))); 182 } 183 184 public void testNonProxyHostsHttp() throws URISyntaxException { 185 System.setProperty("http.nonProxyHosts", "*.com"); 186 System.setProperty("http.proxyHost", "a"); 187 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), 188 proxySelector.select(new URI("http://foo.net"))); 189 assertEquals(Arrays.asList(Proxy.NO_PROXY), 190 proxySelector.select(new URI("http://foo.com"))); 191 } 192 193 public void testNonProxyHostsHttps() throws URISyntaxException { 194 System.setProperty("https.nonProxyHosts", "*.com"); 195 System.setProperty("https.proxyHost", "a"); 196 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 443))), 197 proxySelector.select(new URI("https://foo.net"))); 198 assertEquals(Arrays.asList(Proxy.NO_PROXY), 199 proxySelector.select(new URI("https://foo.com"))); 200 } 201 202 public void testSchemeCaseSensitive() throws URISyntaxException { 203 System.setProperty("http.proxyHost", "a"); 204 assertEquals(Arrays.asList(new Proxy(Proxy.Type.HTTP, createUnresolved("a", 80))), 205 proxySelector.select(new URI("HTTP://foo.net"))); 206 } 207} 208