summaryrefslogtreecommitdiffstats
path: root/net/proxy/proxy_service_unittest.cc
diff options
context:
space:
mode:
authorericroman@google.com <ericroman@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-12-10 04:11:27 +0000
committerericroman@google.com <ericroman@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-12-10 04:11:27 +0000
commit63de95b265c665320b776c821f4cc44872c65c87 (patch)
treed60769b5e1907b060870af7d88ed567671a24e4e /net/proxy/proxy_service_unittest.cc
parentbcdae8c9c9d90889fa0ca6491ae191a9e2f944b4 (diff)
downloadchromium_src-63de95b265c665320b776c821f4cc44872c65c87.zip
chromium_src-63de95b265c665320b776c821f4cc44872c65c87.tar.gz
chromium_src-63de95b265c665320b776c821f4cc44872c65c87.tar.bz2
Misc proxy service changes.
(1) Changed the proxy service ownership model -- rather than being a detail of the HTTP stack, it is now a dependency owned by UrlRequestContext. - ProxyService is owned by UrlRequestContext (before was HttpNetworkSession) - ProxyResolver is owned by ProxyService (before was HttpNetworkSession) Being able to share the proxy service is needed in several places, including incognito mode http context (http://crbug.com/3564), and for proxy resolving in the new FTP stack. (2) Added an IPC for getting of the ProxyResolverWinHttp dependency in the plugin process. Not hooked up yet, but intent is to route the proxy resolve requests through the browser process. (3) Changed some unit tests which were depending on the system proxy settings (this was a sideffect of their calling HttpNetworkLayer::CreateFactory(NULL)). (4) Moved the first-time ProxyService::UpdateConfig out of the constructor and into the initial request. Done to avoid startup perf regressions, since the ProxyService construction is now done earlier (on the startup critical path). BUG=3564 Review URL: http://codereview.chromium.org/12938 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@6693 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/proxy/proxy_service_unittest.cc')
-rw-r--r--net/proxy/proxy_service_unittest.cc197
1 files changed, 109 insertions, 88 deletions
diff --git a/net/proxy/proxy_service_unittest.cc b/net/proxy/proxy_service_unittest.cc
index 16a1649..1ad7d32 100644
--- a/net/proxy/proxy_service_unittest.cc
+++ b/net/proxy/proxy_service_unittest.cc
@@ -12,16 +12,18 @@ namespace {
class MockProxyResolver : public net::ProxyResolver {
public:
MockProxyResolver() : fail_get_proxy_for_url(false) {
- config.reset(new net::ProxyConfig);
+ }
+ // Init the MockProxyResolver with the specified ProxyConfig.
+ explicit MockProxyResolver(const net::ProxyConfig& c) : config(c) {
}
virtual int GetProxyConfig(net::ProxyConfig* results) {
- *results = *(config.get());
+ *results = config;
return net::OK;
}
virtual int GetProxyForURL(const GURL& query_url,
const GURL& pac_url,
net::ProxyInfo* results) {
- if (pac_url != config->pac_url)
+ if (pac_url != config.pac_url)
return net::ERR_INVALID_ARGUMENT;
if (fail_get_proxy_for_url)
return net::ERR_FAILED;
@@ -32,7 +34,7 @@ class MockProxyResolver : public net::ProxyResolver {
}
return net::OK;
}
- scoped_ptr<net::ProxyConfig> config;
+ net::ProxyConfig config;
net::ProxyInfo info;
// info is only returned if query_url in GetProxyForURL matches this:
@@ -45,9 +47,22 @@ class MockProxyResolver : public net::ProxyResolver {
} // namespace
+// GetAnnotatedList() is used to generate a string for mozilla's GetProxyForUrl
+// NPAPI extension. Check that it adheres to the expected format.
+TEST(ProxyListTest, GetAnnotatedList) {
+ net::ProxyList proxy_list;
+
+ std::vector<std::string> proxies;
+ proxies.push_back("www.first.com:80");
+ proxies.push_back("www.second.com:80");
+ proxy_list.SetVector(proxies);
+
+ EXPECT_EQ(std::string("PROXY www.first.com:80;PROXY www.second.com:80"),
+ proxy_list.GetAnnotatedList());
+}
+
TEST(ProxyServiceTest, Direct) {
- MockProxyResolver resolver;
- net::ProxyService service(&resolver);
+ net::ProxyService service(new MockProxyResolver);
GURL url("http://www.google.com/");
@@ -58,12 +73,12 @@ TEST(ProxyServiceTest, Direct) {
}
TEST(ProxyServiceTest, PAC) {
- MockProxyResolver resolver;
- resolver.config->pac_url = GURL("http://foopy/proxy.pac");
- resolver.info.UseNamedProxy("foopy");
- resolver.info_predicate_query_host = "www.google.com";
+ MockProxyResolver* resolver = new MockProxyResolver;
+ resolver->config.pac_url = GURL("http://foopy/proxy.pac");
+ resolver->info.UseNamedProxy("foopy");
+ resolver->info_predicate_query_host = "www.google.com";
- net::ProxyService service(&resolver);
+ net::ProxyService service(resolver);
GURL url("http://www.google.com/");
@@ -75,12 +90,12 @@ TEST(ProxyServiceTest, PAC) {
}
TEST(ProxyServiceTest, PAC_FailoverToDirect) {
- MockProxyResolver resolver;
- resolver.config->pac_url = GURL("http://foopy/proxy.pac");
- resolver.info.UseNamedProxy("foopy:8080");
- resolver.info_predicate_query_host = "www.google.com";
+ MockProxyResolver* resolver = new MockProxyResolver;
+ resolver->config.pac_url = GURL("http://foopy/proxy.pac");
+ resolver->info.UseNamedProxy("foopy:8080");
+ resolver->info_predicate_query_host = "www.google.com";
- net::ProxyService service(&resolver);
+ net::ProxyService service(resolver);
GURL url("http://www.google.com/");
@@ -99,13 +114,13 @@ TEST(ProxyServiceTest, PAC_FailoverToDirect) {
TEST(ProxyServiceTest, PAC_FailsToDownload) {
// Test what happens when we fail to download the PAC URL.
- MockProxyResolver resolver;
- resolver.config->pac_url = GURL("http://foopy/proxy.pac");
- resolver.info.UseNamedProxy("foopy:8080");
- resolver.info_predicate_query_host = "www.google.com";
- resolver.fail_get_proxy_for_url = true;
+ MockProxyResolver* resolver = new MockProxyResolver;
+ resolver->config.pac_url = GURL("http://foopy/proxy.pac");
+ resolver->info.UseNamedProxy("foopy:8080");
+ resolver->info_predicate_query_host = "www.google.com";
+ resolver->fail_get_proxy_for_url = true;
- net::ProxyService service(&resolver);
+ net::ProxyService service(resolver);
GURL url("http://www.google.com/");
net::ProxyInfo info;
@@ -117,8 +132,8 @@ TEST(ProxyServiceTest, PAC_FailsToDownload) {
EXPECT_EQ(rv, net::OK);
EXPECT_TRUE(info.is_direct());
- resolver.fail_get_proxy_for_url = false;
- resolver.info.UseNamedProxy("foopy_valid:8080");
+ resolver->fail_get_proxy_for_url = false;
+ resolver->info.UseNamedProxy("foopy_valid:8080");
// But, if that fails, then we should give the proxy config another shot
// since we have never tried it with this URL before.
@@ -132,13 +147,13 @@ TEST(ProxyServiceTest, ProxyFallback) {
// Test what happens when we specify multiple proxy servers and some of them
// are bad.
- MockProxyResolver resolver;
- resolver.config->pac_url = GURL("http://foopy/proxy.pac");
- resolver.info.UseNamedProxy("foopy1:8080;foopy2:9090");
- resolver.info_predicate_query_host = "www.google.com";
- resolver.fail_get_proxy_for_url = false;
+ MockProxyResolver* resolver = new MockProxyResolver;
+ resolver->config.pac_url = GURL("http://foopy/proxy.pac");
+ resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090");
+ resolver->info_predicate_query_host = "www.google.com";
+ resolver->fail_get_proxy_for_url = false;
- net::ProxyService service(&resolver);
+ net::ProxyService service(resolver);
GURL url("http://www.google.com/");
@@ -160,10 +175,10 @@ TEST(ProxyServiceTest, ProxyFallback) {
// Create a new resolver that returns 3 proxies. The second one is already
// known to be bad.
- resolver.config->pac_url = GURL("http://foopy/proxy.pac");
- resolver.info.UseNamedProxy("foopy3:7070;foopy1:8080;foopy2:9090");
- resolver.info_predicate_query_host = "www.google.com";
- resolver.fail_get_proxy_for_url = false;
+ resolver->config.pac_url = GURL("http://foopy/proxy.pac");
+ resolver->info.UseNamedProxy("foopy3:7070;foopy1:8080;foopy2:9090");
+ resolver->info_predicate_query_host = "www.google.com";
+ resolver->fail_get_proxy_for_url = false;
rv = service.ResolveProxy(url, &info, NULL, NULL);
EXPECT_EQ(rv, net::OK);
@@ -190,13 +205,13 @@ TEST(ProxyServiceTest, ProxyFallback) {
TEST(ProxyServiceTest, ProxyFallback_NewSettings) {
// Test proxy failover when new settings are available.
- MockProxyResolver resolver;
- resolver.config->pac_url = GURL("http://foopy/proxy.pac");
- resolver.info.UseNamedProxy("foopy1:8080;foopy2:9090");
- resolver.info_predicate_query_host = "www.google.com";
- resolver.fail_get_proxy_for_url = false;
+ MockProxyResolver* resolver = new MockProxyResolver;
+ resolver->config.pac_url = GURL("http://foopy/proxy.pac");
+ resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090");
+ resolver->info_predicate_query_host = "www.google.com";
+ resolver->fail_get_proxy_for_url = false;
- net::ProxyService service(&resolver);
+ net::ProxyService service(resolver);
GURL url("http://www.google.com/");
@@ -210,8 +225,8 @@ TEST(ProxyServiceTest, ProxyFallback_NewSettings) {
EXPECT_EQ(info.proxy_server(), "foopy1:8080");
// Fake an error on the proxy, and also a new configuration on the proxy.
- resolver.config.reset(new net::ProxyConfig);
- resolver.config->pac_url = GURL("http://foopy-new/proxy.pac");
+ resolver->config = net::ProxyConfig();
+ resolver->config.pac_url = GURL("http://foopy-new/proxy.pac");
rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL);
EXPECT_EQ(rv, net::OK);
@@ -225,8 +240,8 @@ TEST(ProxyServiceTest, ProxyFallback_NewSettings) {
EXPECT_EQ(info.proxy_server(), "foopy2:9090");
// We simulate a new configuration.
- resolver.config.reset(new net::ProxyConfig);
- resolver.config->pac_url = GURL("http://foopy-new2/proxy.pac");
+ resolver->config = net::ProxyConfig();
+ resolver->config.pac_url = GURL("http://foopy-new2/proxy.pac");
// We fake anothe error. It should go back to the first proxy.
rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL);
@@ -237,13 +252,13 @@ TEST(ProxyServiceTest, ProxyFallback_NewSettings) {
TEST(ProxyServiceTest, ProxyFallback_BadConfig) {
// Test proxy failover when the configuration is bad.
- MockProxyResolver resolver;
- resolver.config->pac_url = GURL("http://foopy/proxy.pac");
- resolver.info.UseNamedProxy("foopy1:8080;foopy2:9090");
- resolver.info_predicate_query_host = "www.google.com";
- resolver.fail_get_proxy_for_url = false;
+ MockProxyResolver* resolver = new MockProxyResolver;
+ resolver->config.pac_url = GURL("http://foopy/proxy.pac");
+ resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090");
+ resolver->info_predicate_query_host = "www.google.com";
+ resolver->fail_get_proxy_for_url = false;
- net::ProxyService service(&resolver);
+ net::ProxyService service(resolver);
GURL url("http://www.google.com/");
@@ -266,7 +281,7 @@ TEST(ProxyServiceTest, ProxyFallback_BadConfig) {
// Fake a PAC failure.
net::ProxyInfo info2;
- resolver.fail_get_proxy_for_url = true;
+ resolver->fail_get_proxy_for_url = true;
rv = service.ResolveProxy(url, &info2, NULL, NULL);
EXPECT_EQ(rv, net::OK);
@@ -275,7 +290,7 @@ TEST(ProxyServiceTest, ProxyFallback_BadConfig) {
// The PAC is now fixed and will return a proxy server.
// It should also clear the list of bad proxies.
- resolver.fail_get_proxy_for_url = false;
+ resolver->fail_get_proxy_for_url = false;
// Try to resolve, it will still return "direct" because we have no reason
// to check the config since everything works.
@@ -298,12 +313,12 @@ TEST(ProxyServiceTest, ProxyFallback_BadConfig) {
TEST(ProxyServiceTest, ProxyBypassList) {
// Test what happens when a proxy bypass list is specified.
- MockProxyResolver resolver;
- resolver.config->proxy_server = "foopy1:8080;foopy2:9090";
- resolver.config->auto_detect = false;
- resolver.config->proxy_bypass_local_names = true;
-
- net::ProxyService service(&resolver);
+ net::ProxyConfig config;
+ config.proxy_server = "foopy1:8080;foopy2:9090";
+ config.auto_detect = false;
+ config.proxy_bypass_local_names = true;
+
+ net::ProxyService service(new MockProxyResolver(config));
GURL url("http://www.google.com/");
// Get the proxy information.
net::ProxyInfo info;
@@ -311,58 +326,63 @@ TEST(ProxyServiceTest, ProxyBypassList) {
EXPECT_EQ(rv, net::OK);
EXPECT_FALSE(info.is_direct());
- net::ProxyService service1(&resolver);
+ net::ProxyService service1(new MockProxyResolver(config));
GURL test_url1("local");
net::ProxyInfo info1;
rv = service1.ResolveProxy(test_url1, &info1, NULL, NULL);
EXPECT_EQ(rv, net::OK);
EXPECT_TRUE(info1.is_direct());
- resolver.config->proxy_bypass.clear();
- resolver.config->proxy_bypass.push_back("*.org");
- resolver.config->proxy_bypass_local_names = true;
- net::ProxyService service2(&resolver);
+ config.proxy_bypass.clear();
+ config.proxy_bypass.push_back("*.org");
+ config.proxy_bypass_local_names = true;
+ MockProxyResolver* resolver = new MockProxyResolver(config);
+ net::ProxyService service2(resolver);
GURL test_url2("http://www.webkit.org");
net::ProxyInfo info2;
rv = service2.ResolveProxy(test_url2, &info2, NULL, NULL);
EXPECT_EQ(rv, net::OK);
EXPECT_TRUE(info2.is_direct());
- resolver.config->proxy_bypass.clear();
- resolver.config->proxy_bypass.push_back("*.org");
- resolver.config->proxy_bypass.push_back("7*");
- resolver.config->proxy_bypass_local_names = true;
- net::ProxyService service3(&resolver);
+ config.proxy_bypass.clear();
+ config.proxy_bypass.push_back("*.org");
+ config.proxy_bypass.push_back("7*");
+ config.proxy_bypass_local_names = true;
+ resolver = new MockProxyResolver(config);
+ net::ProxyService service3(resolver);
GURL test_url3("http://74.125.19.147");
net::ProxyInfo info3;
rv = service3.ResolveProxy(test_url3, &info3, NULL, NULL);
EXPECT_EQ(rv, net::OK);
EXPECT_TRUE(info3.is_direct());
- resolver.config->proxy_bypass.clear();
- resolver.config->proxy_bypass.push_back("*.org");
- resolver.config->proxy_bypass_local_names = true;
- net::ProxyService service4(&resolver);
+ config.proxy_bypass.clear();
+ config.proxy_bypass.push_back("*.org");
+ config.proxy_bypass_local_names = true;
+ resolver = new MockProxyResolver(config);
+ net::ProxyService service4(resolver);
GURL test_url4("http://www.msn.com");
net::ProxyInfo info4;
rv = service4.ResolveProxy(test_url4, &info4, NULL, NULL);
EXPECT_EQ(rv, net::OK);
EXPECT_FALSE(info4.is_direct());
- resolver.config->proxy_bypass.clear();
- resolver.config->proxy_bypass.push_back("*.MSN.COM");
- resolver.config->proxy_bypass_local_names = true;
- net::ProxyService service5(&resolver);
+ config.proxy_bypass.clear();
+ config.proxy_bypass.push_back("*.MSN.COM");
+ config.proxy_bypass_local_names = true;
+ resolver = new MockProxyResolver(config);
+ net::ProxyService service5(resolver);
GURL test_url5("http://www.msnbc.msn.com");
net::ProxyInfo info5;
rv = service5.ResolveProxy(test_url5, &info5, NULL, NULL);
EXPECT_EQ(rv, net::OK);
EXPECT_TRUE(info5.is_direct());
- resolver.config->proxy_bypass.clear();
- resolver.config->proxy_bypass.push_back("*.msn.com");
- resolver.config->proxy_bypass_local_names = true;
- net::ProxyService service6(&resolver);
+ config.proxy_bypass.clear();
+ config.proxy_bypass.push_back("*.msn.com");
+ config.proxy_bypass_local_names = true;
+ resolver = new MockProxyResolver(config);
+ net::ProxyService service6(resolver);
GURL test_url6("HTTP://WWW.MSNBC.MSN.COM");
net::ProxyInfo info6;
rv = service6.ResolveProxy(test_url6, &info6, NULL, NULL);
@@ -371,11 +391,11 @@ TEST(ProxyServiceTest, ProxyBypassList) {
}
TEST(ProxyServiceTest, PerProtocolProxyTests) {
- MockProxyResolver resolver;
- resolver.config->proxy_server = "http=foopy1:8080;https=foopy2:8080";
- resolver.config->auto_detect = false;
+ net::ProxyConfig config;
+ config.proxy_server = "http=foopy1:8080;https=foopy2:8080";
+ config.auto_detect = false;
- net::ProxyService service1(&resolver);
+ net::ProxyService service1(new MockProxyResolver(config));
GURL test_url1("http://www.msn.com");
net::ProxyInfo info1;
int rv = service1.ResolveProxy(test_url1, &info1, NULL, NULL);
@@ -383,7 +403,7 @@ TEST(ProxyServiceTest, PerProtocolProxyTests) {
EXPECT_FALSE(info1.is_direct());
EXPECT_TRUE(info1.proxy_server() == "foopy1:8080");
- net::ProxyService service2(&resolver);
+ net::ProxyService service2(new MockProxyResolver(config));
GURL test_url2("ftp://ftp.google.com");
net::ProxyInfo info2;
rv = service2.ResolveProxy(test_url2, &info2, NULL, NULL);
@@ -391,7 +411,7 @@ TEST(ProxyServiceTest, PerProtocolProxyTests) {
EXPECT_TRUE(info2.is_direct());
EXPECT_TRUE(info2.proxy_server() == "");
- net::ProxyService service3(&resolver);
+ net::ProxyService service3(new MockProxyResolver(config));
GURL test_url3("https://webbranch.techcu.com");
net::ProxyInfo info3;
rv = service3.ResolveProxy(test_url3, &info3, NULL, NULL);
@@ -399,8 +419,9 @@ TEST(ProxyServiceTest, PerProtocolProxyTests) {
EXPECT_FALSE(info3.is_direct());
EXPECT_TRUE(info3.proxy_server() == "foopy2:8080");
- resolver.config->proxy_server = "foopy1:8080";
- net::ProxyService service4(&resolver);
+ MockProxyResolver* resolver = new MockProxyResolver(config);
+ resolver->config.proxy_server = "foopy1:8080";
+ net::ProxyService service4(resolver);
GURL test_url4("www.microsoft.com");
net::ProxyInfo info4;
rv = service4.ResolveProxy(test_url4, &info4, NULL, NULL);