| 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
|
|
|