summaryrefslogtreecommitdiffstats
path: root/net/proxy/proxy_service_unittest.cc
diff options
context:
space:
mode:
authoreroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-19 20:24:06 +0000
committereroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-19 20:24:06 +0000
commit7541206c7a5160f3489d563b97f1c841c853dc22 (patch)
treeb69621265589060c0577559c23c86db4de667191 /net/proxy/proxy_service_unittest.cc
parentd68a04da3be6a4a5db3768f53b2b48735a6ec210 (diff)
downloadchromium_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.cc256
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