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

Side by Side Diff: chrome/browser/policy/device_management_service_unittest.cc

Issue 8952027: base::Callback-ify policy::DeviceManagementService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <ostream> 5 #include <ostream>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/bind.h"
8 #include "base/message_loop.h" 9 #include "base/message_loop.h"
9 #include "base/string_split.h" 10 #include "base/string_split.h"
10 #include "chrome/browser/policy/device_management_backend_impl.h" 11 #include "chrome/browser/policy/cloud_policy_constants.h"
11 #include "chrome/browser/policy/device_management_backend_mock.h"
12 #include "chrome/browser/policy/device_management_service.h" 12 #include "chrome/browser/policy/device_management_service.h"
13 #include "chrome/browser/policy/proto/device_management_constants.h"
14 #include "chrome/test/base/testing_browser_process.h" 13 #include "chrome/test/base/testing_browser_process.h"
15 #include "content/test/test_browser_thread.h" 14 #include "content/test/test_browser_thread.h"
16 #include "content/test/test_url_fetcher_factory.h" 15 #include "content/test/test_url_fetcher_factory.h"
17 #include "net/base/escape.h" 16 #include "net/base/escape.h"
18 #include "net/base/load_flags.h" 17 #include "net/base/load_flags.h"
19 #include "net/base/net_errors.h" 18 #include "net/base/net_errors.h"
20 #include "net/http/http_response_headers.h" 19 #include "net/http/http_response_headers.h"
21 #include "net/url_request/url_request_status.h" 20 #include "net/url_request/url_request_status.h"
22 #include "net/url_request/url_request_test_util.h" 21 #include "net/url_request/url_request_test_util.h"
23 #include "testing/gmock/include/gmock/gmock.h" 22 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
25 24
26 using content::BrowserThread; 25 using content::BrowserThread;
27 using testing::IgnoreResult;
28 using testing::InvokeWithoutArgs; 26 using testing::InvokeWithoutArgs;
Joao da Silva 2012/01/02 16:14:43 Nit: not used
Mattias Nissler (ping if slow) 2012/01/02 17:53:23 Done.
29 using testing::_; 27 using testing::_;
30 28
31 namespace em = enterprise_management; 29 namespace em = enterprise_management;
32 30
33 namespace policy { 31 namespace policy {
34 32
35 const char kServiceUrl[] = "https://example.com/management_service"; 33 const char kServiceUrl[] = "https://example.com/management_service";
36 34
37 // Encoded empty response messages for testing the error code paths. 35 // Encoded empty response messages for testing the error code paths.
38 const char kResponseEmpty[] = "\x08\x00"; 36 const char kResponseEmpty[] = "\x08\x00";
39 37
40 #define PROTO_STRING(name) (std::string(name, arraysize(name) - 1)) 38 #define PROTO_STRING(name) (std::string(name, arraysize(name) - 1))
41 39
42 // Some helper constants. 40 // Some helper constants.
43 const char kGaiaAuthToken[] = "gaia-auth-token"; 41 const char kGaiaAuthToken[] = "gaia-auth-token";
44 const char kOAuthToken[] = "oauth-token"; 42 const char kOAuthToken[] = "oauth-token";
45 const char kDMToken[] = "device-management-token"; 43 const char kDMToken[] = "device-management-token";
46 const char kDeviceId[] = "device-id"; 44 const char kClientID[] = "device-id";
47 45
48 // Unit tests for the device management policy service. The tests are run 46 // Unit tests for the device management policy service. The tests are run
49 // against a TestURLFetcherFactory that is used to short-circuit the request 47 // against a TestURLFetcherFactory that is used to short-circuit the request
50 // without calling into the actual network stack. 48 // without calling into the actual network stack.
51 template<typename TESTBASE> 49 class DeviceManagementServiceTestBase : public testing::Test {
52 class DeviceManagementServiceTestBase : public TESTBASE {
53 protected: 50 protected:
54 DeviceManagementServiceTestBase() 51 DeviceManagementServiceTestBase()
55 : ui_thread_(BrowserThread::UI, &loop_), 52 : ui_thread_(BrowserThread::UI, &loop_),
56 io_thread_(BrowserThread::IO, &loop_) { 53 io_thread_(BrowserThread::IO, &loop_) {
57 ResetService(); 54 ResetService();
58 InitializeService(); 55 InitializeService();
59 } 56 }
60 57
61 virtual void TearDown() { 58 virtual void TearDown() {
62 backend_.reset();
63 service_.reset(); 59 service_.reset();
64 loop_.RunAllPending(); 60 loop_.RunAllPending();
65 TESTBASE::TearDown();
66 } 61 }
67 62
68 void ResetService() { 63 void ResetService() {
69 backend_.reset();
70 service_.reset(new DeviceManagementService(kServiceUrl)); 64 service_.reset(new DeviceManagementService(kServiceUrl));
71 backend_.reset(service_->CreateBackend());
72 } 65 }
73 66
74 void InitializeService() { 67 void InitializeService() {
75 service_->ScheduleInitialization(0); 68 service_->ScheduleInitialization(0);
76 loop_.RunAllPending(); 69 loop_.RunAllPending();
77 } 70 }
78 71
72 DeviceManagementRequestJob* StartRegistrationJob() {
73 DeviceManagementRequestJob* job =
74 service_->CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION);
75 job->SetGaiaToken(kGaiaAuthToken);
76 job->SetOAuthToken(kOAuthToken);
77 job->SetClientID(kClientID);
78 job->GetRequest()->mutable_register_request();
79 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone,
80 base::Unretained(this)));
81 return job;
82 }
83
84 DeviceManagementRequestJob* StartUnregistrationJob() {
85 DeviceManagementRequestJob* job =
86 service_->CreateJob(DeviceManagementRequestJob::TYPE_UNREGISTRATION);
87 job->SetDMToken(kDMToken);
88 job->SetClientID(kClientID);
89 job->GetRequest()->mutable_unregister_request();
90 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone,
91 base::Unretained(this)));
92 return job;
93 }
94
95 DeviceManagementRequestJob* StartPolicyFetchJob() {
96 DeviceManagementRequestJob* job =
97 service_->CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH);
98 job->SetGaiaToken(kGaiaAuthToken);
99 job->SetOAuthToken(kOAuthToken);
100 job->SetClientID(kClientID);
101 em::PolicyFetchRequest* fetch_request =
102 job->GetRequest()->mutable_policy_request()->add_request();
103 fetch_request->set_policy_type(dm_protocol::kChromeUserPolicyType);
104 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone,
105 base::Unretained(this)));
106 return job;
107 }
108
109 DeviceManagementRequestJob* StartAutoEnrollmentJob() {
110 DeviceManagementRequestJob* job =
111 service_->CreateJob(DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT);
112 job->SetClientID(kClientID);
113 em::DeviceAutoEnrollmentRequest* request =
114 job->GetRequest()->mutable_auto_enrollment_request();
115 request->set_modulus(1);
116 request->set_remainder(0);
117 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone,
118 base::Unretained(this)));
119 return job;
120 }
121
122 void SendResponse(TestURLFetcher* fetcher,
123 const net::URLRequestStatus request_status,
124 int http_status,
125 const std::string& response) {
126 fetcher->set_url(GURL(kServiceUrl));
127 fetcher->set_status(request_status);
128 fetcher->set_response_code(http_status);
129 fetcher->SetResponseString(response);
130 fetcher->delegate()->OnURLFetchComplete(fetcher);
131 }
132
133 MOCK_METHOD2(OnJobDone, void(DeviceManagementStatus,
134 const em::DeviceManagementResponse&));
135
79 TestURLFetcherFactory factory_; 136 TestURLFetcherFactory factory_;
80 scoped_ptr<DeviceManagementService> service_; 137 scoped_ptr<DeviceManagementService> service_;
81 scoped_ptr<DeviceManagementBackend> backend_;
82 138
83 private: 139 private:
84 MessageLoopForUI loop_; 140 MessageLoopForUI loop_;
85 content::TestBrowserThread ui_thread_; 141 content::TestBrowserThread ui_thread_;
86 content::TestBrowserThread io_thread_; 142 content::TestBrowserThread io_thread_;
87 }; 143 };
88 144
89 struct FailedRequestParams { 145 struct FailedRequestParams {
90 FailedRequestParams(DeviceManagementBackend::ErrorCode expected_error, 146 FailedRequestParams(DeviceManagementStatus expected_status,
91 net::URLRequestStatus::Status request_status, 147 net::URLRequestStatus::Status request_status,
92 int http_status, 148 int http_status,
93 const std::string& response) 149 const std::string& response)
94 : expected_error_(expected_error), 150 : expected_status_(expected_status),
95 request_status_(request_status, 0), 151 request_status_(request_status, 0),
96 http_status_(http_status), 152 http_status_(http_status),
97 response_(response) {} 153 response_(response) {}
98 154
99 DeviceManagementBackend::ErrorCode expected_error_; 155 DeviceManagementStatus expected_status_;
100 net::URLRequestStatus request_status_; 156 net::URLRequestStatus request_status_;
101 int http_status_; 157 int http_status_;
102 std::string response_; 158 std::string response_;
103 }; 159 };
104 160
105 void PrintTo(const FailedRequestParams& params, std::ostream* os) { 161 void PrintTo(const FailedRequestParams& params, std::ostream* os) {
106 *os << "FailedRequestParams " << params.expected_error_ 162 *os << "FailedRequestParams " << params.expected_status_
107 << " " << params.request_status_.status() 163 << " " << params.request_status_.status()
108 << " " << params.http_status_; 164 << " " << params.http_status_;
109 } 165 }
110 166
111 // A parameterized test case for erroneous response situations, they're mostly 167 // A parameterized test case for erroneous response situations, they're mostly
112 // the same for all kinds of requests. 168 // the same for all kinds of requests.
113 class DeviceManagementServiceFailedRequestTest 169 class DeviceManagementServiceFailedRequestTest
114 : public DeviceManagementServiceTestBase< 170 : public DeviceManagementServiceTestBase,
115 testing::TestWithParam<FailedRequestParams> > { 171 public testing::WithParamInterface<FailedRequestParams> {
116 }; 172 };
117 173
118 TEST_P(DeviceManagementServiceFailedRequestTest, RegisterRequest) { 174 TEST_P(DeviceManagementServiceFailedRequestTest, RegisterRequest) {
119 DeviceRegisterResponseDelegateMock mock; 175 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _));
120 EXPECT_CALL(mock, OnError(GetParam().expected_error_)); 176 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
121 em::DeviceRegisterRequest request;
122 backend_->ProcessRegisterRequest(kGaiaAuthToken, kOAuthToken,
123 kDeviceId, request, &mock);
124 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 177 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
125 ASSERT_TRUE(fetcher); 178 ASSERT_TRUE(fetcher);
126 179
127 fetcher->set_url(GURL(kServiceUrl)); 180 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_,
128 fetcher->set_status(GetParam().request_status_); 181 GetParam().response_);
129 fetcher->set_response_code(GetParam().http_status_);
130 fetcher->SetResponseString(GetParam().response_);
131 fetcher->delegate()->OnURLFetchComplete(fetcher);
132 } 182 }
133 183
134 TEST_P(DeviceManagementServiceFailedRequestTest, UnregisterRequest) { 184 TEST_P(DeviceManagementServiceFailedRequestTest, UnregisterRequest) {
135 DeviceUnregisterResponseDelegateMock mock; 185 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _));
136 EXPECT_CALL(mock, OnError(GetParam().expected_error_)); 186 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob());
137 em::DeviceUnregisterRequest request;
138 backend_->ProcessUnregisterRequest(kDMToken, kDeviceId, request, &mock);
139 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 187 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
140 ASSERT_TRUE(fetcher); 188 ASSERT_TRUE(fetcher);
141 189
142 fetcher->set_url(GURL(kServiceUrl)); 190 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_,
143 fetcher->set_status(GetParam().request_status_); 191 GetParam().response_);
144 fetcher->set_response_code(GetParam().http_status_);
145 fetcher->SetResponseString(GetParam().response_);
146 fetcher->delegate()->OnURLFetchComplete(fetcher);
147 } 192 }
148 193
149 TEST_P(DeviceManagementServiceFailedRequestTest, PolicyRequest) { 194 TEST_P(DeviceManagementServiceFailedRequestTest, PolicyRequest) {
150 DevicePolicyResponseDelegateMock mock; 195 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _));
151 EXPECT_CALL(mock, OnError(GetParam().expected_error_)); 196 scoped_ptr<DeviceManagementRequestJob> request_job(StartPolicyFetchJob());
152 em::DevicePolicyRequest request;
153 request.set_policy_scope(kChromePolicyScope);
154 em::DevicePolicySettingRequest* setting_request =
155 request.add_setting_request();
156 setting_request->set_key(kChromeDevicePolicySettingKey);
157 backend_->ProcessPolicyRequest(kDMToken, kDeviceId,
158 CloudPolicyDataStore::USER_AFFILIATION_NONE,
159 request, NULL, &mock);
160 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 197 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
161 ASSERT_TRUE(fetcher); 198 ASSERT_TRUE(fetcher);
162 199
163 fetcher->set_url(GURL(kServiceUrl)); 200 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_,
164 fetcher->set_status(GetParam().request_status_); 201 GetParam().response_);
165 fetcher->set_response_code(GetParam().http_status_);
166 fetcher->SetResponseString(GetParam().response_);
167 fetcher->delegate()->OnURLFetchComplete(fetcher);
168 } 202 }
169 203
170 TEST_P(DeviceManagementServiceFailedRequestTest, AutoEnrollmentRequest) { 204 TEST_P(DeviceManagementServiceFailedRequestTest, AutoEnrollmentRequest) {
171 DeviceAutoEnrollmentResponseDelegateMock mock; 205 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _));
172 EXPECT_CALL(mock, OnError(GetParam().expected_error_)); 206 scoped_ptr<DeviceManagementRequestJob> request_job(StartAutoEnrollmentJob());
173 em::DeviceAutoEnrollmentRequest request;
174 request.set_modulus(1);
175 request.set_remainder(0);
176 backend_->ProcessAutoEnrollmentRequest(kDeviceId, request, &mock);
177 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 207 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
178 ASSERT_TRUE(fetcher); 208 ASSERT_TRUE(fetcher);
179 209
180 fetcher->set_url(GURL(kServiceUrl)); 210 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_,
181 fetcher->set_status(GetParam().request_status_); 211 GetParam().response_);
182 fetcher->set_response_code(GetParam().http_status_);
183 fetcher->SetResponseString(GetParam().response_);
184 fetcher->delegate()->OnURLFetchComplete(fetcher);
185 } 212 }
186 213
187 INSTANTIATE_TEST_CASE_P( 214 INSTANTIATE_TEST_CASE_P(
188 DeviceManagementServiceFailedRequestTestInstance, 215 DeviceManagementServiceFailedRequestTestInstance,
189 DeviceManagementServiceFailedRequestTest, 216 DeviceManagementServiceFailedRequestTest,
190 testing::Values( 217 testing::Values(
191 FailedRequestParams( 218 FailedRequestParams(
192 DeviceManagementBackend::kErrorRequestFailed, 219 DM_STATUS_REQUEST_FAILED,
193 net::URLRequestStatus::FAILED, 220 net::URLRequestStatus::FAILED,
194 200, 221 200,
195 PROTO_STRING(kResponseEmpty)), 222 PROTO_STRING(kResponseEmpty)),
196 FailedRequestParams( 223 FailedRequestParams(
197 DeviceManagementBackend::kErrorHttpStatus, 224 DM_STATUS_HTTP_STATUS_ERROR,
198 net::URLRequestStatus::SUCCESS, 225 net::URLRequestStatus::SUCCESS,
199 666, 226 666,
200 PROTO_STRING(kResponseEmpty)), 227 PROTO_STRING(kResponseEmpty)),
201 FailedRequestParams( 228 FailedRequestParams(
202 DeviceManagementBackend::kErrorResponseDecoding, 229 DM_STATUS_RESPONSE_DECODING_ERROR,
203 net::URLRequestStatus::SUCCESS, 230 net::URLRequestStatus::SUCCESS,
204 200, 231 200,
205 PROTO_STRING("Not a protobuf.")), 232 PROTO_STRING("Not a protobuf.")),
206 FailedRequestParams( 233 FailedRequestParams(
207 DeviceManagementBackend::kErrorServiceManagementNotSupported, 234 DM_STATUS_SERVICE_MANAGEMENT_NOT_SUPPORTED,
208 net::URLRequestStatus::SUCCESS, 235 net::URLRequestStatus::SUCCESS,
209 403, 236 403,
210 PROTO_STRING(kResponseEmpty)), 237 PROTO_STRING(kResponseEmpty)),
211 FailedRequestParams( 238 FailedRequestParams(
212 DeviceManagementBackend::kErrorServiceInvalidSerialNumber, 239 DM_STATUS_SERVICE_INVALID_SERIAL_NUMBER,
213 net::URLRequestStatus::SUCCESS, 240 net::URLRequestStatus::SUCCESS,
214 405, 241 405,
215 PROTO_STRING(kResponseEmpty)), 242 PROTO_STRING(kResponseEmpty)),
216 FailedRequestParams( 243 FailedRequestParams(
217 DeviceManagementBackend::kErrorServiceDeviceIdConflict, 244 DM_STATUS_SERVICE_DEVICE_ID_CONFLICT,
218 net::URLRequestStatus::SUCCESS, 245 net::URLRequestStatus::SUCCESS,
219 409, 246 409,
220 PROTO_STRING(kResponseEmpty)), 247 PROTO_STRING(kResponseEmpty)),
221 FailedRequestParams( 248 FailedRequestParams(
222 DeviceManagementBackend::kErrorServiceDeviceNotFound, 249 DM_STATUS_SERVICE_DEVICE_NOT_FOUND,
223 net::URLRequestStatus::SUCCESS, 250 net::URLRequestStatus::SUCCESS,
224 410, 251 410,
225 PROTO_STRING(kResponseEmpty)), 252 PROTO_STRING(kResponseEmpty)),
226 // TODO(pastarmovj): Remove once DM server is deployed. 253 // TODO(pastarmovj): Remove once DM server is deployed.
227 FailedRequestParams( 254 FailedRequestParams(
228 DeviceManagementBackend::kErrorServiceDeviceNotFound, 255 DM_STATUS_SERVICE_DEVICE_NOT_FOUND,
229 net::URLRequestStatus::SUCCESS, 256 net::URLRequestStatus::SUCCESS,
230 901, 257 901,
231 PROTO_STRING(kResponseEmpty)), 258 PROTO_STRING(kResponseEmpty)),
232 FailedRequestParams( 259 FailedRequestParams(
233 DeviceManagementBackend::kErrorServiceManagementTokenInvalid, 260 DM_STATUS_SERVICE_MANAGEMENT_TOKEN_INVALID,
234 net::URLRequestStatus::SUCCESS, 261 net::URLRequestStatus::SUCCESS,
235 401, 262 401,
236 PROTO_STRING(kResponseEmpty)), 263 PROTO_STRING(kResponseEmpty)),
237 FailedRequestParams( 264 FailedRequestParams(
238 DeviceManagementBackend::kErrorRequestInvalid, 265 DM_STATUS_REQUEST_INVALID,
239 net::URLRequestStatus::SUCCESS, 266 net::URLRequestStatus::SUCCESS,
240 400, 267 400,
241 PROTO_STRING(kResponseEmpty)), 268 PROTO_STRING(kResponseEmpty)),
242 FailedRequestParams( 269 FailedRequestParams(
243 DeviceManagementBackend::kErrorTemporaryUnavailable, 270 DM_STATUS_TEMPORARY_UNAVAILABLE,
244 net::URLRequestStatus::SUCCESS, 271 net::URLRequestStatus::SUCCESS,
245 404, 272 404,
246 PROTO_STRING(kResponseEmpty)), 273 PROTO_STRING(kResponseEmpty)),
247 FailedRequestParams( 274 FailedRequestParams(
248 DeviceManagementBackend::kErrorServiceActivationPending, 275 DM_STATUS_SERVICE_ACTIVATION_PENDING,
249 net::URLRequestStatus::SUCCESS, 276 net::URLRequestStatus::SUCCESS,
250 412, 277 412,
251 PROTO_STRING(kResponseEmpty)), 278 PROTO_STRING(kResponseEmpty)),
252 // TODO(pastarmovj): Remove once DM server is deployed. 279 // TODO(pastarmovj): Remove once DM server is deployed.
253 FailedRequestParams( 280 FailedRequestParams(
254 DeviceManagementBackend::kErrorServiceActivationPending, 281 DM_STATUS_SERVICE_ACTIVATION_PENDING,
255 net::URLRequestStatus::SUCCESS, 282 net::URLRequestStatus::SUCCESS,
256 491, 283 491,
257 PROTO_STRING(kResponseEmpty)))); 284 PROTO_STRING(kResponseEmpty))));
258 285
259 // Simple query parameter parser for testing. 286 // Simple query parameter parser for testing.
260 class QueryParams { 287 class QueryParams {
261 public: 288 public:
262 explicit QueryParams(const std::string& query) { 289 explicit QueryParams(const std::string& query) {
263 base::SplitStringIntoKeyValuePairs(query, '=', '&', &params_); 290 base::SplitStringIntoKeyValuePairs(query, '=', '&', &params_);
264 } 291 }
(...skipping 25 matching lines...) Expand all
290 } 317 }
291 return found; 318 return found;
292 } 319 }
293 320
294 private: 321 private:
295 typedef std::vector<std::pair<std::string, std::string> > ParamMap; 322 typedef std::vector<std::pair<std::string, std::string> > ParamMap;
296 ParamMap params_; 323 ParamMap params_;
297 }; 324 };
298 325
299 class DeviceManagementServiceTest 326 class DeviceManagementServiceTest
300 : public DeviceManagementServiceTestBase<testing::Test> { 327 : public DeviceManagementServiceTestBase {
301 public:
302 void ResetBackend() {
303 backend_.reset();
304 }
305
306 protected: 328 protected:
307 void CheckURLAndQueryParams(const GURL& request_url, 329 void CheckURLAndQueryParams(const GURL& request_url,
308 const std::string& request_type, 330 const std::string& request_type,
309 const std::string& device_id) { 331 const std::string& device_id) {
310 const GURL service_url(kServiceUrl); 332 const GURL service_url(kServiceUrl);
311 EXPECT_EQ(service_url.scheme(), request_url.scheme()); 333 EXPECT_EQ(service_url.scheme(), request_url.scheme());
312 EXPECT_EQ(service_url.host(), request_url.host()); 334 EXPECT_EQ(service_url.host(), request_url.host());
313 EXPECT_EQ(service_url.port(), request_url.port()); 335 EXPECT_EQ(service_url.port(), request_url.port());
314 EXPECT_EQ(service_url.path(), request_url.path()); 336 EXPECT_EQ(service_url.path(), request_url.path());
315 337
316 QueryParams query_params(request_url.query()); 338 QueryParams query_params(request_url.query());
317 EXPECT_TRUE(query_params.Check( 339 EXPECT_TRUE(query_params.Check(dm_protocol::kParamRequest, request_type));
318 DeviceManagementBackendImpl::kParamRequest, request_type)); 340 EXPECT_TRUE(query_params.Check(dm_protocol::kParamDeviceID, device_id));
319 EXPECT_TRUE(query_params.Check( 341 EXPECT_TRUE(query_params.Check(dm_protocol::kParamDeviceType,
320 DeviceManagementBackendImpl::kParamDeviceID, device_id)); 342 dm_protocol::kValueDeviceType));
321 EXPECT_TRUE(query_params.Check( 343 EXPECT_TRUE(query_params.Check(dm_protocol::kParamAppType,
322 DeviceManagementBackendImpl::kParamDeviceType, 344 dm_protocol::kValueAppType));
323 DeviceManagementBackendImpl::kValueDeviceType));
324 EXPECT_TRUE(query_params.Check(
325 DeviceManagementBackendImpl::kParamAppType,
326 DeviceManagementBackendImpl::kValueAppType));
327 EXPECT_TRUE(query_params.Check(
328 DeviceManagementBackendImpl::kParamAgent,
329 DeviceManagementBackendImpl::GetAgentString()));
330 } 345 }
331 }; 346 };
332 347
333 MATCHER_P(MessageEquals, reference, "") { 348 MATCHER_P(MessageEquals, reference, "") {
334 std::string reference_data; 349 std::string reference_data;
335 std::string arg_data; 350 std::string arg_data;
336 return arg.SerializeToString(&arg_data) && 351 return arg.SerializeToString(&arg_data) &&
337 reference.SerializeToString(&reference_data) && 352 reference.SerializeToString(&reference_data) &&
338 arg_data == reference_data; 353 arg_data == reference_data;
339 } 354 }
340 355
341 TEST_F(DeviceManagementServiceTest, RegisterRequest) { 356 TEST_F(DeviceManagementServiceTest, RegisterRequest) {
342 DeviceRegisterResponseDelegateMock mock; 357 em::DeviceManagementResponse expected_response;
343 em::DeviceRegisterResponse expected_response; 358 expected_response.mutable_register_response()->
344 expected_response.set_device_management_token(kDMToken); 359 set_device_management_token(kDMToken);
345 EXPECT_CALL(mock, HandleRegisterResponse(MessageEquals(expected_response))); 360 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS,
346 em::DeviceRegisterRequest request; 361 MessageEquals(expected_response)));
347 backend_->ProcessRegisterRequest(kGaiaAuthToken, kOAuthToken, 362 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
348 kDeviceId, request, &mock);
349 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 363 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
350 ASSERT_TRUE(fetcher); 364 ASSERT_TRUE(fetcher);
351 365
352 CheckURLAndQueryParams(fetcher->GetOriginalURL(), 366 CheckURLAndQueryParams(fetcher->GetOriginalURL(),
353 DeviceManagementBackendImpl::kValueRequestRegister, 367 dm_protocol::kValueRequestRegister,
354 kDeviceId); 368 kClientID);
355 369
356 em::DeviceManagementRequest expected_request_wrapper; 370 std::string expected_data;
357 expected_request_wrapper.mutable_register_request()->CopyFrom(request); 371 ASSERT_TRUE(request_job->GetRequest()->SerializeToString(&expected_data));
358 std::string expected_request_data; 372 EXPECT_EQ(expected_data, fetcher->upload_data());
359 ASSERT_TRUE(expected_request_wrapper.SerializeToString(
360 &expected_request_data));
361 EXPECT_EQ(expected_request_data, fetcher->upload_data());
362 373
363 // Generate the response. 374 // Generate the response.
364 std::string response_data; 375 std::string response_data;
365 em::DeviceManagementResponse response_wrapper; 376 ASSERT_TRUE(expected_response.SerializeToString(&response_data));
366 response_wrapper.mutable_register_response()->CopyFrom(expected_response);
367 ASSERT_TRUE(response_wrapper.SerializeToString(&response_data));
368 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); 377 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
369 fetcher->set_url(GURL(kServiceUrl)); 378 SendResponse(fetcher, status, 200, response_data);
370 fetcher->set_status(status);
371 fetcher->set_response_code(200);
372 fetcher->SetResponseString(response_data);
373 fetcher->delegate()->OnURLFetchComplete(fetcher);
374 } 379 }
375 380
376 TEST_F(DeviceManagementServiceTest, UnregisterRequest) { 381 TEST_F(DeviceManagementServiceTest, UnregisterRequest) {
377 DeviceUnregisterResponseDelegateMock mock; 382 em::DeviceManagementResponse expected_response;
378 em::DeviceUnregisterResponse expected_response; 383 expected_response.mutable_unregister_response();
379 EXPECT_CALL(mock, HandleUnregisterResponse(MessageEquals(expected_response))); 384 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS,
380 em::DeviceUnregisterRequest request; 385 MessageEquals(expected_response)));
381 backend_->ProcessUnregisterRequest(kDMToken, kDeviceId, request, &mock); 386 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob());
382 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 387 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
383 ASSERT_TRUE(fetcher); 388 ASSERT_TRUE(fetcher);
384 389
385 // Check the data the fetcher received. 390 // Check the data the fetcher received.
386 const GURL& request_url(fetcher->GetOriginalURL()); 391 const GURL& request_url(fetcher->GetOriginalURL());
387 const GURL service_url(kServiceUrl); 392 const GURL service_url(kServiceUrl);
388 EXPECT_EQ(service_url.scheme(), request_url.scheme()); 393 EXPECT_EQ(service_url.scheme(), request_url.scheme());
389 EXPECT_EQ(service_url.host(), request_url.host()); 394 EXPECT_EQ(service_url.host(), request_url.host());
390 EXPECT_EQ(service_url.port(), request_url.port()); 395 EXPECT_EQ(service_url.port(), request_url.port());
391 EXPECT_EQ(service_url.path(), request_url.path()); 396 EXPECT_EQ(service_url.path(), request_url.path());
392 397
393 CheckURLAndQueryParams(fetcher->GetOriginalURL(), 398 CheckURLAndQueryParams(fetcher->GetOriginalURL(),
394 DeviceManagementBackendImpl::kValueRequestUnregister, 399 dm_protocol::kValueRequestUnregister,
395 kDeviceId); 400 kClientID);
396 401
397 em::DeviceManagementRequest expected_request_wrapper; 402 std::string expected_data;
398 expected_request_wrapper.mutable_unregister_request()->CopyFrom(request); 403 ASSERT_TRUE(request_job->GetRequest()->SerializeToString(&expected_data));
399 std::string expected_request_data; 404 EXPECT_EQ(expected_data, fetcher->upload_data());
400 ASSERT_TRUE(expected_request_wrapper.SerializeToString(
401 &expected_request_data));
402 EXPECT_EQ(expected_request_data, fetcher->upload_data());
403 405
404 // Generate the response. 406 // Generate the response.
405 std::string response_data; 407 std::string response_data;
406 em::DeviceManagementResponse response_wrapper; 408 ASSERT_TRUE(expected_response.SerializeToString(&response_data));
407 response_wrapper.mutable_unregister_response()->CopyFrom(expected_response);
408 ASSERT_TRUE(response_wrapper.SerializeToString(&response_data));
409 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); 409 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
410 fetcher->set_url(GURL(kServiceUrl)); 410 SendResponse(fetcher, status, 200, response_data);
411 fetcher->set_status(status);
412 fetcher->set_response_code(200);
413 fetcher->SetResponseString(response_data);
414 fetcher->delegate()->OnURLFetchComplete(fetcher);
415 } 411 }
416 412
417 TEST_F(DeviceManagementServiceTest, CancelRegisterRequest) { 413 TEST_F(DeviceManagementServiceTest, CancelRegisterRequest) {
418 DeviceRegisterResponseDelegateMock mock; 414 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
419 EXPECT_CALL(mock, HandleRegisterResponse(_)).Times(0); 415 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
420 em::DeviceRegisterRequest request;
421 backend_->ProcessRegisterRequest(kGaiaAuthToken, kOAuthToken,
422 kDeviceId, request, &mock);
423 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 416 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
424 ASSERT_TRUE(fetcher); 417 ASSERT_TRUE(fetcher);
425 418
426 // There shouldn't be any callbacks. 419 // There shouldn't be any callbacks.
427 backend_.reset(); 420 request_job.reset();
428 } 421 }
429 422
430 TEST_F(DeviceManagementServiceTest, CancelUnregisterRequest) { 423 TEST_F(DeviceManagementServiceTest, CancelUnregisterRequest) {
431 DeviceUnregisterResponseDelegateMock mock; 424 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
432 EXPECT_CALL(mock, HandleUnregisterResponse(_)).Times(0); 425 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob());
433 em::DeviceUnregisterRequest request;
434 backend_->ProcessUnregisterRequest(kDMToken, kDeviceId, request, &mock);
435 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 426 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
436 ASSERT_TRUE(fetcher); 427 ASSERT_TRUE(fetcher);
437 428
438 // There shouldn't be any callbacks. 429 // There shouldn't be any callbacks.
439 backend_.reset(); 430 request_job.reset();
440 } 431 }
441 432
442 TEST_F(DeviceManagementServiceTest, CancelPolicyRequest) { 433 TEST_F(DeviceManagementServiceTest, CancelPolicyRequest) {
443 DevicePolicyResponseDelegateMock mock; 434 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
444 EXPECT_CALL(mock, HandlePolicyResponse(_)).Times(0); 435 scoped_ptr<DeviceManagementRequestJob> request_job(StartPolicyFetchJob());
445 em::DevicePolicyRequest request;
446 request.set_policy_scope(kChromePolicyScope);
447 em::DevicePolicySettingRequest* setting_request =
448 request.add_setting_request();
449 setting_request->set_key(kChromeDevicePolicySettingKey);
450 setting_request->set_watermark("stale");
451 backend_->ProcessPolicyRequest(kDMToken, kDeviceId,
452 CloudPolicyDataStore::USER_AFFILIATION_NONE,
453 request, NULL, &mock);
454 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 436 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
455 ASSERT_TRUE(fetcher); 437 ASSERT_TRUE(fetcher);
456 438
457 // There shouldn't be any callbacks. 439 // There shouldn't be any callbacks.
458 backend_.reset(); 440 request_job.reset();
459 } 441 }
460 442
461 TEST_F(DeviceManagementServiceTest, JobQueueing) { 443 TEST_F(DeviceManagementServiceTest, JobQueueing) {
462 // Start with a non-initialized service. 444 // Start with a non-initialized service.
463 ResetService(); 445 ResetService();
464 446
447 em::DeviceManagementResponse expected_response;
448 expected_response.mutable_register_response()->
449 set_device_management_token(kDMToken);
450 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS,
451 MessageEquals(expected_response)));
452
465 // Make a request. We should not see any fetchers being created. 453 // Make a request. We should not see any fetchers being created.
466 DeviceRegisterResponseDelegateMock mock; 454 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
467 em::DeviceRegisterResponse expected_response;
468 expected_response.set_device_management_token(kDMToken);
469 EXPECT_CALL(mock, HandleRegisterResponse(MessageEquals(expected_response)));
470 em::DeviceRegisterRequest request;
471 backend_->ProcessRegisterRequest(kGaiaAuthToken, kOAuthToken,
472 kDeviceId, request, &mock);
473 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 455 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
474 ASSERT_FALSE(fetcher); 456 ASSERT_FALSE(fetcher);
475 457
476 // Now initialize the service. That should start the job. 458 // Now initialize the service. That should start the job.
477 InitializeService(); 459 InitializeService();
478 fetcher = factory_.GetFetcherByID(0); 460 fetcher = factory_.GetFetcherByID(0);
479 ASSERT_TRUE(fetcher); 461 ASSERT_TRUE(fetcher);
480 factory_.RemoveFetcherFromMap(0); 462 factory_.RemoveFetcherFromMap(0);
481 463
482 // Check that the request is processed as expected. 464 // Check that the request is processed as expected.
483 std::string response_data; 465 std::string response_data;
484 em::DeviceManagementResponse response_wrapper; 466 ASSERT_TRUE(expected_response.SerializeToString(&response_data));
485 response_wrapper.mutable_register_response()->CopyFrom(expected_response);
486 ASSERT_TRUE(response_wrapper.SerializeToString(&response_data));
487 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); 467 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
488 fetcher->set_url(GURL(kServiceUrl)); 468 SendResponse(fetcher, status, 200, response_data);
489 fetcher->set_status(status);
490 fetcher->set_response_code(200);
491 fetcher->SetResponseString(response_data);
492 fetcher->delegate()->OnURLFetchComplete(fetcher);
493 } 469 }
494 470
495 TEST_F(DeviceManagementServiceTest, CancelRequestAfterShutdown) { 471 TEST_F(DeviceManagementServiceTest, CancelRequestAfterShutdown) {
496 DevicePolicyResponseDelegateMock mock; 472 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
497 EXPECT_CALL(mock, HandlePolicyResponse(_)).Times(0); 473 scoped_ptr<DeviceManagementRequestJob> request_job(StartPolicyFetchJob());
498 em::DevicePolicyRequest request;
499 request.set_policy_scope(kChromePolicyScope);
500 em::DevicePolicySettingRequest* setting_request =
501 request.add_setting_request();
502 setting_request->set_key(kChromeDevicePolicySettingKey);
503 setting_request->set_watermark("stale");
504 backend_->ProcessPolicyRequest(kDMToken, kDeviceId,
505 CloudPolicyDataStore::USER_AFFILIATION_NONE,
506 request, NULL, &mock);
507 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 474 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
508 ASSERT_TRUE(fetcher); 475 ASSERT_TRUE(fetcher);
509 476
510 // Shutdown the service and cancel the job afterwards. 477 // Shutdown the service and cancel the job afterwards.
511 service_->Shutdown(); 478 service_->Shutdown();
512 backend_.reset(); 479 request_job.reset();
480 }
481
482 ACTION_P(ResetPointer, pointer) {
483 pointer->reset();
513 } 484 }
514 485
515 TEST_F(DeviceManagementServiceTest, CancelDuringCallback) { 486 TEST_F(DeviceManagementServiceTest, CancelDuringCallback) {
516 // Make a request. 487 // Make a request.
517 DeviceRegisterResponseDelegateMock mock; 488 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
518 EXPECT_CALL(mock, OnError(_))
519 .WillOnce(InvokeWithoutArgs(this,
520 &DeviceManagementServiceTest::ResetBackend))
521 .RetiresOnSaturation();
522 em::DeviceRegisterRequest request;
523 backend_->ProcessRegisterRequest(kGaiaAuthToken, kOAuthToken,
524 kDeviceId, request, &mock);
525 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 489 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
526 ASSERT_TRUE(fetcher); 490 ASSERT_TRUE(fetcher);
527 491
492 EXPECT_CALL(*this, OnJobDone(_, _))
493 .WillOnce(ResetPointer(&request_job));
494
528 // Generate a callback. 495 // Generate a callback.
529 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); 496 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
530 fetcher->set_url(GURL(kServiceUrl)); 497 SendResponse(fetcher, status, 500, "");
531 fetcher->set_status(status);
532 fetcher->set_response_code(500);
533 fetcher->delegate()->OnURLFetchComplete(fetcher);
534 498
535 // Backend should have been reset. 499 // Job should have been reset.
536 EXPECT_FALSE(backend_.get()); 500 EXPECT_FALSE(request_job.get());
537 } 501 }
538 502
539 TEST_F(DeviceManagementServiceTest, RetryOnProxyError) { 503 TEST_F(DeviceManagementServiceTest, RetryOnProxyError) {
540 // Make a request. 504 // Make a request.
541 DeviceRegisterResponseDelegateMock mock; 505 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
542 EXPECT_CALL(mock, HandleRegisterResponse(_)).Times(0);
543 EXPECT_CALL(mock, OnError(_)).Times(0);
544 506
545 em::DeviceRegisterRequest request; 507 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
546 backend_->ProcessRegisterRequest(kGaiaAuthToken, kOAuthToken,
547 kDeviceId, request, &mock);
548 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 508 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
549 ASSERT_TRUE(fetcher); 509 ASSERT_TRUE(fetcher);
550 EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) == 0); 510 EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) == 0);
551 const GURL original_url(fetcher->GetOriginalURL()); 511 const GURL original_url(fetcher->GetOriginalURL());
552 const std::string upload_data(fetcher->upload_data()); 512 const std::string upload_data(fetcher->upload_data());
553 513
554 // Generate a callback with a proxy failure. 514 // Generate a callback with a proxy failure.
555 net::URLRequestStatus status(net::URLRequestStatus::FAILED, 515 net::URLRequestStatus status(net::URLRequestStatus::FAILED,
556 net::ERR_PROXY_CONNECTION_FAILED); 516 net::ERR_PROXY_CONNECTION_FAILED);
557 fetcher->set_url(GURL(kServiceUrl)); 517 SendResponse(fetcher, status, 200, "");
558 fetcher->set_status(status);
559 fetcher->set_response_code(200);
560 fetcher->delegate()->OnURLFetchComplete(fetcher);
561 518
562 // Verify that a new URLFetcher was started that bypasses the proxy. 519 // Verify that a new URLFetcher was started that bypasses the proxy.
563 fetcher = factory_.GetFetcherByID(0); 520 fetcher = factory_.GetFetcherByID(0);
564 ASSERT_TRUE(fetcher); 521 ASSERT_TRUE(fetcher);
565 EXPECT_TRUE(fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY); 522 EXPECT_TRUE(fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY);
566 EXPECT_EQ(original_url, fetcher->GetOriginalURL()); 523 EXPECT_EQ(original_url, fetcher->GetOriginalURL());
567 EXPECT_EQ(upload_data, fetcher->upload_data()); 524 EXPECT_EQ(upload_data, fetcher->upload_data());
568 } 525 }
569 526
570 TEST_F(DeviceManagementServiceTest, RetryOnBadResponseFromProxy) { 527 TEST_F(DeviceManagementServiceTest, RetryOnBadResponseFromProxy) {
571 // Make a request. 528 // Make a request.
572 DeviceRegisterResponseDelegateMock mock; 529 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
573 EXPECT_CALL(mock, HandleRegisterResponse(_)).Times(0);
574 EXPECT_CALL(mock, OnError(_)).Times(0);
575 530
576 em::DeviceRegisterRequest request; 531 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
577 backend_->ProcessRegisterRequest(kGaiaAuthToken, kOAuthToken,
578 kDeviceId, request, &mock);
579 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 532 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
580 ASSERT_TRUE(fetcher); 533 ASSERT_TRUE(fetcher);
581 EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) == 0); 534 EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) == 0);
582 const GURL original_url(fetcher->GetOriginalURL()); 535 const GURL original_url(fetcher->GetOriginalURL());
583 const std::string upload_data(fetcher->upload_data()); 536 const std::string upload_data(fetcher->upload_data());
584 fetcher->set_was_fetched_via_proxy(true); 537 fetcher->set_was_fetched_via_proxy(true);
585 scoped_refptr<net::HttpResponseHeaders> headers; 538 scoped_refptr<net::HttpResponseHeaders> headers;
586 headers = new net::HttpResponseHeaders( 539 headers = new net::HttpResponseHeaders(
587 "HTTP/1.1 200 OK\0Content-type: bad/type\0\0"); 540 "HTTP/1.1 200 OK\0Content-type: bad/type\0\0");
588 fetcher->set_response_headers(headers); 541 fetcher->set_response_headers(headers);
589 542
590 // Generate a callback with a valid http response, that was generated by 543 // Generate a callback with a valid http response, that was generated by
591 // a bad/wrong proxy. 544 // a bad/wrong proxy.
592 net::URLRequestStatus status; 545 net::URLRequestStatus status;
593 fetcher->set_url(GURL(kServiceUrl)); 546 SendResponse(fetcher, status, 200, "");
594 fetcher->set_status(status);
595 fetcher->set_response_code(200);
596 fetcher->delegate()->OnURLFetchComplete(fetcher);
597 547
598 // Verify that a new URLFetcher was started that bypasses the proxy. 548 // Verify that a new URLFetcher was started that bypasses the proxy.
599 fetcher = factory_.GetFetcherByID(0); 549 fetcher = factory_.GetFetcherByID(0);
600 ASSERT_TRUE(fetcher); 550 ASSERT_TRUE(fetcher);
601 EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) != 0); 551 EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) != 0);
602 EXPECT_EQ(original_url, fetcher->GetOriginalURL()); 552 EXPECT_EQ(original_url, fetcher->GetOriginalURL());
603 EXPECT_EQ(upload_data, fetcher->upload_data()); 553 EXPECT_EQ(upload_data, fetcher->upload_data());
604 } 554 }
605 555
606 } // namespace policy 556 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698