EMMA Coverage Report (generated Fri Aug 23 16:39:17 PDT 2013)
[all classes][org.chromium.net]

COVERAGE SUMMARY FOR SOURCE FILE [AndroidProxySelectorTest.java]

nameclass, %method, %block, %line, %
AndroidProxySelectorTest.java100% (2/2)100% (21/21)95%  (371/391)96%  (105.9/110)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class AndroidProxySelectorTest$1100% (1/1)100% (1/1)88%  (23/26)88%  (0.9/1)
<static initializer> 100% (1/1)88%  (23/26)88%  (0.9/1)
     
class AndroidProxySelectorTest100% (1/1)100% (20/20)95%  (348/365)96%  (106/110)
toString (Proxy): String 100% (1/1)73%  (35/48)67%  (6/9)
toString (List): String 100% (1/1)87%  (26/30)83%  (5/6)
AndroidProxySelectorTest (): void 100% (1/1)100% (8/8)100% (3/3)
checkMapping (String, String): void 100% (1/1)100% (15/15)100% (4/4)
setUp (): void 100% (1/1)100% (4/4)100% (2/2)
testDefaultProxyExplictPort (): void 100% (1/1)100% (26/26)100% (8/8)
testFallbackToSocks (): void 100% (1/1)100% (18/18)100% (6/6)
testFtpNonProxyHosts (): void 100% (1/1)100% (19/19)100% (6/6)
testFtpProxyHostAndPort (): void 100% (1/1)100% (18/18)100% (6/6)
testFtpProxyHostOnly (): void 100% (1/1)100% (14/14)100% (5/5)
testHttpNonProxyHosts1 (): void 100% (1/1)100% (19/19)100% (6/6)
testHttpNonProxyHosts2 (): void 100% (1/1)100% (22/22)100% (7/7)
testHttpNonProxyHosts3 (): void 100% (1/1)100% (22/22)100% (7/7)
testHttpProxyHostAndPort (): void 100% (1/1)100% (18/18)100% (6/6)
testHttpProxyHostOnly (): void 100% (1/1)100% (14/14)100% (5/5)
testHttpProxyPortOnly (): void 100% (1/1)100% (14/14)100% (5/5)
testHttpProxySupercedesSocks (): void 100% (1/1)100% (16/16)100% (5/5)
testHttpsProxyHostAndPort (): void 100% (1/1)100% (18/18)100% (6/6)
testNoProxy (): void 100% (1/1)100% (10/10)100% (4/4)
testSocksExplicitPort (): void 100% (1/1)100% (12/12)100% (4/4)

