| 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/strings/string_split.h" | 10 #include "base/strings/string_split.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 // Encoded empty response messages for testing the error code paths. | 35 // Encoded empty response messages for testing the error code paths. |
| 36 const char kResponseEmpty[] = "\x08\x00"; | 36 const char kResponseEmpty[] = "\x08\x00"; |
| 37 | 37 |
| 38 #define PROTO_STRING(name) (std::string(name, arraysize(name) - 1)) | 38 #define PROTO_STRING(name) (std::string(name, arraysize(name) - 1)) |
| 39 | 39 |
| 40 // Some helper constants. | 40 // Some helper constants. |
| 41 const char kGaiaAuthToken[] = "gaia-auth-token"; | 41 const char kGaiaAuthToken[] = "gaia-auth-token"; |
| 42 const char kOAuthToken[] = "oauth-token"; | 42 const char kOAuthToken[] = "oauth-token"; |
| 43 const char kDMToken[] = "device-management-token"; | 43 const char kDMToken[] = "device-management-token"; |
| 44 const char kClientID[] = "device-id"; | 44 const char kClientID[] = "device-id"; |
| 45 const char kRobotAuthCode[] = "robot-oauth-auth-code"; |
| 45 | 46 |
| 46 // Unit tests for the device management policy service. The tests are run | 47 // Unit tests for the device management policy service. The tests are run |
| 47 // against a TestURLFetcherFactory that is used to short-circuit the request | 48 // against a TestURLFetcherFactory that is used to short-circuit the request |
| 48 // without calling into the actual network stack. | 49 // without calling into the actual network stack. |
| 49 class DeviceManagementServiceTestBase : public testing::Test { | 50 class DeviceManagementServiceTestBase : public testing::Test { |
| 50 protected: | 51 protected: |
| 51 DeviceManagementServiceTestBase() | 52 DeviceManagementServiceTestBase() |
| 52 : ui_thread_(BrowserThread::UI, &loop_), | 53 : ui_thread_(BrowserThread::UI, &loop_), |
| 53 io_thread_(BrowserThread::IO, &loop_) { | 54 io_thread_(BrowserThread::IO, &loop_) { |
| 54 ResetService(); | 55 ResetService(); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 80 job->SetOAuthToken(kOAuthToken); | 81 job->SetOAuthToken(kOAuthToken); |
| 81 job->SetClientID(kClientID); | 82 job->SetClientID(kClientID); |
| 82 job->GetRequest()->mutable_register_request(); | 83 job->GetRequest()->mutable_register_request(); |
| 83 job->SetRetryCallback(base::Bind( | 84 job->SetRetryCallback(base::Bind( |
| 84 &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this))); | 85 &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this))); |
| 85 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone, | 86 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone, |
| 86 base::Unretained(this))); | 87 base::Unretained(this))); |
| 87 return job; | 88 return job; |
| 88 } | 89 } |
| 89 | 90 |
| 91 DeviceManagementRequestJob* StartApiAuthCodeFetchJob() { |
| 92 DeviceManagementRequestJob* job = service_->CreateJob( |
| 93 DeviceManagementRequestJob::TYPE_API_AUTH_CODE_FETCH); |
| 94 job->SetGaiaToken(kGaiaAuthToken); |
| 95 job->SetOAuthToken(kOAuthToken); |
| 96 job->SetClientID(kClientID); |
| 97 job->GetRequest()->mutable_service_api_access_request(); |
| 98 job->SetRetryCallback(base::Bind( |
| 99 &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this))); |
| 100 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone, |
| 101 base::Unretained(this))); |
| 102 return job; |
| 103 } |
| 104 |
| 90 DeviceManagementRequestJob* StartUnregistrationJob() { | 105 DeviceManagementRequestJob* StartUnregistrationJob() { |
| 91 DeviceManagementRequestJob* job = | 106 DeviceManagementRequestJob* job = |
| 92 service_->CreateJob(DeviceManagementRequestJob::TYPE_UNREGISTRATION); | 107 service_->CreateJob(DeviceManagementRequestJob::TYPE_UNREGISTRATION); |
| 93 job->SetDMToken(kDMToken); | 108 job->SetDMToken(kDMToken); |
| 94 job->SetClientID(kClientID); | 109 job->SetClientID(kClientID); |
| 95 job->GetRequest()->mutable_unregister_request(); | 110 job->GetRequest()->mutable_unregister_request(); |
| 96 job->SetRetryCallback(base::Bind( | 111 job->SetRetryCallback(base::Bind( |
| 97 &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this))); | 112 &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this))); |
| 98 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone, | 113 job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone, |
| 99 base::Unretained(this))); | 114 base::Unretained(this))); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _)); | 204 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _)); |
| 190 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); | 205 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); |
| 191 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob()); | 206 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob()); |
| 192 net::TestURLFetcher* fetcher = GetFetcher(); | 207 net::TestURLFetcher* fetcher = GetFetcher(); |
| 193 ASSERT_TRUE(fetcher); | 208 ASSERT_TRUE(fetcher); |
| 194 | 209 |
| 195 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_, | 210 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_, |
| 196 GetParam().response_); | 211 GetParam().response_); |
| 197 } | 212 } |
| 198 | 213 |
| 214 TEST_P(DeviceManagementServiceFailedRequestTest, ApiAuthCodeFetchRequest) { |
| 215 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _)); |
| 216 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); |
| 217 scoped_ptr<DeviceManagementRequestJob> request_job( |
| 218 StartApiAuthCodeFetchJob()); |
| 219 net::TestURLFetcher* fetcher = GetFetcher(); |
| 220 ASSERT_TRUE(fetcher); |
| 221 |
| 222 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_, |
| 223 GetParam().response_); |
| 224 } |
| 225 |
| 199 TEST_P(DeviceManagementServiceFailedRequestTest, UnregisterRequest) { | 226 TEST_P(DeviceManagementServiceFailedRequestTest, UnregisterRequest) { |
| 200 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _)); | 227 EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _)); |
| 201 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); | 228 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); |
| 202 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob()); | 229 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob()); |
| 203 net::TestURLFetcher* fetcher = GetFetcher(); | 230 net::TestURLFetcher* fetcher = GetFetcher(); |
| 204 ASSERT_TRUE(fetcher); | 231 ASSERT_TRUE(fetcher); |
| 205 | 232 |
| 206 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_, | 233 SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_, |
| 207 GetParam().response_); | 234 GetParam().response_); |
| 208 } | 235 } |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 ASSERT_TRUE(request_job->GetRequest()->SerializeToString(&expected_data)); | 410 ASSERT_TRUE(request_job->GetRequest()->SerializeToString(&expected_data)); |
| 384 EXPECT_EQ(expected_data, fetcher->upload_data()); | 411 EXPECT_EQ(expected_data, fetcher->upload_data()); |
| 385 | 412 |
| 386 // Generate the response. | 413 // Generate the response. |
| 387 std::string response_data; | 414 std::string response_data; |
| 388 ASSERT_TRUE(expected_response.SerializeToString(&response_data)); | 415 ASSERT_TRUE(expected_response.SerializeToString(&response_data)); |
| 389 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); | 416 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); |
| 390 SendResponse(fetcher, status, 200, response_data); | 417 SendResponse(fetcher, status, 200, response_data); |
| 391 } | 418 } |
| 392 | 419 |
| 420 TEST_F(DeviceManagementServiceTest, ApiAuthCodeFetchRequest) { |
| 421 em::DeviceManagementResponse expected_response; |
| 422 expected_response.mutable_service_api_access_response()->set_auth_code( |
| 423 kRobotAuthCode); |
| 424 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, |
| 425 MessageEquals(expected_response))); |
| 426 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); |
| 427 scoped_ptr<DeviceManagementRequestJob> request_job( |
| 428 StartApiAuthCodeFetchJob()); |
| 429 net::TestURLFetcher* fetcher = GetFetcher(); |
| 430 ASSERT_TRUE(fetcher); |
| 431 |
| 432 CheckURLAndQueryParams(fetcher->GetOriginalURL(), |
| 433 dm_protocol::kValueRequestApiAuthorization, |
| 434 kClientID); |
| 435 |
| 436 std::string expected_data; |
| 437 ASSERT_TRUE(request_job->GetRequest()->SerializeToString(&expected_data)); |
| 438 EXPECT_EQ(expected_data, fetcher->upload_data()); |
| 439 |
| 440 // Generate the response. |
| 441 std::string response_data; |
| 442 ASSERT_TRUE(expected_response.SerializeToString(&response_data)); |
| 443 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); |
| 444 SendResponse(fetcher, status, 200, response_data); |
| 445 } |
| 446 |
| 393 TEST_F(DeviceManagementServiceTest, UnregisterRequest) { | 447 TEST_F(DeviceManagementServiceTest, UnregisterRequest) { |
| 394 em::DeviceManagementResponse expected_response; | 448 em::DeviceManagementResponse expected_response; |
| 395 expected_response.mutable_unregister_response(); | 449 expected_response.mutable_unregister_response(); |
| 396 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, | 450 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, |
| 397 MessageEquals(expected_response))); | 451 MessageEquals(expected_response))); |
| 398 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); | 452 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); |
| 399 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob()); | 453 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob()); |
| 400 net::TestURLFetcher* fetcher = GetFetcher(); | 454 net::TestURLFetcher* fetcher = GetFetcher(); |
| 401 ASSERT_TRUE(fetcher); | 455 ASSERT_TRUE(fetcher); |
| 402 | 456 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 427 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0); | 481 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0); |
| 428 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); | 482 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); |
| 429 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob()); | 483 scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob()); |
| 430 net::TestURLFetcher* fetcher = GetFetcher(); | 484 net::TestURLFetcher* fetcher = GetFetcher(); |
| 431 ASSERT_TRUE(fetcher); | 485 ASSERT_TRUE(fetcher); |
| 432 | 486 |
| 433 // There shouldn't be any callbacks. | 487 // There shouldn't be any callbacks. |
| 434 request_job.reset(); | 488 request_job.reset(); |
| 435 } | 489 } |
| 436 | 490 |
| 491 TEST_F(DeviceManagementServiceTest, CancelApiAuthCodeFetch) { |
| 492 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0); |
| 493 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); |
| 494 scoped_ptr<DeviceManagementRequestJob> request_job( |
| 495 StartApiAuthCodeFetchJob()); |
| 496 net::TestURLFetcher* fetcher = GetFetcher(); |
| 497 ASSERT_TRUE(fetcher); |
| 498 |
| 499 // There shouldn't be any callbacks. |
| 500 request_job.reset(); |
| 501 } |
| 502 |
| 437 TEST_F(DeviceManagementServiceTest, CancelUnregisterRequest) { | 503 TEST_F(DeviceManagementServiceTest, CancelUnregisterRequest) { |
| 438 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0); | 504 EXPECT_CALL(*this, OnJobDone(_, _)).Times(0); |
| 439 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); | 505 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); |
| 440 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob()); | 506 scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob()); |
| 441 net::TestURLFetcher* fetcher = GetFetcher(); | 507 net::TestURLFetcher* fetcher = GetFetcher(); |
| 442 ASSERT_TRUE(fetcher); | 508 ASSERT_TRUE(fetcher); |
| 443 | 509 |
| 444 // There shouldn't be any callbacks. | 510 // There shouldn't be any callbacks. |
| 445 request_job.reset(); | 511 request_job.reset(); |
| 446 } | 512 } |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 625 EXPECT_CALL(*this, OnJobDone(DM_STATUS_REQUEST_FAILED, _)); | 691 EXPECT_CALL(*this, OnJobDone(DM_STATUS_REQUEST_FAILED, _)); |
| 626 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); | 692 EXPECT_CALL(*this, OnJobRetry(_)).Times(0); |
| 627 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED, | 693 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED, |
| 628 net::ERR_NETWORK_CHANGED)); | 694 net::ERR_NETWORK_CHANGED)); |
| 629 fetcher->set_url(GURL(kServiceUrl)); | 695 fetcher->set_url(GURL(kServiceUrl)); |
| 630 fetcher->delegate()->OnURLFetchComplete(fetcher); | 696 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 631 Mock::VerifyAndClearExpectations(this); | 697 Mock::VerifyAndClearExpectations(this); |
| 632 } | 698 } |
| 633 | 699 |
| 634 } // namespace policy | 700 } // namespace policy |
| OLD | NEW |