Chromium Code Reviews| 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..23731d11dfe7a999dcaab40f502641ffdf1915f3 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" |
| @@ -22,6 +25,8 @@ |
| using testing::IgnoreResult; |
| using testing::InvokeWithoutArgs; |
| +using testing::Mock; |
| +using testing::StrictMock; |
| using testing::_; |
| namespace policy { |
| @@ -521,4 +526,77 @@ TEST_F(DeviceManagementServiceTest, CancelDuringCallback) { |
| EXPECT_FALSE(backend_.get()); |
| } |
| +TEST_F(DeviceManagementServiceTest, RetryOnProxyError) { |
| + // Make a request. |
| + StrictMock<DeviceRegisterResponseDelegateMock> mock; |
| + |
| + 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) != 0); |
|
Mattias Nissler (ping if slow)
2011/09/28 09:06:18
you can drop the != 0
Joao da Silva
2011/09/28 19:20:27
Done.
|
| + EXPECT_EQ(original_url, fetcher->original_url()); |
| + EXPECT_EQ(upload_data, fetcher->upload_data()); |
| + |
| + // No calls should have been made to the mock. |
|
Mattias Nissler (ping if slow)
2011/09/28 09:06:18
Other code uses EXPECT_CALL().Times(0) instead of
Joao da Silva
2011/09/28 19:20:27
Done.
|
| + Mock::VerifyAndClearExpectations(&mock); |
| +} |
| + |
| +TEST_F(DeviceManagementServiceTest, RetryOnBadResponseFromProxy) { |
| + // Make a request. |
| + StrictMock<DeviceRegisterResponseDelegateMock> mock; |
| + |
| + 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()); |
| + |
| + // No calls should have been made to the mock. |
| + Mock::VerifyAndClearExpectations(&mock); |
| +} |
| + |
| } // namespace policy |