OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |