diff options
author | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-19 20:24:06 +0000 |
---|---|---|
committer | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-19 20:24:06 +0000 |
commit | 7541206c7a5160f3489d563b97f1c841c853dc22 (patch) | |
tree | b69621265589060c0577559c23c86db4de667191 /net/proxy/proxy_service_unittest.cc | |
parent | d68a04da3be6a4a5db3768f53b2b48735a6ec210 (diff) | |
download | chromium_src-7541206c7a5160f3489d563b97f1c841c853dc22.zip chromium_src-7541206c7a5160f3489d563b97f1c841c853dc22.tar.gz chromium_src-7541206c7a5160f3489d563b97f1c841c853dc22.tar.bz2 |
Split out the handling of proxy bypass rules into ProxyBypassRules. There are some pretty complicated rules, and this helps isolate that code and better test it.
This also lays a framework for addressing bug 9835 (IP/CIDR matching)
Lastly, adds support for the exclusion format ".domain" on all platforms, which is interpreted as "*.domain".
BUG=28112
TEST=ProxyBypassRulesTest.*
Review URL: http://codereview.chromium.org/601070
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@39486 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/proxy/proxy_service_unittest.cc')
-rw-r--r-- | net/proxy/proxy_service_unittest.cc | 256 |
1 files changed, 18 insertions, 238 deletions
diff --git a/net/proxy/proxy_service_unittest.cc b/net/proxy/proxy_service_unittest.cc index b6804ce..802806c 100644 --- a/net/proxy/proxy_service_unittest.cc +++ b/net/proxy/proxy_service_unittest.cc @@ -674,212 +674,33 @@ TEST(ProxyServiceTest, ProxyFallback_BadConfig) { } TEST(ProxyServiceTest, ProxyBypassList) { - // Test what happens when a proxy bypass list is specified. + // Test that the proxy bypass rules are consulted. - ProxyInfo info; + TestCompletionCallback callback[2]; + ProxyInfo info[2]; ProxyConfig config; config.proxy_rules.ParseFromString("foopy1:8080;foopy2:9090"); config.auto_detect = false; - config.proxy_bypass_local_names = true; - - { - scoped_refptr<ProxyService> service(new ProxyService( - new MockProxyConfigService(config), - new MockAsyncProxyResolver(), - NULL)); - GURL url("http://www.google.com/"); - // Get the proxy information. - TestCompletionCallback callback; - int rv = service->ResolveProxy(url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_FALSE(info.is_direct()); - } - - { - scoped_refptr<ProxyService> service(new ProxyService( - new MockProxyConfigService(config), - new MockAsyncProxyResolver(), - NULL)); - GURL test_url("http://local"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_TRUE(info.is_direct()); - } + config.bypass_rules.ParseFromString("*.org"); - config.proxy_bypass.clear(); - config.proxy_bypass.push_back("*.org"); - config.proxy_bypass_local_names = true; - { - scoped_refptr<ProxyService> service(new ProxyService( - new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); - GURL test_url("http://www.webkit.org"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_TRUE(info.is_direct()); - } - - config.proxy_bypass.clear(); - config.proxy_bypass.push_back("*.org"); - config.proxy_bypass.push_back("7*"); - config.proxy_bypass_local_names = true; - { - scoped_refptr<ProxyService> service(new ProxyService( - new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); - GURL test_url("http://74.125.19.147"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_TRUE(info.is_direct()); - } + scoped_refptr<ProxyService> service(new ProxyService( + new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); - config.proxy_bypass.clear(); - config.proxy_bypass.push_back("*.org"); - config.proxy_bypass_local_names = true; - { - scoped_refptr<ProxyService> service(new ProxyService( - new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); - GURL test_url("http://www.msn.com"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_FALSE(info.is_direct()); - } + int rv; + GURL url1("http://www.webkit.org"); + GURL url2("http://www.webkit.com"); - config.proxy_bypass.clear(); - config.proxy_bypass.push_back("*.MSN.COM"); - config.proxy_bypass_local_names = true; - { - scoped_refptr<ProxyService> service(new ProxyService( - new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); - GURL test_url("http://www.msnbc.msn.com"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_TRUE(info.is_direct()); - } + // Request for a .org domain should bypass proxy. + rv = service->ResolveProxy(url1, &info[0], &callback[0], NULL, NULL); + EXPECT_EQ(OK, rv); + EXPECT_TRUE(info[0].is_direct()); - config.proxy_bypass.clear(); - config.proxy_bypass.push_back("*.msn.com"); - config.proxy_bypass_local_names = true; - { - scoped_refptr<ProxyService> service(new ProxyService( - new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); - GURL test_url("HTTP://WWW.MSNBC.MSN.COM"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_TRUE(info.is_direct()); - } + // Request for a .com domain hits the proxy. + rv = service->ResolveProxy(url2, &info[1], &callback[1], NULL, NULL); + EXPECT_EQ(OK, rv); + EXPECT_EQ("foopy1:8080", info[1].proxy_server().ToURI()); } -TEST(ProxyServiceTest, ProxyBypassListWithPorts) { - // Test port specification in bypass list entries. - ProxyInfo info; - ProxyConfig config; - config.proxy_rules.ParseFromString("foopy1:8080;foopy2:9090"); - config.auto_detect = false; - config.proxy_bypass_local_names = false; - - config.proxy_bypass.clear(); - config.proxy_bypass.push_back("*.example.com:99"); - { - scoped_refptr<ProxyService> service(new ProxyService( - new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); - { - GURL test_url("http://www.example.com:99"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_TRUE(info.is_direct()); - } - { - GURL test_url("http://www.example.com:100"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_FALSE(info.is_direct()); - } - { - GURL test_url("http://www.example.com"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_FALSE(info.is_direct()); - } - } - - config.proxy_bypass.clear(); - config.proxy_bypass.push_back("*.example.com:80"); - { - scoped_refptr<ProxyService> service(new ProxyService( - new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); - GURL test_url("http://www.example.com"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_TRUE(info.is_direct()); - } - - config.proxy_bypass.clear(); - config.proxy_bypass.push_back("*.example.com"); - { - scoped_refptr<ProxyService> service(new ProxyService( - new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); - GURL test_url("http://www.example.com:99"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_TRUE(info.is_direct()); - } - - // IPv6 with port. - config.proxy_bypass.clear(); - config.proxy_bypass.push_back("[3ffe:2a00:100:7031::1]:99"); - { - scoped_refptr<ProxyService> service(new ProxyService( - new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); - { - GURL test_url("http://[3ffe:2a00:100:7031::1]:99/"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_TRUE(info.is_direct()); - } - { - GURL test_url("http://[3ffe:2a00:100:7031::1]/"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_FALSE(info.is_direct()); - } - } - - // IPv6 without port. The bypass entry ought to work without the - // brackets, but the bypass matching logic in ProxyService is - // currently limited. - config.proxy_bypass.clear(); - config.proxy_bypass.push_back("[3ffe:2a00:100:7031::1]"); - { - scoped_refptr<ProxyService> service(new ProxyService( - new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); - { - GURL test_url("http://[3ffe:2a00:100:7031::1]:99/"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_TRUE(info.is_direct()); - } - { - GURL test_url("http://[3ffe:2a00:100:7031::1]/"); - TestCompletionCallback callback; - int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); - EXPECT_EQ(OK, rv); - EXPECT_TRUE(info.is_direct()); - } - } -} TEST(ProxyServiceTest, PerProtocolProxyTests) { ProxyConfig config; @@ -1491,7 +1312,7 @@ TEST(ProxyServiceTest, BypassDoesntApplyToPac) { config.auto_detect = true; config.pac_url = GURL("http://foopy/proxy.pac"); config.proxy_rules.ParseFromString("http=foopy:80"); // Not used. - config.proxy_bypass.push_back("www.google.com"); + config.bypass_rules.ParseFromString("www.google.com"); MockProxyConfigService* config_service = new MockProxyConfigService(config); MockAsyncProxyResolverExpectsBytes* resolver = @@ -1644,47 +1465,6 @@ TEST(ProxyServiceTest, ResetProxyConfigService) { EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); } -TEST(ProxyServiceTest, IsLocalName) { - const struct { - const char* url; - bool expected_is_local; - } tests[] = { - // Single-component hostnames are considered local. - {"http://localhost/x", true}, - {"http://www", true}, - - // IPv4 loopback interface. - {"http://127.0.0.1/x", true}, - {"http://127.0.0.1:80/x", true}, - - // IPv6 loopback interface. - {"http://[::1]:80/x", true}, - {"http://[0:0::1]:6233/x", true}, - {"http://[0:0:0:0:0:0:0:1]/x", true}, - - // Non-local URLs. - {"http://foo.com/", false}, - {"http://localhost.i/", false}, - {"http://www.google.com/", false}, - {"http://192.168.0.1/", false}, - - // Try with different protocols. - {"ftp://127.0.0.1/x", true}, - {"ftp://foobar.com/x", false}, - - // This is a bit of a gray-area, but GURL does not strip trailing dots - // in host-names, so the following are considered non-local. - {"http://www./x", false}, - {"http://localhost./x", false}, - }; - - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { - SCOPED_TRACE(StringPrintf("Test[%" PRIuS "]: %s", i, tests[i].url)); - bool is_local = ProxyService::IsLocalName(GURL(tests[i].url)); - EXPECT_EQ(tests[i].expected_is_local, is_local); - } -} - // Check that after we have done the auto-detect test, and the configuration // is updated (with no change), we don't re-try the autodetect test. // Regression test for http://crbug.com/18526 -- the configuration was being |