1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* Licensed to the Apache Software Foundation (ASF) under one or more
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements.  See the NOTICE file distributed with
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership.
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License.  You may obtain a copy of the License at
7fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes *
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
9fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes *
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License.
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.net;
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.InetSocketAddress;
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.NetPermission;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.Proxy;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.ProxySelector;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.SocketAddress;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.SocketException;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URI;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URISyntaxException;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Permission;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.List;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Properties;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class ProxySelectorTest extends TestCase {
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static final String HTTP_PROXY_HOST = "127.0.0.1";
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static final int HTTP_PROXY_PORT = 80;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static final String HTTPS_PROXY_HOST = "127.0.0.2";
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static final int HTTPS_PROXY_PORT = 443;
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static final String FTP_PROXY_HOST = "127.0.0.3";
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static final int FTP_PROXY_PORT = 80;
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static final String SOCKS_PROXY_HOST = "127.0.0.4";
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static final int SOCKS_PROXY_PORT = 1080;
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static URI httpUri;
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static URI ftpUri;
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static URI httpsUri;
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static URI tcpUri;
58fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private List proxyList;
60fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private ProxySelector selector = ProxySelector.getDefault();
62fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	static {
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			httpUri = new URI("http://test.com");
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			ftpUri = new URI("ftp://test.com");
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			httpsUri = new URI("https://test.com");
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			tcpUri = new URI("socket://host.com");
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (URISyntaxException e) {
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Original system properties must be restored after running each test case.
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private Properties originalSystemProperties;
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#getDefault()
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getDefault() {
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ProxySelector selector1 = ProxySelector.getDefault();
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNotNull(selector1);
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ProxySelector selector2 = ProxySelector.getDefault();
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertSame(selector1, selector2);
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#setDefault(ProxySelector)}
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_setDefaultLjava_net_ProxySelector() {
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ProxySelector originalSelector = ProxySelector.getDefault();
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			ProxySelector newSelector = new MockProxySelector();
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			ProxySelector.setDefault(newSelector);
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertSame(newSelector, ProxySelector.getDefault());
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// use null to unset
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			ProxySelector.setDefault(null);
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertSame(null, ProxySelector.getDefault());
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} finally {
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			ProxySelector.setDefault(originalSelector);
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_selectLjava_net_URI_SelectExact()
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// no proxy, return a proxyList only contains NO_PROXY
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(httpUri);
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.NO_PROXY);
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set http proxy
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyHost", HTTP_PROXY_HOST);
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyPort", String.valueOf(HTTP_PROXY_PORT));
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set https proxy
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyHost", HTTPS_PROXY_HOST);
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyPort", String.valueOf(HTTPS_PROXY_PORT));
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set ftp proxy
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyHost", FTP_PROXY_HOST);
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyPort", String.valueOf(FTP_PROXY_PORT));
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set socks proxy
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("socksProxyHost", SOCKS_PROXY_HOST);
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("socksProxyPort", String.valueOf(SOCKS_PROXY_PORT));
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(httpUri);
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.HTTP,HTTP_PROXY_HOST,HTTP_PROXY_PORT);
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(httpsUri);
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.HTTP,HTTPS_PROXY_HOST,HTTPS_PROXY_PORT);
134fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(ftpUri);
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.HTTP,FTP_PROXY_HOST,FTP_PROXY_PORT);
137fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(tcpUri);
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.SOCKS,SOCKS_PROXY_HOST,SOCKS_PROXY_PORT);
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
142fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.ProxySelector#select(URI)
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_selectLjava_net_URI_SelectExact_NullHost()
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws URISyntaxException {
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // regression test for Harmony-1063
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        httpUri = new URI("http://a@");
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ftpUri = new URI("ftp://a@");
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        httpsUri = new URI("https://a@");
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        tcpUri = new URI("socket://a@");
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // no proxy, return a proxyList only contains NO_PROXY
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        proxyList = selector.select(httpUri);
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertProxyEquals(proxyList, Proxy.NO_PROXY);
156fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // set http proxy
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("http.proxyHost", HTTP_PROXY_HOST);
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("http.proxyPort", String.valueOf(HTTP_PROXY_PORT));
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // set https proxy
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("https.proxyHost", HTTPS_PROXY_HOST);
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("https.proxyPort", String.valueOf(HTTPS_PROXY_PORT));
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // set ftp proxy
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("ftp.proxyHost", FTP_PROXY_HOST);
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("ftp.proxyPort", String.valueOf(FTP_PROXY_PORT));
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // set socks proxy
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("socksProxyHost", SOCKS_PROXY_HOST);
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("socksProxyPort", String.valueOf(SOCKS_PROXY_PORT));
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        proxyList = selector.select(httpUri);
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertProxyEquals(proxyList, Proxy.Type.HTTP, HTTP_PROXY_HOST,
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                HTTP_PROXY_PORT);
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        proxyList = selector.select(httpsUri);
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertProxyEquals(proxyList, Proxy.Type.HTTP, HTTPS_PROXY_HOST,
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                HTTPS_PROXY_PORT);
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        proxyList = selector.select(ftpUri);
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertProxyEquals(proxyList, Proxy.Type.HTTP, FTP_PROXY_HOST,
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                FTP_PROXY_PORT);
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        proxyList = selector.select(tcpUri);
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertProxyEquals(proxyList, Proxy.Type.SOCKS, SOCKS_PROXY_HOST,
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SOCKS_PROXY_PORT);
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
187fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //Regression for HARMONY-4281
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_selectLjava_net_URI_SelectExact_NullHost_withNoProxyHostsProperty(){
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("http.nonProxyHosts", "localhost|127.0.0.1");
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("http.proxyHost", HTTP_PROXY_HOST);
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("http.proxyPort", String.valueOf(HTTP_PROXY_PORT));
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // set https proxy
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("https.proxyHost", HTTPS_PROXY_HOST);
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("https.proxyPort", String.valueOf(HTTPS_PROXY_PORT));
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // set ftp proxy
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("ftp.proxyHost", FTP_PROXY_HOST);
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("ftp.proxyPort", String.valueOf(FTP_PROXY_PORT));
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // set socks proxy
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("socksProxyHost", SOCKS_PROXY_HOST);
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("socksProxyPort", String.valueOf(SOCKS_PROXY_PORT));
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        proxyList = selector.select(httpUri);
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertProxyEquals(proxyList, Proxy.Type.HTTP, HTTP_PROXY_HOST,
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                HTTP_PROXY_PORT);
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_selectLjava_net_URI_SelectExact_DefaultPort()
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set http proxy
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyHost", HTTP_PROXY_HOST);
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set https proxy
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyHost", HTTPS_PROXY_HOST);
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set ftp proxy
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyHost", FTP_PROXY_HOST);
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set socks proxy
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("socksProxyHost", SOCKS_PROXY_HOST);
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(httpUri);
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.HTTP,HTTP_PROXY_HOST,HTTP_PROXY_PORT);
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(httpsUri);
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.HTTP,HTTPS_PROXY_HOST,HTTPS_PROXY_PORT);
228fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(ftpUri);
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.HTTP,FTP_PROXY_HOST,FTP_PROXY_PORT);
231fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(tcpUri);
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.SOCKS,SOCKS_PROXY_HOST,SOCKS_PROXY_PORT);
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_selectLjava_net_URI_SelectExact_InvalidPort()
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		final String INVALID_PORT = "abc";
243fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set http proxy
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyHost", HTTP_PROXY_HOST);
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyPort", INVALID_PORT);
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set https proxy
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyHost", HTTPS_PROXY_HOST);
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyPort", INVALID_PORT);
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set ftp proxy
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyHost", FTP_PROXY_HOST);
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyPort", INVALID_PORT);
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set socks proxy
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("socksProxyHost", SOCKS_PROXY_HOST);
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("socksproxyPort", INVALID_PORT);
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(httpUri);
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.HTTP,HTTP_PROXY_HOST,HTTP_PROXY_PORT);
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(httpsUri);
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.HTTP,HTTPS_PROXY_HOST,HTTPS_PROXY_PORT);
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(ftpUri);
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.HTTP,FTP_PROXY_HOST,FTP_PROXY_PORT);
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(tcpUri);
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.SOCKS,SOCKS_PROXY_HOST,SOCKS_PROXY_PORT);
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
273fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes	// RI may fail this test case.
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	// Uncomment this test case when regex.jar is ready.
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_selectLjava_net_URI_Select_NonProxyHosts()
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
278fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes		// RI's bug. Some RIs may fail this test case.
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		URI[] httpUris = { new URI("http://test.com"),
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				new URI("http://10.10.1.2"), new URI("http://a"),
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				new URI("http://def.abc.com") };
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		URI[] ftpUris = { new URI("ftp://test.com"),
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				new URI("ftp://10.10.1.2"), new URI("ftp://a"),
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				new URI("ftp://def.abc.com") };
285fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set http proxy
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyHost", HTTP_PROXY_HOST);
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.nonProxyHosts", "a|b|tes*|10.10.*|*.abc.com");
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set ftp proxy
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyHost", FTP_PROXY_HOST);
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.nonProxyHosts", "a|b|tes*|10.10.*|*.abc.com");
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < httpUris.length; i++) {
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			proxyList = selector.select(httpUris[i]);
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertProxyEquals(proxyList,Proxy.NO_PROXY);
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < ftpUris.length; i++) {
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			proxyList = selector.select(ftpUris[i]);
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertProxyEquals(proxyList,Proxy.NO_PROXY);
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}*/
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_selectLjava_net_URI_SelectLikeHTTP()
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyHost", "");
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set https proxy
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyHost", HTTPS_PROXY_HOST);
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyPort", String.valueOf(HTTPS_PROXY_PORT));
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set ftp proxy
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyHost", FTP_PROXY_HOST);
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyPort", String.valueOf(FTP_PROXY_PORT));
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set socks proxy
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("socksProxyHost", SOCKS_PROXY_HOST);
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("socksProxyPort", String.valueOf(SOCKS_PROXY_PORT));
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(httpUri);
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.SOCKS,SOCKS_PROXY_HOST,SOCKS_PROXY_PORT);
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_selectLjava_net_URI_SelectNoHTTP()
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set https proxy
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyHost", HTTPS_PROXY_HOST);
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyPort", String.valueOf(HTTPS_PROXY_PORT));
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set ftp proxy
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyHost", FTP_PROXY_HOST);
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyPort", String.valueOf(FTP_PROXY_PORT));
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(httpUri);
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.NO_PROXY);
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_selectLjava_net_URI_SelectLikeHTTPS()
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set http proxy
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyHost", HTTP_PROXY_HOST);
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyPort", String.valueOf(HTTP_PROXY_PORT));
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set https proxy host empty
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyHost", "");
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set ftp proxy
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyHost", FTP_PROXY_HOST);
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyPort", String.valueOf(FTP_PROXY_PORT));
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set socks proxy
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("socksProxyHost", SOCKS_PROXY_HOST);
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("socksProxyPort", String.valueOf(SOCKS_PROXY_PORT));
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(httpsUri);
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.SOCKS,SOCKS_PROXY_HOST,SOCKS_PROXY_PORT);
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_selectLjava_net_URI_SelectNoHTTPS()
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set https proxy
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyHost", HTTP_PROXY_HOST);
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyPort", String.valueOf(HTTP_PROXY_PORT));
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set ftp proxy
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyHost", FTP_PROXY_HOST);
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyPort", String.valueOf(FTP_PROXY_PORT));
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(httpsUri);
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.NO_PROXY);
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_selectLjava_net_URI_SelectLikeFTP()
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set http proxy
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyHost", HTTP_PROXY_HOST);
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyPort", String.valueOf(HTTP_PROXY_PORT));
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set ftp host empty
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyHost", "");
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set https proxy
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyHost", HTTPS_PROXY_HOST);
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyPort", String.valueOf(HTTPS_PROXY_PORT));
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set socks proxy
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("socksProxyHost", SOCKS_PROXY_HOST);
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("socksProxyPort", String.valueOf(SOCKS_PROXY_PORT));
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(ftpUri);
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.Type.SOCKS,SOCKS_PROXY_HOST,SOCKS_PROXY_PORT);
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_selectLjava_net_URI_SelectNoFTP()
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set http proxy
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyHost", HTTP_PROXY_HOST);
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyPort", String.valueOf(HTTP_PROXY_PORT));
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set https proxy
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyHost", HTTPS_PROXY_HOST);
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyPort", String.valueOf(HTTPS_PROXY_PORT));
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(ftpUri);
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.NO_PROXY);
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_selectLjava_net_URI_SelectNoSOCKS()
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set http proxy
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyHost", HTTP_PROXY_HOST);
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyPort", String.valueOf(HTTP_PROXY_PORT));
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set https proxy
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyHost", HTTPS_PROXY_HOST);
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyPort", String.valueOf(HTTPS_PROXY_PORT));
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set socks proxy
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyHost", FTP_PROXY_HOST);
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyPort", String.valueOf(FTP_PROXY_PORT));
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		proxyList = selector.select(tcpUri);
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(proxyList,Proxy.NO_PROXY);
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_connectionFailedLjava_net_URILjava_net_SocketAddressLjava_io_IOException()
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set http proxy
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyHost", HTTP_PROXY_HOST);
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("http.proxyPort", String.valueOf(HTTP_PROXY_PORT));
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set https proxy
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyHost", HTTPS_PROXY_HOST);
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("https.proxyPort", String.valueOf(HTTPS_PROXY_PORT));
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set ftp proxy
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyHost", FTP_PROXY_HOST);
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("ftp.proxyPort", String.valueOf(FTP_PROXY_PORT));
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// set socks proxy
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("socksProxyHost", SOCKS_PROXY_HOST);
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperty("socksProxyPort", String.valueOf(SOCKS_PROXY_PORT));
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		List proxyList1 = selector.select(httpUri);
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNotNull(proxyList1);
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals(1, proxyList1.size());
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Proxy proxy1 = (Proxy) proxyList1.get(0);
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		selector
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				.connectFailed(httpUri, proxy1.address(), new SocketException());
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		List proxyList2 = selector.select(httpUri);
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNotNull(proxyList2);
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals(1, proxyList2.size());
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Proxy proxy2 = (Proxy) proxyList2.get(0);
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Default implementation doesn't change the proxy list
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals(proxy1, proxy2);
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_connectionFailedLjava_net_URILjava_net_SocketAddressLjava_io_IOException_IllegalArguement()
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		SocketAddress sa = InetSocketAddress.createUnresolved("127.0.0.1", 0);
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			selector.connectFailed(null, sa, new SocketException());
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("should throw IllegalArgumentException if any argument is null.");
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IllegalArgumentException e) {
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// expected
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			selector.connectFailed(httpUri, null, new SocketException());
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("should throw IllegalArgumentException if any argument is null.");
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IllegalArgumentException e) {
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// expected
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			selector.connectFailed(httpUri, sa, null);
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("should throw IllegalArgumentException if any argument is null.");
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IllegalArgumentException e) {
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// expected
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.ProxySelector#select(URI)
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_selectLjava_net_URI_IllegalArgument()
497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			throws URISyntaxException {
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		URI[] illegalUris = { new URI("abc"), new URI("http"), null };
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < illegalUris.length; i++) {
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			try {
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				selector.select(illegalUris[i]);
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				fail("should throw IllegalArgumentException");
503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			} catch (IllegalArgumentException e) {
504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				// expected
505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * asserts whether selectedProxyList contains one and only one element,
511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * and the element equals proxy.
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private void assertProxyEquals(List selectedProxyList, Proxy proxy) {
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNotNull(selectedProxyList);
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals(1, selectedProxyList.size());
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertEquals((Proxy) selectedProxyList.get(0), proxy);
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
518fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * asserts whether selectedProxyList contains one and only one element,
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * and the element equals proxy which is represented by arguments "type",
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * "host","port".
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private void assertProxyEquals(List selectedProxyList, Proxy.Type type,
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			String host, int port) {
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		SocketAddress sa = InetSocketAddress.createUnresolved(host, port);
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Proxy proxy = new Proxy(type, sa);
528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertProxyEquals(selectedProxyList, proxy);
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
530fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Mock selector for setDefault test
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	static class MockProxySelector extends ProxySelector {
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		public List <Proxy> select(URI uri) {
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			return null;
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @see junit.framework.TestCase#setUp()
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void setUp() throws Exception {
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		super.setUp();
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// save original system properties
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		originalSystemProperties = (Properties) System.getProperties().clone();
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/*
555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @see junit.framework.TestCase#tearDown()
556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void tearDown() throws Exception {
558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// restore original system properties
559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		System.setProperties(originalSystemProperties);
560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		super.tearDown();
561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
563