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

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

Issue 12209070: Fix cloud policy duplicate registrations issue. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Loads of tests Created 7 years, 10 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/bind.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/string_split.h" 10 #include "base/string_split.h"
11 #include "chrome/browser/policy/cloud_policy_constants.h" 11 #include "chrome/browser/policy/cloud_policy_constants.h"
12 #include "chrome/browser/policy/device_management_service.h" 12 #include "chrome/browser/policy/device_management_service.h"
13 #include "chrome/test/base/testing_browser_process.h" 13 #include "chrome/test/base/testing_browser_process.h"
14 #include "content/public/test/test_browser_thread.h" 14 #include "content/public/test/test_browser_thread.h"
15 #include "net/base/escape.h" 15 #include "net/base/escape.h"
16 #include "net/base/load_flags.h" 16 #include "net/base/load_flags.h"
17 #include "net/base/net_errors.h" 17 #include "net/base/net_errors.h"
18 #include "net/http/http_response_headers.h" 18 #include "net/http/http_response_headers.h"
19 #include "net/url_request/test_url_fetcher_factory.h" 19 #include "net/url_request/test_url_fetcher_factory.h"
20 #include "net/url_request/url_request_status.h" 20 #include "net/url_request/url_request_status.h"
21 #include "net/url_request/url_request_test_util.h" 21 #include "net/url_request/url_request_test_util.h"
22 #include "testing/gmock/include/gmock/gmock.h" 22 #include "testing/gmock/include/gmock/gmock.h"
23 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
24 24
25 using content::BrowserThread; 25 using content::BrowserThread;
26 using testing::Mock;
26 using testing::_; 27 using testing::_;
27 28
28 namespace em = enterprise_management; 29 namespace em = enterprise_management;
29 30
30 namespace policy { 31 namespace policy {
31 32
32 const char kServiceUrl[] = "https://example.com/management_service"; 33 const char kServiceUrl[] = "https://example.com/management_service";
33 34
34 // Encoded empty response messages for testing the error code paths. 35 // Encoded empty response messages for testing the error code paths.
35 const char kResponseEmpty[] = "\x08\x00"; 36 const char kResponseEmpty[] = "\x08\x00";
(...skipping 25 matching lines...) Expand all
61 62
62 void ResetService() { 63 void ResetService() {
63 service_.reset(new DeviceManagementService(kServiceUrl)); 64 service_.reset(new DeviceManagementService(kServiceUrl));
64 } 65 }
65 66
66 void InitializeService() { 67 void InitializeService() {
67 service_->ScheduleInitialization(0); 68 service_->ScheduleInitialization(0);
68 loop_.RunUntilIdle(); 69 loop_.RunUntilIdle();
69 } 70 }
70 71
72 net::TestURLFetcher* GetFetcher() {
73 return factory_.GetFetcherByID(DeviceManagementService::kURLFetcherID);
74 }
75
71 DeviceManagementRequestJob* StartRegistrationJob() { 76 DeviceManagementRequestJob* StartRegistrationJob() {
72 DeviceManagementRequestJob* job = 77 DeviceManagementRequestJob* job =
73 service_->CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION); 78 service_->CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION);
74 job->SetGaiaToken(kGaiaAuthToken); 79 job->SetGaiaToken(kGaiaAuthToken);
75 job->SetOAuthToken(kOAuthToken); 80 job->SetOAuthToken(kOAuthToken);
76 job->SetClientID(kClientID); 81 job->SetClientID(kClientID);
77 job->GetRequest()->mutable_register_request(); 82 job->GetRequest()->mutable_register_request();
83 job->SetRetryCallback(base::Bind(
84 &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this)));
78 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone, 85 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone,
79 base::Unretained(this))); 86 base::Unretained(this)));
80 return job; 87 return job;
81 } 88 }
82 89
83 DeviceManagementRequestJob* StartUnregistrationJob() { 90 DeviceManagementRequestJob* StartUnregistrationJob() {
84 DeviceManagementRequestJob* job = 91 DeviceManagementRequestJob* job =
85 service_->CreateJob(DeviceManagementRequestJob::TYPE_UNREGISTRATION); 92 service_->CreateJob(DeviceManagementRequestJob::TYPE_UNREGISTRATION);
86 job->SetDMToken(kDMToken); 93 job->SetDMToken(kDMToken);
87 job->SetClientID(kClientID); 94 job->SetClientID(kClientID);
88 job->GetRequest()->mutable_unregister_request(); 95 job->GetRequest()->mutable_unregister_request();
96 job->SetRetryCallback(base::Bind(
97 &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this)));
89 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone, 98 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone,
90 base::Unretained(this))); 99 base::Unretained(this)));
91 return job; 100 return job;
92 } 101 }
93 102
94 DeviceManagementRequestJob* StartPolicyFetchJob() { 103 DeviceManagementRequestJob* StartPolicyFetchJob() {
95 DeviceManagementRequestJob* job = 104 DeviceManagementRequestJob* job =
96 service_->CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH); 105 service_->CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH);
97 job->SetGaiaToken(kGaiaAuthToken); 106 job->SetGaiaToken(kGaiaAuthToken);
98 job->SetOAuthToken(kOAuthToken); 107 job->SetOAuthToken(kOAuthToken);
99 job->SetClientID(kClientID); 108 job->SetClientID(kClientID);
100 em::PolicyFetchRequest* fetch_request = 109 em::PolicyFetchRequest* fetch_request =
101 job->GetRequest()->mutable_policy_request()->add_request(); 110 job->GetRequest()->mutable_policy_request()->add_request();
102 fetch_request->set_policy_type(dm_protocol::kChromeUserPolicyType); 111 fetch_request->set_policy_type(dm_protocol::kChromeUserPolicyType);
112 job->SetRetryCallback(base::Bind(
113 &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this)));
103 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone, 114 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone,
104 base::Unretained(this))); 115 base::Unretained(this)));
105 return job; 116 return job;
106 } 117 }
107 118
108 DeviceManagementRequestJob* StartAutoEnrollmentJob() { 119 DeviceManagementRequestJob* StartAutoEnrollmentJob() {
109 DeviceManagementRequestJob* job = 120 DeviceManagementRequestJob* job =
110 service_->CreateJob(DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT); 121 service_->CreateJob(DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT);
111 job->SetClientID(kClientID); 122 job->SetClientID(kClientID);
112 em::DeviceAutoEnrollmentRequest* request = 123 em::DeviceAutoEnrollmentRequest* request =
113 job->GetRequest()->mutable_auto_enrollment_request(); 124 job->GetRequest()->mutable_auto_enrollment_request();
114 request->set_modulus(1); 125 request->set_modulus(1);
115 request->set_remainder(0); 126 request->set_remainder(0);
127 job->SetRetryCallback(base::Bind(
128 &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this)));
116 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone, 129 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone,
117 base::Unretained(this))); 130 base::Unretained(this)));
118 return job; 131 return job;
119 } 132 }
120 133
121 void SendResponse(net::TestURLFetcher* fetcher, 134 void SendResponse(net::TestURLFetcher* fetcher,
122 const net::URLRequestStatus request_status, 135 const net::URLRequestStatus request_status,
123 int http_status, 136 int http_status,
124 const std::string& response) { 137 const std::string& response) {
125 fetcher->set_url(GURL(kServiceUrl)); 138 fetcher->set_url(GURL(kServiceUrl));
126 fetcher->set_status(request_status); 139 fetcher->set_status(request_status);
127 fetcher->set_response_code(http_status); 140 fetcher->set_response_code(http_status);
128 fetcher->SetResponseString(response); 141 fetcher->SetResponseString(response);
129 fetcher->delegate()->OnURLFetchComplete(fetcher); 142 fetcher->delegate()->OnURLFetchComplete(fetcher);
130 } 143 }
131 144
132 MOCK_METHOD2(OnJobDone, void(DeviceManagementStatus, 145 MOCK_METHOD2(OnJobDone, void(DeviceManagementStatus,
133 const em::DeviceManagementResponse&)); 146 const em::DeviceManagementResponse&));
134 147
148 MOCK_METHOD1(OnJobRetry, void(DeviceManagementRequestJob*));
149
135 net::TestURLFetcherFactory factory_; 150 net::TestURLFetcherFactory factory_;
136 scoped_ptr<DeviceManagementService> service_; 151 scoped_ptr<DeviceManagementService> service_;
137 152
138 private: 153 private:
139 MessageLoopForUI loop_; 154 MessageLoopForUI loop_;
140 content::TestBrowserThread ui_thread_; 155 content::TestBrowserThread ui_thread_;
141 content::TestBrowserThread io_thread_; 156 content::TestBrowserThread io_thread_;
142 }; 157 };
143 158
144 struct FailedRequestParams { 159 struct FailedRequestParams {
(...skipping 20 matching lines...) Expand all
165 180
166 // A parameterized test case for erroneous response situations, they're mostly 181 // A parameterized test case for erroneous response situations, they're mostly
167 // the same for all kinds of requests. 182 // the same for all kinds of requests.
168 class DeviceManagementServiceFailedRequestTest 183 class DeviceManagementServiceFailedRequestTest
169 : public DeviceManagementServiceTestBase, 184 : public DeviceManagementServiceTestBase,
170 public testing::WithParamInterface<FailedRequestParams> { 185 public testing::WithParamInterface<FailedRequestParams> {
171 }; 186 };
172 187
173 TEST_P(DeviceManagementServiceFailedRequestTest, RegisterRequest) { 188 TEST_P(DeviceManagementServiceFailedRequestTest, RegisterRequest) {
174 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _)); 189 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _));
190 EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
175 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob()); 191 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
176 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 192 net::TestURLFetcher* fetcher = GetFetcher();
177 ASSERT_TRUE(fetcher); 193 ASSERT_TRUE(fetcher);
178 194
179 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_, 195 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_,
180 GetParam().response_); 196 GetParam().response_);
181 } 197 }
182 198
183 TEST_P(DeviceManagementServiceFailedRequestTest, UnregisterRequest) { 199 TEST_P(DeviceManagementServiceFailedRequestTest, UnregisterRequest) {
184 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _)); 200 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _));
201 EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
185 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob()); 202 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob());
186 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 203 net::TestURLFetcher* fetcher = GetFetcher();
187 ASSERT_TRUE(fetcher); 204 ASSERT_TRUE(fetcher);
188 205
189 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_, 206 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_,
190 GetParam().response_); 207 GetParam().response_);
191 } 208 }
192 209
193 TEST_P(DeviceManagementServiceFailedRequestTest, PolicyRequest) { 210 TEST_P(DeviceManagementServiceFailedRequestTest, PolicyRequest) {
194 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _)); 211 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _));
212 EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
195 scoped_ptr<DeviceManagementRequestJob> request_job(StartPolicyFetchJob()); 213 scoped_ptr<DeviceManagementRequestJob> request_job(StartPolicyFetchJob());
196 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 214 net::TestURLFetcher* fetcher = GetFetcher();
197 ASSERT_TRUE(fetcher); 215 ASSERT_TRUE(fetcher);
198 216
199 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_, 217 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_,
200 GetParam().response_); 218 GetParam().response_);
201 } 219 }
202 220
203 TEST_P(DeviceManagementServiceFailedRequestTest, AutoEnrollmentRequest) { 221 TEST_P(DeviceManagementServiceFailedRequestTest, AutoEnrollmentRequest) {
204 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _)); 222 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _));
223 EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
205 scoped_ptr<DeviceManagementRequestJob> request_job(StartAutoEnrollmentJob()); 224 scoped_ptr<DeviceManagementRequestJob> request_job(StartAutoEnrollmentJob());
206 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 225 net::TestURLFetcher* fetcher = GetFetcher();
207 ASSERT_TRUE(fetcher); 226 ASSERT_TRUE(fetcher);
208 227
209 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_, 228 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_,
210 GetParam().response_); 229 GetParam().response_);
211 } 230 }
212 231
213 INSTANTIATE_TEST_CASE_P( 232 INSTANTIATE_TEST_CASE_P(
214 DeviceManagementServiceFailedRequestTestInstance, 233 DeviceManagementServiceFailedRequestTestInstance,
215 DeviceManagementServiceFailedRequestTest, 234 DeviceManagementServiceFailedRequestTest,
216 testing::Values( 235 testing::Values(
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 reference.SerializeToString(&reference_data) && 363 reference.SerializeToString(&reference_data) &&
345 arg_data == reference_data; 364 arg_data == reference_data;
346 } 365 }
347 366
348 TEST_F(DeviceManagementServiceTest, RegisterRequest) { 367 TEST_F(DeviceManagementServiceTest, RegisterRequest) {
349 em::DeviceManagementResponse expected_response; 368 em::DeviceManagementResponse expected_response;
350 expected_response.mutable_register_response()-> 369 expected_response.mutable_register_response()->
351 set_device_management_token(kDMToken); 370 set_device_management_token(kDMToken);
352 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, 371 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS,
353 MessageEquals(expected_response))); 372 MessageEquals(expected_response)));
373 EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
354 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob()); 374 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
355 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 375 net::TestURLFetcher* fetcher = GetFetcher();
356 ASSERT_TRUE(fetcher); 376 ASSERT_TRUE(fetcher);
357 377
358 CheckURLAndQueryParams(fetcher->GetOriginalURL(), 378 CheckURLAndQueryParams(fetcher->GetOriginalURL(),
359 dm_protocol::kValueRequestRegister, 379 dm_protocol::kValueRequestRegister,
360 kClientID); 380 kClientID);
361 381
362 std::string expected_data; 382 std::string expected_data;
363 ASSERT_TRUE(request_job->GetRequest()->SerializeToString(&expected_data)); 383 ASSERT_TRUE(request_job->GetRequest()->SerializeToString(&expected_data));
364 EXPECT_EQ(expected_data, fetcher->upload_data()); 384 EXPECT_EQ(expected_data, fetcher->upload_data());
365 385
366 // Generate the response. 386 // Generate the response.
367 std::string response_data; 387 std::string response_data;
368 ASSERT_TRUE(expected_response.SerializeToString(&response_data)); 388 ASSERT_TRUE(expected_response.SerializeToString(&response_data));
369 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); 389 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
370 SendResponse(fetcher, status, 200, response_data); 390 SendResponse(fetcher, status, 200, response_data);
371 } 391 }
372 392
373 TEST_F(DeviceManagementServiceTest, UnregisterRequest) { 393 TEST_F(DeviceManagementServiceTest, UnregisterRequest) {
374 em::DeviceManagementResponse expected_response; 394 em::DeviceManagementResponse expected_response;
375 expected_response.mutable_unregister_response(); 395 expected_response.mutable_unregister_response();
376 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, 396 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS,
377 MessageEquals(expected_response))); 397 MessageEquals(expected_response)));
398 EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
378 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob()); 399 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob());
379 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 400 net::TestURLFetcher* fetcher = GetFetcher();
380 ASSERT_TRUE(fetcher); 401 ASSERT_TRUE(fetcher);
381 402
382 // Check the data the fetcher received. 403 // Check the data the fetcher received.
383 const GURL& request_url(fetcher->GetOriginalURL()); 404 const GURL& request_url(fetcher->GetOriginalURL());
384 const GURL service_url(kServiceUrl); 405 const GURL service_url(kServiceUrl);
385 EXPECT_EQ(service_url.scheme(), request_url.scheme()); 406 EXPECT_EQ(service_url.scheme(), request_url.scheme());
386 EXPECT_EQ(service_url.host(), request_url.host()); 407 EXPECT_EQ(service_url.host(), request_url.host());
387 EXPECT_EQ(service_url.port(), request_url.port()); 408 EXPECT_EQ(service_url.port(), request_url.port());
388 EXPECT_EQ(service_url.path(), request_url.path()); 409 EXPECT_EQ(service_url.path(), request_url.path());
389 410
390 CheckURLAndQueryParams(fetcher->GetOriginalURL(), 411 CheckURLAndQueryParams(fetcher->GetOriginalURL(),
391 dm_protocol::kValueRequestUnregister, 412 dm_protocol::kValueRequestUnregister,
392 kClientID); 413 kClientID);
393 414
394 std::string expected_data; 415 std::string expected_data;
395 ASSERT_TRUE(request_job->GetRequest()->SerializeToString(&expected_data)); 416 ASSERT_TRUE(request_job->GetRequest()->SerializeToString(&expected_data));
396 EXPECT_EQ(expected_data, fetcher->upload_data()); 417 EXPECT_EQ(expected_data, fetcher->upload_data());
397 418
398 // Generate the response. 419 // Generate the response.
399 std::string response_data; 420 std::string response_data;
400 ASSERT_TRUE(expected_response.SerializeToString(&response_data)); 421 ASSERT_TRUE(expected_response.SerializeToString(&response_data));
401 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); 422 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
402 SendResponse(fetcher, status, 200, response_data); 423 SendResponse(fetcher, status, 200, response_data);
403 } 424 }
404 425
405 TEST_F(DeviceManagementServiceTest, CancelRegisterRequest) { 426 TEST_F(DeviceManagementServiceTest, CancelRegisterRequest) {
406 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0); 427 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
428 EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
407 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob()); 429 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
408 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 430 net::TestURLFetcher* fetcher = GetFetcher();
409 ASSERT_TRUE(fetcher); 431 ASSERT_TRUE(fetcher);
410 432
411 // There shouldn't be any callbacks. 433 // There shouldn't be any callbacks.
412 request_job.reset(); 434 request_job.reset();
413 } 435 }
414 436
415 TEST_F(DeviceManagementServiceTest, CancelUnregisterRequest) { 437 TEST_F(DeviceManagementServiceTest, CancelUnregisterRequest) {
416 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0); 438 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
439 EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
417 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob()); 440 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob());
418 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 441 net::TestURLFetcher* fetcher = GetFetcher();
419 ASSERT_TRUE(fetcher); 442 ASSERT_TRUE(fetcher);
420 443
421 // There shouldn't be any callbacks. 444 // There shouldn't be any callbacks.
422 request_job.reset(); 445 request_job.reset();
423 } 446 }
424 447
425 TEST_F(DeviceManagementServiceTest, CancelPolicyRequest) { 448 TEST_F(DeviceManagementServiceTest, CancelPolicyRequest) {
426 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0); 449 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
450 EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
427 scoped_ptr<DeviceManagementRequestJob> request_job(StartPolicyFetchJob()); 451 scoped_ptr<DeviceManagementRequestJob> request_job(StartPolicyFetchJob());
428 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 452 net::TestURLFetcher* fetcher = GetFetcher();
429 ASSERT_TRUE(fetcher); 453 ASSERT_TRUE(fetcher);
430 454
431 // There shouldn't be any callbacks. 455 // There shouldn't be any callbacks.
432 request_job.reset(); 456 request_job.reset();
433 } 457 }
434 458
435 TEST_F(DeviceManagementServiceTest, JobQueueing) { 459 TEST_F(DeviceManagementServiceTest, JobQueueing) {
436 // Start with a non-initialized service. 460 // Start with a non-initialized service.
437 ResetService(); 461 ResetService();
438 462
439 em::DeviceManagementResponse expected_response; 463 em::DeviceManagementResponse expected_response;
440 expected_response.mutable_register_response()-> 464 expected_response.mutable_register_response()->
441 set_device_management_token(kDMToken); 465 set_device_management_token(kDMToken);
442 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, 466 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS,
443 MessageEquals(expected_response))); 467 MessageEquals(expected_response)));
468 EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
444 469
445 // Make a request. We should not see any fetchers being created. 470 // Make a request. We should not see any fetchers being created.
446 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob()); 471 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
447 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 472 net::TestURLFetcher* fetcher = GetFetcher();
448 ASSERT_FALSE(fetcher); 473 ASSERT_FALSE(fetcher);
449 474
450 // Now initialize the service. That should start the job. 475 // Now initialize the service. That should start the job.
451 InitializeService(); 476 InitializeService();
452 fetcher = factory_.GetFetcherByID(0); 477 fetcher = GetFetcher();
453 ASSERT_TRUE(fetcher); 478 ASSERT_TRUE(fetcher);
454 factory_.RemoveFetcherFromMap(0); 479 factory_.RemoveFetcherFromMap(DeviceManagementService::kURLFetcherID);
455 480
456 // Check that the request is processed as expected. 481 // Check that the request is processed as expected.
457 std::string response_data; 482 std::string response_data;
458 ASSERT_TRUE(expected_response.SerializeToString(&response_data)); 483 ASSERT_TRUE(expected_response.SerializeToString(&response_data));
459 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); 484 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
460 SendResponse(fetcher, status, 200, response_data); 485 SendResponse(fetcher, status, 200, response_data);
461 } 486 }
462 487
463 TEST_F(DeviceManagementServiceTest, CancelRequestAfterShutdown) { 488 TEST_F(DeviceManagementServiceTest, CancelRequestAfterShutdown) {
464 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0); 489 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
490 EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
465 scoped_ptr<DeviceManagementRequestJob> request_job(StartPolicyFetchJob()); 491 scoped_ptr<DeviceManagementRequestJob> request_job(StartPolicyFetchJob());
466 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 492 net::TestURLFetcher* fetcher = GetFetcher();
467 ASSERT_TRUE(fetcher); 493 ASSERT_TRUE(fetcher);
468 494
469 // Shutdown the service and cancel the job afterwards. 495 // Shutdown the service and cancel the job afterwards.
470 service_->Shutdown(); 496 service_->Shutdown();
471 request_job.reset(); 497 request_job.reset();
472 } 498 }
473 499
474 ACTION_P(ResetPointer, pointer) { 500 ACTION_P(ResetPointer, pointer) {
475 pointer->reset(); 501 pointer->reset();
476 } 502 }
477 503
478 TEST_F(DeviceManagementServiceTest, CancelDuringCallback) { 504 TEST_F(DeviceManagementServiceTest, CancelDuringCallback) {
479 // Make a request. 505 // Make a request.
480 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob()); 506 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
481 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 507 net::TestURLFetcher* fetcher = GetFetcher();
482 ASSERT_TRUE(fetcher); 508 ASSERT_TRUE(fetcher);
483 509
484 EXPECT_CALL(*this, OnJobDone(_, _)) 510 EXPECT_CALL(*this, OnJobDone(_, _))
485 .WillOnce(ResetPointer(&request_job)); 511 .WillOnce(ResetPointer(&request_job));
512 EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
486 513
487 // Generate a callback. 514 // Generate a callback.
488 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); 515 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
489 SendResponse(fetcher, status, 500, ""); 516 SendResponse(fetcher, status, 500, "");
490 517
491 // Job should have been reset. 518 // Job should have been reset.
492 EXPECT_FALSE(request_job.get()); 519 EXPECT_FALSE(request_job.get());
493 } 520 }
494 521
495 TEST_F(DeviceManagementServiceTest, RetryOnProxyError) { 522 TEST_F(DeviceManagementServiceTest, RetryOnProxyError) {
496 // Make a request. 523 // Make a request.
497 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0); 524 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
525 EXPECT_CALL(*this, OnJobRetry(_));
498 526
499 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob()); 527 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
500 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 528 net::TestURLFetcher* fetcher = GetFetcher();
501 ASSERT_TRUE(fetcher); 529 ASSERT_TRUE(fetcher);
502 EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) == 0); 530 EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) == 0);
503 const GURL original_url(fetcher->GetOriginalURL()); 531 const GURL original_url(fetcher->GetOriginalURL());
504 const std::string upload_data(fetcher->upload_data()); 532 const std::string upload_data(fetcher->upload_data());
505 533
506 // Generate a callback with a proxy failure. 534 // Generate a callback with a proxy failure.
507 net::URLRequestStatus status(net::URLRequestStatus::FAILED, 535 net::URLRequestStatus status(net::URLRequestStatus::FAILED,
508 net::ERR_PROXY_CONNECTION_FAILED); 536 net::ERR_PROXY_CONNECTION_FAILED);
509 SendResponse(fetcher, status, 200, ""); 537 SendResponse(fetcher, status, 200, "");
510 538
511 // Verify that a new URLFetcher was started that bypasses the proxy. 539 // Verify that a new URLFetcher was started that bypasses the proxy.
512 fetcher = factory_.GetFetcherByID(0); 540 fetcher = GetFetcher();
513 ASSERT_TRUE(fetcher); 541 ASSERT_TRUE(fetcher);
514 EXPECT_TRUE(fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY); 542 EXPECT_TRUE(fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY);
515 EXPECT_EQ(original_url, fetcher->GetOriginalURL()); 543 EXPECT_EQ(original_url, fetcher->GetOriginalURL());
516 EXPECT_EQ(upload_data, fetcher->upload_data()); 544 EXPECT_EQ(upload_data, fetcher->upload_data());
517 } 545 }
518 546
519 TEST_F(DeviceManagementServiceTest, RetryOnBadResponseFromProxy) { 547 TEST_F(DeviceManagementServiceTest, RetryOnBadResponseFromProxy) {
520 // Make a request. 548 // Make a request.
521 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0); 549 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
550 EXPECT_CALL(*this, OnJobRetry(_));
522 551
523 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob()); 552 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
524 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 553 net::TestURLFetcher* fetcher = GetFetcher();
525 ASSERT_TRUE(fetcher); 554 ASSERT_TRUE(fetcher);
526 EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) == 0); 555 EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) == 0);
527 const GURL original_url(fetcher->GetOriginalURL()); 556 const GURL original_url(fetcher->GetOriginalURL());
528 const std::string upload_data(fetcher->upload_data()); 557 const std::string upload_data(fetcher->upload_data());
529 fetcher->set_was_fetched_via_proxy(true); 558 fetcher->set_was_fetched_via_proxy(true);
530 scoped_refptr<net::HttpResponseHeaders> headers; 559 scoped_refptr<net::HttpResponseHeaders> headers;
531 headers = new net::HttpResponseHeaders( 560 headers = new net::HttpResponseHeaders(
532 "HTTP/1.1 200 OK\0Content-type: bad/type\0\0"); 561 "HTTP/1.1 200 OK\0Content-type: bad/type\0\0");
533 fetcher->set_response_headers(headers); 562 fetcher->set_response_headers(headers);
534 563
535 // Generate a callback with a valid http response, that was generated by 564 // Generate a callback with a valid http response, that was generated by
536 // a bad/wrong proxy. 565 // a bad/wrong proxy.
537 net::URLRequestStatus status; 566 net::URLRequestStatus status;
538 SendResponse(fetcher, status, 200, ""); 567 SendResponse(fetcher, status, 200, "");
539 568
540 // Verify that a new URLFetcher was started that bypasses the proxy. 569 // Verify that a new URLFetcher was started that bypasses the proxy.
541 fetcher = factory_.GetFetcherByID(0); 570 fetcher = GetFetcher();
542 ASSERT_TRUE(fetcher); 571 ASSERT_TRUE(fetcher);
543 EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) != 0); 572 EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) != 0);
544 EXPECT_EQ(original_url, fetcher->GetOriginalURL()); 573 EXPECT_EQ(original_url, fetcher->GetOriginalURL());
545 EXPECT_EQ(upload_data, fetcher->upload_data()); 574 EXPECT_EQ(upload_data, fetcher->upload_data());
546 } 575 }
547 576
577 TEST_F(DeviceManagementServiceTest, RetryOnNetworkChanges) {
578 // Make a request.
579 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
580 EXPECT_CALL(*this, OnJobRetry(_));
581
582 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
583 net::TestURLFetcher* fetcher = GetFetcher();
584 ASSERT_TRUE(fetcher);
585 const GURL original_url(fetcher->GetOriginalURL());
586 const std::string original_upload_data(fetcher->upload_data());
587
588 // Make it fail with ERR_NETWORK_CHANGED.
589 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED,
590 net::ERR_NETWORK_CHANGED));
591 fetcher->set_url(GURL(kServiceUrl));
592 fetcher->delegate()->OnURLFetchComplete(fetcher);
593
594 // Verify that a new URLFetcher was started that retries this job, after
595 // having called OnJobRetry.
596 Mock::VerifyAndClearExpectations(this);
597 fetcher = GetFetcher();
598 ASSERT_TRUE(fetcher);
599 EXPECT_EQ(original_url, fetcher->GetOriginalURL());
600 EXPECT_EQ(original_upload_data, fetcher->upload_data());
601 EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher->GetStatus().status());
602 }
603
604 TEST_F(DeviceManagementServiceTest, RetryLimit) {
605 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
606
607 // Simulate 3 failed network requests.
608 for (int i = 0; i < 3; ++i) {
609 // Make the current fetcher fail with ERR_NETWORK_CHANGED.
610 net::TestURLFetcher* fetcher = GetFetcher();
611 ASSERT_TRUE(fetcher);
612 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0);
613 EXPECT_CALL(*this, OnJobRetry(_));
614 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED,
615 net::ERR_NETWORK_CHANGED));
616 fetcher->set_url(GURL(kServiceUrl));
617 fetcher->delegate()->OnURLFetchComplete(fetcher);
618 Mock::VerifyAndClearExpectations(this);
619 }
620
621 // At the next failure the DeviceManagementService should give up retrying and
622 // pass the error code to the job's owner.
623 net::TestURLFetcher* fetcher = GetFetcher();
624 ASSERT_TRUE(fetcher);
625 EXPECT_CALL(*this, OnJobDone(DM_STATUS_REQUEST_FAILED, _));
626 EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
627 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED,
628 net::ERR_NETWORK_CHANGED));
629 fetcher->set_url(GURL(kServiceUrl));
630 fetcher->delegate()->OnURLFetchComplete(fetcher);
631 Mock::VerifyAndClearExpectations(this);
632 }
633
548 } // namespace policy 634 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698