1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4 
5/**
6 * Test suite for Android's default ProxySelector implementation. The purpose of these tests
7 * is to check that the behaviour of the ProxySelector implementation matches what we have
8 * implemented in net/proxy/proxy_config_service_android.cc.
9 *
10 * IMPORTANT: These test cases are generated from net/android/tools/proxy_test_cases.py, so if any
11 * of these tests fail, please be sure to edit that file and regenerate the test cases here and also
12 * in net/proxy/proxy_config_service_android_unittests.cc if required.
13 */
14 
15package org.chromium.net;
16 
17import android.test.InstrumentationTestCase;
18import android.test.suitebuilder.annotation.SmallTest;
19 
20import java.net.Proxy;
21import java.net.ProxySelector;
22import java.net.URI;
23import java.net.URISyntaxException;
24import java.util.List;
25import java.util.Properties;
26 
27import org.chromium.base.test.util.Feature;
28 
29public class AndroidProxySelectorTest extends InstrumentationTestCase {
30    Properties mProperties;
31 
32    public AndroidProxySelectorTest() {
33        // Start with a clean slate in case there is a system proxy configured.
34        mProperties = new Properties();
35    }
36 
37    @Override
38    public void setUp() {
39        System.setProperties(mProperties);
40    }
41 
42    static String toString(Proxy proxy) {
43        if (proxy == Proxy.NO_PROXY)
44            return "DIRECT";
45        // java.net.Proxy only knows about http and socks proxies.
46        Proxy.Type type = proxy.type();
47        switch (type) {
48        case HTTP: return "PROXY " + proxy.address().toString();
49        case SOCKS: return "SOCKS5 " + proxy.address().toString();
50        case DIRECT: return "DIRECT";
51        default:
52            // If a new proxy type is supported in future, add a case to match it.
53            fail("Unknown proxy type" + type);
54            return "unknown://";
55        }
56    }
57 
58    static String toString(List<Proxy> proxies) {
59        StringBuilder builder = new StringBuilder();
60        for (Proxy proxy : proxies) {
61            if (builder.length() > 0)
62                builder.append(';');
63            builder.append(toString(proxy));
64        }
65        return builder.toString();
66   }
67 
68    static void checkMapping(String url, String expected) throws URISyntaxException {
69        URI uri = new URI(url);
70        List<Proxy> proxies = ProxySelector.getDefault().select(uri);
71        assertEquals("Mapping", expected, toString(proxies));
72    }
73 
74    /**
75     * Test direct mapping when no proxy defined.
76     *
77     * @throws Exception
78     */
79    @SmallTest
80    @Feature({"AndroidWebView"})
81    public void testNoProxy() throws Exception {
82        checkMapping("ftp://example.com/", "DIRECT");
83        checkMapping("http://example.com/", "DIRECT");
84        checkMapping("https://example.com/", "DIRECT");
85    }
86 
87    /**
88     * Test http.proxyHost and http.proxyPort works.
89     *
90     * @throws Exception
91     */
92    @SmallTest
93    @Feature({"AndroidWebView"})
94    public void testHttpProxyHostAndPort() throws Exception {
95        System.setProperty("http.proxyHost", "httpproxy.com");
96        System.setProperty("http.proxyPort", "8080");
97        checkMapping("ftp://example.com/", "DIRECT");
98        checkMapping("http://example.com/", "PROXY httpproxy.com:8080");
99        checkMapping("https://example.com/", "DIRECT");
100    }
101 
102    /**
103     * We should get the default port (80) for proxied hosts.
104     *
105     * @throws Exception
106     */
107    @SmallTest
108    @Feature({"AndroidWebView"})
109    public void testHttpProxyHostOnly() throws Exception {
110        System.setProperty("http.proxyHost", "httpproxy.com");
111        checkMapping("ftp://example.com/", "DIRECT");
112        checkMapping("http://example.com/", "PROXY httpproxy.com:80");
113        checkMapping("https://example.com/", "DIRECT");
114    }
115 
116    /**
117     * http.proxyPort only should not result in any hosts being proxied.
118     *
119     * @throws Exception
120     */
121    @SmallTest
122    @Feature({"AndroidWebView"})
123    public void testHttpProxyPortOnly() throws Exception {
124        System.setProperty("http.proxyPort", "8080");
125        checkMapping("ftp://example.com/", "DIRECT");
126        checkMapping("http://example.com/", "DIRECT");
127        checkMapping("https://example.com/", "DIRECT");
128    }
129 
130    /**
131     * Test that HTTP non proxy hosts are mapped correctly
132     *
133     * @throws Exception
134     */
135    @SmallTest
136    @Feature({"AndroidWebView"})
137    public void testHttpNonProxyHosts1() throws Exception {
138        System.setProperty("http.nonProxyHosts", "slashdot.org");
139        System.setProperty("http.proxyHost", "httpproxy.com");
140        System.setProperty("http.proxyPort", "8080");
141        checkMapping("http://example.com/", "PROXY httpproxy.com:8080");
142        checkMapping("http://slashdot.org/", "DIRECT");
143    }
144 
145    /**
146     * Test that | pattern works.
147     *
148     * @throws Exception
149     */
150    @SmallTest
151    @Feature({"AndroidWebView"})
152    public void testHttpNonProxyHosts2() throws Exception {
153        System.setProperty("http.nonProxyHosts", "slashdot.org|freecode.net");
154        System.setProperty("http.proxyHost", "httpproxy.com");
155        System.setProperty("http.proxyPort", "8080");
156        checkMapping("http://example.com/", "PROXY httpproxy.com:8080");
157        checkMapping("http://freecode.net/", "DIRECT");
158        checkMapping("http://slashdot.org/", "DIRECT");
159    }
160 
161    /**
162     * Test that * pattern works.
163     *
164     * @throws Exception
165     */
166    @SmallTest
167    @Feature({"AndroidWebView"})
168    public void testHttpNonProxyHosts3() throws Exception {
169        System.setProperty("http.nonProxyHosts", "*example.com");
170        System.setProperty("http.proxyHost", "httpproxy.com");
171        System.setProperty("http.proxyPort", "8080");
172        checkMapping("http://example.com/", "DIRECT");
173        checkMapping("http://slashdot.org/", "PROXY httpproxy.com:8080");
174        checkMapping("http://www.example.com/", "DIRECT");
175    }
176 
177    /**
178     * Test that FTP non proxy hosts are mapped correctly
179     *
180     * @throws Exception
181     */
182    @SmallTest
183    @Feature({"AndroidWebView"})
184    public void testFtpNonProxyHosts() throws Exception {
185        System.setProperty("ftp.nonProxyHosts", "slashdot.org");
186        System.setProperty("ftp.proxyHost", "httpproxy.com");
187        System.setProperty("ftp.proxyPort", "8080");
188        checkMapping("ftp://example.com/", "PROXY httpproxy.com:8080");
189        checkMapping("http://example.com/", "DIRECT");
190    }
191 
192    /**
193     * Test ftp.proxyHost and ftp.proxyPort works.
194     *
195     * @throws Exception
196     */
197    @SmallTest
198    @Feature({"AndroidWebView"})
199    public void testFtpProxyHostAndPort() throws Exception {
200        System.setProperty("ftp.proxyHost", "httpproxy.com");
201        System.setProperty("ftp.proxyPort", "8080");
202        checkMapping("ftp://example.com/", "PROXY httpproxy.com:8080");
203        checkMapping("http://example.com/", "DIRECT");
204        checkMapping("https://example.com/", "DIRECT");
205    }
206 
207    /**
208     * Test ftp.proxyHost and default port.
209     *
210     * @throws Exception
211     */
212    @SmallTest
213    @Feature({"AndroidWebView"})
214    public void testFtpProxyHostOnly() throws Exception {
215        System.setProperty("ftp.proxyHost", "httpproxy.com");
216        checkMapping("ftp://example.com/", "PROXY httpproxy.com:80");
217        checkMapping("http://example.com/", "DIRECT");
218        checkMapping("https://example.com/", "DIRECT");
219    }
220 
221    /**
222     * Test https.proxyHost and https.proxyPort works.
223     *
224     * @throws Exception
225     */
226    @SmallTest
227    @Feature({"AndroidWebView"})
228    public void testHttpsProxyHostAndPort() throws Exception {
229        System.setProperty("https.proxyHost", "httpproxy.com");
230        System.setProperty("https.proxyPort", "8080");
231        checkMapping("ftp://example.com/", "DIRECT");
232        checkMapping("http://example.com/", "DIRECT");
233        checkMapping("https://example.com/", "PROXY httpproxy.com:8080");
234    }
235 
236    /**
237     * Default http proxy is used if a scheme-specific one is not found.
238     *
239     * @throws Exception
240     */
241    @SmallTest
242    @Feature({"AndroidWebView"})
243    public void testDefaultProxyExplictPort() throws Exception {
244        System.setProperty("ftp.proxyHost", "httpproxy.com");
245        System.setProperty("ftp.proxyPort", "8080");
246        System.setProperty("proxyHost", "defaultproxy.com");
247        System.setProperty("proxyPort", "8080");
248        checkMapping("ftp://example.com/", "PROXY httpproxy.com:8080");
249        checkMapping("http://example.com/", "PROXY defaultproxy.com:8080");
250        checkMapping("https://example.com/", "PROXY defaultproxy.com:8080");
251    }
252 
253    /**
254     * SOCKS proxy is used if scheme-specific one is not found.
255     *
256     * @throws Exception
257     */
258    @SmallTest
259    @Feature({"AndroidWebView"})
260    public void testFallbackToSocks() throws Exception {
261        System.setProperty("http.proxyHost", "defaultproxy.com");
262        System.setProperty("socksProxyHost", "socksproxy.com");
263        checkMapping("ftp://example.com", "SOCKS5 socksproxy.com:1080");
264        checkMapping("http://example.com/", "PROXY defaultproxy.com:80");
265        checkMapping("https://example.com/", "SOCKS5 socksproxy.com:1080");
266    }
267 
268    /**
269     * SOCKS proxy port is used if specified
270     *
271     * @throws Exception
272     */
273    @SmallTest
274    @Feature({"AndroidWebView"})
275    public void testSocksExplicitPort() throws Exception {
276        System.setProperty("socksProxyHost", "socksproxy.com");
277        System.setProperty("socksProxyPort", "9000");
278        checkMapping("http://example.com/", "SOCKS5 socksproxy.com:9000");
279    }
280 
281    /**
282     * SOCKS proxy is ignored if default HTTP proxy defined.
283     *
284     * @throws Exception
285     */
286    @SmallTest
287    @Feature({"AndroidWebView"})
288    public void testHttpProxySupercedesSocks() throws Exception {
289        System.setProperty("proxyHost", "defaultproxy.com");
290        System.setProperty("socksProxyHost", "socksproxy.com");
291        System.setProperty("socksProxyPort", "9000");
292        checkMapping("http://example.com/", "PROXY defaultproxy.com:80");
293    }
294}
295 

[all classes][org.chromium.net]
EMMA 2.0.5312 (C) Vladimir Roubtsov