| Index: net/proxy/proxy_service_unittest.cc
|
| ===================================================================
|
| --- net/proxy/proxy_service_unittest.cc (revision 7227)
|
| +++ net/proxy/proxy_service_unittest.cc (working copy)
|
| @@ -9,22 +9,32 @@
|
|
|
| namespace {
|
|
|
| -class MockProxyResolver : public net::ProxyResolver {
|
| +// TODO(eroman): get rid of synchronous usages of ProxyService::ResolveProxy().
|
| +
|
| +class MockProxyConfigService: public net::ProxyConfigService {
|
| public:
|
| - MockProxyResolver() : fail_get_proxy_for_url(false) {
|
| + MockProxyConfigService() {} // Direct connect.
|
| + explicit MockProxyConfigService(const net::ProxyConfig& pc) : config(pc) {}
|
| + explicit MockProxyConfigService(const std::string& pac_url) {
|
| + config.pac_url = GURL(pac_url);
|
| }
|
| - // Init the MockProxyResolver with the specified ProxyConfig.
|
| - explicit MockProxyResolver(const net::ProxyConfig& c) : config(c) {
|
| - }
|
| +
|
| virtual int GetProxyConfig(net::ProxyConfig* results) {
|
| *results = config;
|
| return net::OK;
|
| }
|
| +
|
| + net::ProxyConfig config;
|
| +};
|
| +
|
| +class MockProxyResolver : public net::ProxyResolver {
|
| + public:
|
| + MockProxyResolver() : fail_get_proxy_for_url(false) {
|
| + }
|
| +
|
| virtual int GetProxyForURL(const GURL& query_url,
|
| const GURL& pac_url,
|
| net::ProxyInfo* results) {
|
| - if (pac_url != config.pac_url)
|
| - return net::ERR_INVALID_ARGUMENT;
|
| if (fail_get_proxy_for_url)
|
| return net::ERR_FAILED;
|
| if (GURL(query_url).host() == info_predicate_query_host) {
|
| @@ -34,7 +44,7 @@
|
| }
|
| return net::OK;
|
| }
|
| - net::ProxyConfig config;
|
| +
|
| net::ProxyInfo info;
|
|
|
| // info is only returned if query_url in GetProxyForURL matches this:
|
| @@ -62,7 +72,8 @@
|
| }
|
|
|
| TEST(ProxyServiceTest, Direct) {
|
| - net::ProxyService service(new MockProxyResolver);
|
| + net::ProxyService service(new MockProxyConfigService,
|
| + new MockProxyResolver);
|
|
|
| GURL url("http://www.google.com/");
|
|
|
| @@ -73,12 +84,14 @@
|
| }
|
|
|
| TEST(ProxyServiceTest, PAC) {
|
| + MockProxyConfigService* config_service =
|
| + new MockProxyConfigService("http://foopy/proxy.pac");
|
| +
|
| 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(config_service, resolver);
|
|
|
| GURL url("http://www.google.com/");
|
|
|
| @@ -90,12 +103,14 @@
|
| }
|
|
|
| TEST(ProxyServiceTest, PAC_FailoverToDirect) {
|
| + MockProxyConfigService* config_service =
|
| + new MockProxyConfigService("http://foopy/proxy.pac");
|
| +
|
| 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(config_service, resolver);
|
|
|
| GURL url("http://www.google.com/");
|
|
|
| @@ -114,13 +129,15 @@
|
| TEST(ProxyServiceTest, PAC_FailsToDownload) {
|
| // Test what happens when we fail to download the PAC URL.
|
|
|
| + MockProxyConfigService* config_service =
|
| + new MockProxyConfigService("http://foopy/proxy.pac");
|
| +
|
| 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(config_service, resolver);
|
|
|
| GURL url("http://www.google.com/");
|
| net::ProxyInfo info;
|
| @@ -147,13 +164,15 @@
|
| // Test what happens when we specify multiple proxy servers and some of them
|
| // are bad.
|
|
|
| + MockProxyConfigService* config_service =
|
| + new MockProxyConfigService("http://foopy/proxy.pac");
|
| +
|
| 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(config_service, resolver);
|
|
|
| GURL url("http://www.google.com/");
|
|
|
| @@ -175,7 +194,7 @@
|
|
|
| // 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");
|
| + config_service->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;
|
| @@ -205,13 +224,15 @@
|
| TEST(ProxyServiceTest, ProxyFallback_NewSettings) {
|
| // Test proxy failover when new settings are available.
|
|
|
| + MockProxyConfigService* config_service =
|
| + new MockProxyConfigService("http://foopy/proxy.pac");
|
| +
|
| 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(config_service, resolver);
|
|
|
| GURL url("http://www.google.com/");
|
|
|
| @@ -225,8 +246,8 @@
|
| EXPECT_EQ(info.proxy_server(), "foopy1:8080");
|
|
|
| // Fake an error on the proxy, and also a new configuration on the proxy.
|
| - resolver->config = net::ProxyConfig();
|
| - resolver->config.pac_url = GURL("http://foopy-new/proxy.pac");
|
| + config_service->config = net::ProxyConfig();
|
| + config_service->config.pac_url = GURL("http://foopy-new/proxy.pac");
|
|
|
| rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL);
|
| EXPECT_EQ(rv, net::OK);
|
| @@ -240,8 +261,8 @@
|
| EXPECT_EQ(info.proxy_server(), "foopy2:9090");
|
|
|
| // We simulate a new configuration.
|
| - resolver->config = net::ProxyConfig();
|
| - resolver->config.pac_url = GURL("http://foopy-new2/proxy.pac");
|
| + config_service->config = net::ProxyConfig();
|
| + config_service->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);
|
| @@ -252,13 +273,15 @@
|
| TEST(ProxyServiceTest, ProxyFallback_BadConfig) {
|
| // Test proxy failover when the configuration is bad.
|
|
|
| + MockProxyConfigService* config_service =
|
| + new MockProxyConfigService("http://foopy/proxy.pac");
|
| +
|
| 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(config_service, resolver);
|
|
|
| GURL url("http://www.google.com/");
|
|
|
| @@ -318,7 +341,8 @@
|
| config.auto_detect = false;
|
| config.proxy_bypass_local_names = true;
|
|
|
| - net::ProxyService service(new MockProxyResolver(config));
|
| + net::ProxyService service(new MockProxyConfigService(config),
|
| + new MockProxyResolver());
|
| GURL url("http://www.google.com/");
|
| // Get the proxy information.
|
| net::ProxyInfo info;
|
| @@ -326,7 +350,8 @@
|
| EXPECT_EQ(rv, net::OK);
|
| EXPECT_FALSE(info.is_direct());
|
|
|
| - net::ProxyService service1(new MockProxyResolver(config));
|
| + net::ProxyService service1(new MockProxyConfigService(config),
|
| + new MockProxyResolver());
|
| GURL test_url1("local");
|
| net::ProxyInfo info1;
|
| rv = service1.ResolveProxy(test_url1, &info1, NULL, NULL);
|
| @@ -336,8 +361,8 @@
|
| 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);
|
| + net::ProxyService service2(new MockProxyConfigService(config),
|
| + new MockProxyResolver);
|
| GURL test_url2("http://www.webkit.org");
|
| net::ProxyInfo info2;
|
| rv = service2.ResolveProxy(test_url2, &info2, NULL, NULL);
|
| @@ -348,8 +373,8 @@
|
| 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);
|
| + net::ProxyService service3(new MockProxyConfigService(config),
|
| + new MockProxyResolver);
|
| GURL test_url3("http://74.125.19.147");
|
| net::ProxyInfo info3;
|
| rv = service3.ResolveProxy(test_url3, &info3, NULL, NULL);
|
| @@ -359,8 +384,8 @@
|
| config.proxy_bypass.clear();
|
| config.proxy_bypass.push_back("*.org");
|
| config.proxy_bypass_local_names = true;
|
| - resolver = new MockProxyResolver(config);
|
| - net::ProxyService service4(resolver);
|
| + net::ProxyService service4(new MockProxyConfigService(config),
|
| + new MockProxyResolver);
|
| GURL test_url4("http://www.msn.com");
|
| net::ProxyInfo info4;
|
| rv = service4.ResolveProxy(test_url4, &info4, NULL, NULL);
|
| @@ -370,8 +395,8 @@
|
| 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);
|
| + net::ProxyService service5(new MockProxyConfigService(config),
|
| + new MockProxyResolver);
|
| GURL test_url5("http://www.msnbc.msn.com");
|
| net::ProxyInfo info5;
|
| rv = service5.ResolveProxy(test_url5, &info5, NULL, NULL);
|
| @@ -381,8 +406,8 @@
|
| 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);
|
| + net::ProxyService service6(new MockProxyConfigService(config),
|
| + new MockProxyResolver);
|
| GURL test_url6("HTTP://WWW.MSNBC.MSN.COM");
|
| net::ProxyInfo info6;
|
| rv = service6.ResolveProxy(test_url6, &info6, NULL, NULL);
|
| @@ -395,7 +420,8 @@
|
| config.proxy_server = "http=foopy1:8080;https=foopy2:8080";
|
| config.auto_detect = false;
|
|
|
| - net::ProxyService service1(new MockProxyResolver(config));
|
| + net::ProxyService service1(new MockProxyConfigService(config),
|
| + new MockProxyResolver);
|
| GURL test_url1("http://www.msn.com");
|
| net::ProxyInfo info1;
|
| int rv = service1.ResolveProxy(test_url1, &info1, NULL, NULL);
|
| @@ -403,7 +429,8 @@
|
| EXPECT_FALSE(info1.is_direct());
|
| EXPECT_TRUE(info1.proxy_server() == "foopy1:8080");
|
|
|
| - net::ProxyService service2(new MockProxyResolver(config));
|
| + net::ProxyService service2(new MockProxyConfigService(config),
|
| + new MockProxyResolver);
|
| GURL test_url2("ftp://ftp.google.com");
|
| net::ProxyInfo info2;
|
| rv = service2.ResolveProxy(test_url2, &info2, NULL, NULL);
|
| @@ -411,7 +438,8 @@
|
| EXPECT_TRUE(info2.is_direct());
|
| EXPECT_TRUE(info2.proxy_server() == "");
|
|
|
| - net::ProxyService service3(new MockProxyResolver(config));
|
| + net::ProxyService service3(new MockProxyConfigService(config),
|
| + new MockProxyResolver);
|
| GURL test_url3("https://webbranch.techcu.com");
|
| net::ProxyInfo info3;
|
| rv = service3.ResolveProxy(test_url3, &info3, NULL, NULL);
|
| @@ -419,9 +447,9 @@
|
| EXPECT_FALSE(info3.is_direct());
|
| EXPECT_TRUE(info3.proxy_server() == "foopy2:8080");
|
|
|
| - MockProxyResolver* resolver = new MockProxyResolver(config);
|
| - resolver->config.proxy_server = "foopy1:8080";
|
| - net::ProxyService service4(resolver);
|
| + config.proxy_server = "foopy1:8080";
|
| + net::ProxyService service4(new MockProxyConfigService(config),
|
| + new MockProxyResolver);
|
| GURL test_url4("www.microsoft.com");
|
| net::ProxyInfo info4;
|
| rv = service4.ResolveProxy(test_url4, &info4, NULL, NULL);
|
|
|