diff options
author | ericroman@google.com <ericroman@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-12-10 04:11:27 +0000 |
---|---|---|
committer | ericroman@google.com <ericroman@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-12-10 04:11:27 +0000 |
commit | 63de95b265c665320b776c821f4cc44872c65c87 (patch) | |
tree | d60769b5e1907b060870af7d88ed567671a24e4e /net/proxy/proxy_service_unittest.cc | |
parent | bcdae8c9c9d90889fa0ca6491ae191a9e2f944b4 (diff) | |
download | chromium_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.cc | 197 |
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); |