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

Unified Diff: chrome/browser/policy/device_management_service_unittest.cc

Issue 8054013: Recover from bad proxy settings pointing to non-proxy servers that reply anyway. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased, reviewed Created 9 years, 3 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 | « chrome/browser/policy/device_management_service.cc ('k') | content/common/net/url_fetcher.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/policy/device_management_service_unittest.cc
diff --git a/chrome/browser/policy/device_management_service_unittest.cc b/chrome/browser/policy/device_management_service_unittest.cc
index 2d73098bb7029c152b507f06d90fb9a3c9743774..a09f46fd2b2f6a967239172b2cd0aea9ecef8a3e 100644
--- a/chrome/browser/policy/device_management_service_unittest.cc
+++ b/chrome/browser/policy/device_management_service_unittest.cc
@@ -15,6 +15,9 @@
#include "content/browser/browser_thread.h"
#include "content/test/test_url_fetcher_factory.h"
#include "net/base/escape.h"
+#include "net/base/load_flags.h"
+#include "net/base/net_errors.h"
+#include "net/http/http_response_headers.h"
#include "net/url_request/url_request_status.h"
#include "net/url_request/url_request_test_util.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -521,4 +524,75 @@ TEST_F(DeviceManagementServiceTest, CancelDuringCallback) {
EXPECT_FALSE(backend_.get());
}
+TEST_F(DeviceManagementServiceTest, RetryOnProxyError) {
+ // Make a request.
+ DeviceRegisterResponseDelegateMock mock;
+ EXPECT_CALL(mock, HandleRegisterResponse(_)).Times(0);
+ EXPECT_CALL(mock, OnError(_)).Times(0);
+
+ em::DeviceRegisterRequest request;
+ backend_->ProcessRegisterRequest(kGaiaAuthToken, kOAuthToken,
+ kDeviceId, request, &mock);
+ TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
+ ASSERT_TRUE(fetcher);
+ EXPECT_TRUE((fetcher->load_flags() & net::LOAD_BYPASS_PROXY) == 0);
+ const GURL original_url(fetcher->original_url());
+ const std::string upload_data(fetcher->upload_data());
+
+ // Generate a callback with a proxy failure.
+ net::URLRequestStatus status(net::URLRequestStatus::FAILED,
+ net::ERR_PROXY_CONNECTION_FAILED);
+ fetcher->delegate()->OnURLFetchComplete(fetcher,
+ GURL(kServiceUrl),
+ status,
+ 0,
+ net::ResponseCookies(),
+ "");
+
+ // Verify that a new URLFetcher was started that bypasses the proxy.
+ fetcher = factory_.GetFetcherByID(0);
+ ASSERT_TRUE(fetcher);
+ EXPECT_TRUE(fetcher->load_flags() & net::LOAD_BYPASS_PROXY);
+ EXPECT_EQ(original_url, fetcher->original_url());
+ EXPECT_EQ(upload_data, fetcher->upload_data());
+}
+
+TEST_F(DeviceManagementServiceTest, RetryOnBadResponseFromProxy) {
+ // Make a request.
+ DeviceRegisterResponseDelegateMock mock;
+ EXPECT_CALL(mock, HandleRegisterResponse(_)).Times(0);
+ EXPECT_CALL(mock, OnError(_)).Times(0);
+
+ em::DeviceRegisterRequest request;
+ backend_->ProcessRegisterRequest(kGaiaAuthToken, kOAuthToken,
+ kDeviceId, request, &mock);
+ TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
+ ASSERT_TRUE(fetcher);
+ EXPECT_TRUE((fetcher->load_flags() & net::LOAD_BYPASS_PROXY) == 0);
+ const GURL original_url(fetcher->original_url());
+ const std::string upload_data(fetcher->upload_data());
+ fetcher->set_was_fetched_via_proxy(true);
+ scoped_refptr<net::HttpResponseHeaders> headers;
+ headers = new net::HttpResponseHeaders(
+ "HTTP/1.1 200 OK\0Content-type: bad/type\0\0");
+ fetcher->set_response_headers(headers);
+
+ // Generate a callback with a valid http response, that was generated by
+ // a bad/wrong proxy.
+ net::URLRequestStatus status;
+ fetcher->delegate()->OnURLFetchComplete(fetcher,
+ GURL(kServiceUrl),
+ status,
+ 200,
+ net::ResponseCookies(),
+ "");
+
+ // Verify that a new URLFetcher was started that bypasses the proxy.
+ fetcher = factory_.GetFetcherByID(0);
+ ASSERT_TRUE(fetcher);
+ EXPECT_TRUE((fetcher->load_flags() & net::LOAD_BYPASS_PROXY) != 0);
+ EXPECT_EQ(original_url, fetcher->original_url());
+ EXPECT_EQ(upload_data, fetcher->upload_data());
+}
+
} // namespace policy
« no previous file with comments | « chrome/browser/policy/device_management_service.cc ('k') | content/common/net/url_fetcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698