Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2080)

Unified Diff: net/proxy/proxy_service_unittest.cc

Issue 525104: Adds a NetworkChangeNotifier dependency to ProxyService; when we observer a n... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Add a test_shell file Created 10 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/proxy/proxy_service.cc ('k') | webkit/tools/test_shell/test_shell_request_context.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/proxy/proxy_service_unittest.cc
===================================================================
--- net/proxy/proxy_service_unittest.cc (revision 35749)
+++ net/proxy/proxy_service_unittest.cc (working copy)
@@ -12,6 +12,7 @@
#include "googleurl/src/gurl.h"
#include "net/base/load_log.h"
#include "net/base/load_log_unittest.h"
+#include "net/base/mock_network_change_notifier.h"
#include "net/base/net_errors.h"
#include "net/base/test_completion_callback.h"
#include "net/proxy/mock_proxy_resolver.h"
@@ -91,7 +92,7 @@
TEST(ProxyServiceTest, Direct) {
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(new MockProxyConfigService, resolver));
+ new ProxyService(new MockProxyConfigService, resolver, NULL));
GURL url("http://www.google.com/");
@@ -118,7 +119,7 @@
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
GURL url("http://www.google.com/");
@@ -163,7 +164,7 @@
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
GURL url("http://username:password@www.google.com/?ref#hash#hash");
@@ -191,7 +192,7 @@
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
GURL url("http://www.google.com/");
@@ -248,7 +249,7 @@
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
GURL url("http://www.google.com/");
@@ -310,7 +311,7 @@
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
// Start first resolve request.
GURL url("http://www.google.com/");
@@ -360,7 +361,7 @@
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
GURL url("http://www.google.com/");
@@ -438,7 +439,7 @@
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
GURL url("http://www.google.com/");
@@ -498,7 +499,7 @@
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
GURL url("http://www.google.com/");
@@ -587,7 +588,7 @@
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
GURL url("http://www.google.com/");
@@ -671,7 +672,9 @@
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver()));
+ new MockProxyConfigService(config),
+ new MockAsyncProxyResolver(),
+ NULL));
GURL url("http://www.google.com/");
// Get the proxy information.
TestCompletionCallback callback;
@@ -682,7 +685,9 @@
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver()));
+ new MockProxyConfigService(config),
+ new MockAsyncProxyResolver(),
+ NULL));
GURL test_url("http://local");
TestCompletionCallback callback;
int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL);
@@ -695,7 +700,7 @@
config.proxy_bypass_local_names = true;
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ 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);
@@ -709,7 +714,7 @@
config.proxy_bypass_local_names = true;
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ 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);
@@ -722,7 +727,7 @@
config.proxy_bypass_local_names = true;
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ 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);
@@ -735,7 +740,7 @@
config.proxy_bypass_local_names = true;
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ 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);
@@ -748,7 +753,7 @@
config.proxy_bypass_local_names = true;
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ 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);
@@ -769,7 +774,7 @@
config.proxy_bypass.push_back("*.example.com:99");
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL));
{
GURL test_url("http://www.example.com:99");
TestCompletionCallback callback;
@@ -797,7 +802,7 @@
config.proxy_bypass.push_back("*.example.com:80");
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ 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);
@@ -809,7 +814,7 @@
config.proxy_bypass.push_back("*.example.com");
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ 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);
@@ -822,7 +827,7 @@
config.proxy_bypass.push_back("[3ffe:2a00:100:7031::1]:99");
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL));
{
GURL test_url("http://[3ffe:2a00:100:7031::1]:99/");
TestCompletionCallback callback;
@@ -846,7 +851,7 @@
config.proxy_bypass.push_back("[3ffe:2a00:100:7031::1]");
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL));
{
GURL test_url("http://[3ffe:2a00:100:7031::1]:99/");
TestCompletionCallback callback;
@@ -870,7 +875,7 @@
config.auto_detect = false;
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL));
GURL test_url("http://www.msn.com");
ProxyInfo info;
TestCompletionCallback callback;
@@ -881,7 +886,7 @@
}
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL));
GURL test_url("ftp://ftp.google.com");
ProxyInfo info;
TestCompletionCallback callback;
@@ -892,7 +897,7 @@
}
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL));
GURL test_url("https://webbranch.techcu.com");
ProxyInfo info;
TestCompletionCallback callback;
@@ -904,7 +909,7 @@
{
config.proxy_rules.ParseFromString("foopy1:8080");
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL));
GURL test_url("http://www.microsoft.com");
ProxyInfo info;
TestCompletionCallback callback;
@@ -926,7 +931,7 @@
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL));
GURL test_url("http://www.msn.com");
ProxyInfo info;
TestCompletionCallback callback;
@@ -937,7 +942,7 @@
}
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL));
GURL test_url("ftp://ftp.google.com");
ProxyInfo info;
TestCompletionCallback callback;
@@ -948,7 +953,7 @@
}
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL));
GURL test_url("https://webbranch.techcu.com");
ProxyInfo info;
TestCompletionCallback callback;
@@ -959,7 +964,7 @@
}
{
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config), new MockAsyncProxyResolver));
+ new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL));
GURL test_url("unknown://www.microsoft.com");
ProxyInfo info;
TestCompletionCallback callback;
@@ -978,7 +983,7 @@
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
// Start 3 requests.
@@ -1053,7 +1058,7 @@
new MockAsyncProxyResolverExpectsBytes;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
service->SetProxyScriptFetcher(fetcher);
@@ -1132,7 +1137,7 @@
new MockAsyncProxyResolverExpectsBytes;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
service->SetProxyScriptFetcher(fetcher);
@@ -1189,7 +1194,7 @@
new MockAsyncProxyResolverExpectsBytes;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
service->SetProxyScriptFetcher(fetcher);
@@ -1274,7 +1279,7 @@
MockAsyncProxyResolverExpectsBytes* resolver =
new MockAsyncProxyResolverExpectsBytes;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
service->SetProxyScriptFetcher(fetcher);
@@ -1345,7 +1350,7 @@
MockAsyncProxyResolverExpectsBytes* resolver =
new MockAsyncProxyResolverExpectsBytes;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
service->SetProxyScriptFetcher(fetcher);
@@ -1421,7 +1426,7 @@
MockAsyncProxyResolverExpectsBytes* resolver =
new MockAsyncProxyResolverExpectsBytes;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
service->SetProxyScriptFetcher(fetcher);
@@ -1479,7 +1484,7 @@
MockAsyncProxyResolverExpectsBytes* resolver =
new MockAsyncProxyResolverExpectsBytes;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
service->SetProxyScriptFetcher(fetcher);
@@ -1547,7 +1552,7 @@
MockAsyncProxyResolverExpectsBytes* resolver =
new MockAsyncProxyResolverExpectsBytes;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
service->SetProxyScriptFetcher(fetcher);
@@ -1583,7 +1588,7 @@
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
GURL url("http://www.google.com/");
@@ -1604,7 +1609,9 @@
config1.proxy_rules.ParseFromString("foopy1:8080");
config1.auto_detect = false;
scoped_refptr<ProxyService> service(new ProxyService(
- new MockProxyConfigService(config1), new MockAsyncProxyResolverExpectsBytes));
+ new MockProxyConfigService(config1),
+ new MockAsyncProxyResolverExpectsBytes,
+ NULL));
ProxyInfo info;
TestCompletionCallback callback1;
@@ -1677,7 +1684,7 @@
MockProxyConfigService* config_service = new MockProxyConfigService(config);
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
// Start 1 requests.
@@ -1723,7 +1730,7 @@
MockProxyConfigService* config_service = new MockProxyConfigService(config);
MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver;
scoped_refptr<ProxyService> service(
- new ProxyService(config_service, resolver));
+ new ProxyService(config_service, resolver, NULL));
// Start 1 request.
@@ -1768,4 +1775,98 @@
EXPECT_TRUE(info2.is_direct());
}
+TEST(ProxyServiceTest, NetworkChangeTriggersPacRefetch) {
+ MockProxyConfigService* config_service =
+ new MockProxyConfigService("http://foopy/proxy.pac");
+
+ MockAsyncProxyResolverExpectsBytes* resolver =
+ new MockAsyncProxyResolverExpectsBytes;
+
+ scoped_refptr<MockNetworkChangeNotifier> network_change_notifier(
+ new MockNetworkChangeNotifier());
+
+ scoped_refptr<ProxyService> service(
+ new ProxyService(config_service, resolver, network_change_notifier));
+
+ MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
+ service->SetProxyScriptFetcher(fetcher);
+
+ // Start 1 request.
+
+ ProxyInfo info1;
+ TestCompletionCallback callback1;
+ int rv = service->ResolveProxy(
+ GURL("http://request1"), &info1, &callback1, NULL, NULL);
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+
+ // The first request should have triggered initial download of PAC script.
+ EXPECT_TRUE(fetcher->has_pending_request());
+ EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
+
+ // Nothing has been sent to the resolver yet.
+ EXPECT_TRUE(resolver->pending_requests().empty());
+
+ // At this point the ProxyService should be waiting for the
+ // ProxyScriptFetcher to invoke its completion callback, notifying it of
+ // PAC script download completion.
+ fetcher->NotifyFetchCompletion(OK, "pac-v1");
+
+ // Now that the PAC script is downloaded, the request will have been sent to
+ // the proxy resolver.
+ EXPECT_EQ("pac-v1", resolver->pending_set_pac_script_request()->pac_bytes());
+ resolver->pending_set_pac_script_request()->CompleteNow(OK);
+
+ ASSERT_EQ(1u, resolver->pending_requests().size());
+ EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url());
+
+ // Complete the pending request.
+ resolver->pending_requests()[0]->results()->UseNamedProxy("request1:80");
+ resolver->pending_requests()[0]->CompleteNow(OK);
+
+ // Wait for completion callback, and verify that the request ran as expected.
+ EXPECT_EQ(OK, callback1.WaitForResult());
+ EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
+
+ // Now simluate a change in the network. The ProxyConfigService is still
+ // going to return the same PAC URL as before, but this URL needs to be
+ // refetched on the new network.
+
+ network_change_notifier->NotifyIPAddressChange();
+
+ // Start a second request.
+ ProxyInfo info2;
+ TestCompletionCallback callback2;
+ rv = service->ResolveProxy(
+ GURL("http://request2"), &info2, &callback2, NULL, NULL);
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+
+ // This second request should have triggered the re-download of the PAC
+ // script (since we marked the network as having changed).
+ EXPECT_TRUE(fetcher->has_pending_request());
+ EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
+
+ // Nothing has been sent to the resolver yet.
+ EXPECT_TRUE(resolver->pending_requests().empty());
+
+ // Simulate the PAC script fetch as having completed (this time with
+ // different data).
+ fetcher->NotifyFetchCompletion(OK, "pac-v2");
+
+ // Now that the PAC script is downloaded, the second request will have been
+ // sent to the proxy resolver.
+ EXPECT_EQ("pac-v2", resolver->pending_set_pac_script_request()->pac_bytes());
+ resolver->pending_set_pac_script_request()->CompleteNow(OK);
+
+ ASSERT_EQ(1u, resolver->pending_requests().size());
+ EXPECT_EQ(GURL("http://request2"), resolver->pending_requests()[0]->url());
+
+ // Complete the pending second request.
+ resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80");
+ resolver->pending_requests()[0]->CompleteNow(OK);
+
+ // Wait for completion callback, and verify that the request ran as expected.
+ EXPECT_EQ(OK, callback2.WaitForResult());
+ EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
+}
+
} // namespace net
« no previous file with comments | « net/proxy/proxy_service.cc ('k') | webkit/tools/test_shell/test_shell_request_context.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698