| 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/message_loop.h" | 6 #include "base/message_loop.h" |
| 7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "chrome/browser/policy/browser_policy_connector.h" | 8 #include "chrome/browser/policy/browser_policy_connector.h" |
| 9 #include "chrome/browser/policy/cloud_policy_constants.h" | 9 #include "chrome/browser/policy/cloud_policy_constants.h" |
| 10 #include "chrome/browser/policy/mock_device_management_service.h" | 10 #include "chrome/browser/policy/mock_device_management_service.h" |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 "{" | 57 "{" |
| 58 " \"hd\": \"test.com\"" | 58 " \"hd\": \"test.com\"" |
| 59 "}"; | 59 "}"; |
| 60 | 60 |
| 61 class UserPolicySigninServiceTest : public testing::Test { | 61 class UserPolicySigninServiceTest : public testing::Test { |
| 62 public: | 62 public: |
| 63 UserPolicySigninServiceTest() | 63 UserPolicySigninServiceTest() |
| 64 : loop_(MessageLoop::TYPE_UI), | 64 : loop_(MessageLoop::TYPE_UI), |
| 65 ui_thread_(content::BrowserThread::UI, &loop_), | 65 ui_thread_(content::BrowserThread::UI, &loop_), |
| 66 file_thread_(content::BrowserThread::FILE, &loop_), | 66 file_thread_(content::BrowserThread::FILE, &loop_), |
| 67 io_thread_(content::BrowserThread::IO, &loop_) {} | 67 io_thread_(content::BrowserThread::IO, &loop_), |
| 68 register_completed_(false) {} |
| 68 | 69 |
| 69 MOCK_METHOD1(OnPolicyRefresh, void(bool)); | 70 MOCK_METHOD1(OnPolicyRefresh, void(bool)); |
| 71 void OnRegisterCompleted(scoped_ptr<CloudPolicyClient> client) { |
| 72 register_completed_ = true; |
| 73 created_client_.swap(client); |
| 74 } |
| 75 |
| 76 void RegisterPolicyClientWithCallback(UserPolicySigninService* service) { |
| 77 service->RegisterPolicyClient( |
| 78 "testuser@test.com", |
| 79 "mock_oauth_token", |
| 80 base::Bind(&UserPolicySigninServiceTest::OnRegisterCompleted, |
| 81 base::Unretained(this))); |
| 82 ASSERT_TRUE(IsRequestActive()); |
| 83 } |
| 70 | 84 |
| 71 virtual void SetUp() OVERRIDE { | 85 virtual void SetUp() OVERRIDE { |
| 72 device_management_service_ = new MockDeviceManagementService(); | 86 device_management_service_ = new MockDeviceManagementService(); |
| 73 g_browser_process->browser_policy_connector()-> | 87 g_browser_process->browser_policy_connector()-> |
| 74 SetDeviceManagementServiceForTesting( | 88 SetDeviceManagementServiceForTesting( |
| 75 scoped_ptr<DeviceManagementService>(device_management_service_)); | 89 scoped_ptr<DeviceManagementService>(device_management_service_)); |
| 76 | 90 |
| 77 g_browser_process->browser_policy_connector()->Init(); | 91 g_browser_process->browser_policy_connector()->Init(); |
| 78 | 92 |
| 79 local_state_.reset(new TestingPrefServiceSimple); | 93 local_state_.reset(new TestingPrefServiceSimple); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 | 145 |
| 132 void ReportHostedDomainStatus(bool is_hosted_domain) { | 146 void ReportHostedDomainStatus(bool is_hosted_domain) { |
| 133 ASSERT_TRUE(IsRequestActive()); | 147 ASSERT_TRUE(IsRequestActive()); |
| 134 net::TestURLFetcher* fetcher = url_factory_.GetFetcherByID(0); | 148 net::TestURLFetcher* fetcher = url_factory_.GetFetcherByID(0); |
| 135 fetcher->set_response_code(net::HTTP_OK); | 149 fetcher->set_response_code(net::HTTP_OK); |
| 136 fetcher->SetResponseString(is_hosted_domain ? kHostedDomainResponse : "{}"); | 150 fetcher->SetResponseString(is_hosted_domain ? kHostedDomainResponse : "{}"); |
| 137 fetcher->delegate()->OnURLFetchComplete(fetcher); | 151 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 138 } | 152 } |
| 139 | 153 |
| 140 void TestSuccessfulSignin() { | 154 void TestSuccessfulSignin() { |
| 141 // Set the user as signed in. | |
| 142 SigninManagerFactory::GetForProfile(profile_.get())-> | |
| 143 SetAuthenticatedUsername("testuser@test.com"); | |
| 144 | |
| 145 UserPolicySigninService* signin_service = | 155 UserPolicySigninService* signin_service = |
| 146 UserPolicySigninServiceFactory::GetForProfile(profile_.get()); | 156 UserPolicySigninServiceFactory::GetForProfile(profile_.get()); |
| 147 EXPECT_CALL(*this, OnPolicyRefresh(true)).Times(0); | 157 EXPECT_CALL(*this, OnPolicyRefresh(true)).Times(0); |
| 148 signin_service->FetchPolicyForSignedInUser( | 158 RegisterPolicyClientWithCallback(signin_service); |
| 149 "mock_token", | |
| 150 base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, | |
| 151 base::Unretained(this))); | |
| 152 | |
| 153 // UserCloudPolicyManager should be initialized. | |
| 154 ASSERT_TRUE(manager_->core()->service()); | |
| 155 ASSERT_TRUE(IsRequestActive()); | |
| 156 | 159 |
| 157 // Mimic successful oauth token fetch. | 160 // Mimic successful oauth token fetch. |
| 158 MakeOAuthTokenFetchSucceed(); | 161 MakeOAuthTokenFetchSucceed(); |
| 159 | 162 |
| 160 // When the user is from a hosted domain, this should kick off client | 163 // When the user is from a hosted domain, this should kick off client |
| 161 // registration. | 164 // registration. |
| 162 MockDeviceManagementJob* register_request = NULL; | 165 MockDeviceManagementJob* register_request = NULL; |
| 163 EXPECT_CALL(*device_management_service_, | 166 EXPECT_CALL(*device_management_service_, |
| 164 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) | 167 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) |
| 165 .WillOnce(device_management_service_->CreateAsyncJob( | 168 .WillOnce(device_management_service_->CreateAsyncJob( |
| 166 ®ister_request)); | 169 ®ister_request)); |
| 167 EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) | 170 EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) |
| 168 .Times(1); | 171 .Times(1); |
| 169 | 172 |
| 170 // Now mimic the user being a hosted domain - this should cause a Register() | 173 // Now mimic the user being a hosted domain - this should cause a Register() |
| 171 // call. | 174 // call. |
| 172 ReportHostedDomainStatus(true); | 175 ReportHostedDomainStatus(true); |
| 173 | 176 |
| 174 // Should have no more outstanding requests. | 177 // Should have no more outstanding requests. |
| 175 ASSERT_FALSE(IsRequestActive()); | 178 ASSERT_FALSE(IsRequestActive()); |
| 176 Mock::VerifyAndClearExpectations(this); | 179 Mock::VerifyAndClearExpectations(this); |
| 177 ASSERT_TRUE(register_request); | 180 ASSERT_TRUE(register_request); |
| 178 | 181 |
| 179 // Mimic successful client registration - this should kick off a policy | 182 // Mimic successful client registration - this should register the client |
| 180 // fetch. | 183 // and invoke the callback. |
| 184 em::DeviceManagementResponse registration_blob; |
| 185 registration_blob.mutable_register_response()->set_device_management_token( |
| 186 "dm_token"); |
| 187 registration_blob.mutable_register_response()->set_enrollment_type( |
| 188 em::DeviceRegisterResponse::ENTERPRISE); |
| 189 register_request->SendResponse(DM_STATUS_SUCCESS, registration_blob); |
| 190 |
| 191 // UserCloudPolicyManager should not be initialized yet. |
| 192 ASSERT_FALSE(manager_->core()->service()); |
| 193 EXPECT_TRUE(register_completed_); |
| 194 EXPECT_TRUE(created_client_.get()); |
| 195 |
| 196 // Now call to fetch policy - this should fire off a fetch request. |
| 181 MockDeviceManagementJob* fetch_request = NULL; | 197 MockDeviceManagementJob* fetch_request = NULL; |
| 182 EXPECT_CALL(*device_management_service_, | 198 EXPECT_CALL(*device_management_service_, |
| 183 CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH)) | 199 CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH)) |
| 184 .WillOnce(device_management_service_->CreateAsyncJob(&fetch_request)); | 200 .WillOnce(device_management_service_->CreateAsyncJob(&fetch_request)); |
| 185 EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) | 201 EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) |
| 186 .Times(1); | 202 .Times(1); |
| 187 em::DeviceManagementResponse registration_blob; | 203 signin_service->FetchPolicyForSignedInUser( |
| 188 registration_blob.mutable_register_response()->set_device_management_token( | 204 created_client_.Pass(), |
| 189 "dm_token"); | 205 base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, |
| 190 registration_blob.mutable_register_response()->set_enrollment_type( | 206 base::Unretained(this))); |
| 191 em::DeviceRegisterResponse::ENTERPRISE); | 207 |
| 192 register_request->SendResponse(DM_STATUS_SUCCESS, registration_blob); | |
| 193 Mock::VerifyAndClearExpectations(this); | 208 Mock::VerifyAndClearExpectations(this); |
| 194 ASSERT_TRUE(fetch_request); | 209 ASSERT_TRUE(fetch_request); |
| 195 | 210 |
| 211 // UserCloudPolicyManager should now be initialized. |
| 212 ASSERT_TRUE(manager_->core()->service()); |
| 213 |
| 196 // Make the policy fetch succeed - this should result in a write to the | 214 // Make the policy fetch succeed - this should result in a write to the |
| 197 // store and ultimately result in a call to OnPolicyRefresh(). | 215 // store and ultimately result in a call to OnPolicyRefresh(). |
| 198 EXPECT_CALL(*mock_store_, Store(_)); | 216 EXPECT_CALL(*mock_store_, Store(_)); |
| 199 EXPECT_CALL(*this, OnPolicyRefresh(true)).Times(1); | 217 EXPECT_CALL(*this, OnPolicyRefresh(true)).Times(1); |
| 218 |
| 200 // Create a fake policy blob to deliver to the client. | 219 // Create a fake policy blob to deliver to the client. |
| 201 em::DeviceManagementResponse policy_blob; | 220 em::DeviceManagementResponse policy_blob; |
| 202 em::PolicyData policy_data; | 221 em::PolicyData policy_data; |
| 203 policy_data.set_policy_type(dm_protocol::kChromeUserPolicyType); | 222 policy_data.set_policy_type(dm_protocol::kChromeUserPolicyType); |
| 204 em::PolicyFetchResponse* policy_response = | 223 em::PolicyFetchResponse* policy_response = |
| 205 policy_blob.mutable_policy_response()->add_response(); | 224 policy_blob.mutable_policy_response()->add_response(); |
| 206 ASSERT_TRUE(policy_data.SerializeToString( | 225 ASSERT_TRUE(policy_data.SerializeToString( |
| 207 policy_response->mutable_policy_data())); | 226 policy_response->mutable_policy_data())); |
| 208 fetch_request->SendResponse(DM_STATUS_SUCCESS, policy_blob); | 227 fetch_request->SendResponse(DM_STATUS_SUCCESS, policy_blob); |
| 209 | 228 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 221 | 240 |
| 222 // BrowserPolicyConnector and UrlFetcherFactory want to initialize and free | 241 // BrowserPolicyConnector and UrlFetcherFactory want to initialize and free |
| 223 // various components asynchronously via tasks, so create fake threads here. | 242 // various components asynchronously via tasks, so create fake threads here. |
| 224 MessageLoop loop_; | 243 MessageLoop loop_; |
| 225 content::TestBrowserThread ui_thread_; | 244 content::TestBrowserThread ui_thread_; |
| 226 content::TestBrowserThread file_thread_; | 245 content::TestBrowserThread file_thread_; |
| 227 content::TestBrowserThread io_thread_; | 246 content::TestBrowserThread io_thread_; |
| 228 | 247 |
| 229 net::TestURLFetcherFactory url_factory_; | 248 net::TestURLFetcherFactory url_factory_; |
| 230 | 249 |
| 250 // Used in conjunction with OnRegisterCompleted() to test client registration |
| 251 // callbacks. |
| 252 scoped_ptr<CloudPolicyClient> created_client_; |
| 253 |
| 254 // True if OnRegisterCompleted() was called. |
| 255 bool register_completed_; |
| 256 |
| 231 // Weak ptr to the MockDeviceManagementService (object is owned by the | 257 // Weak ptr to the MockDeviceManagementService (object is owned by the |
| 232 // BrowserPolicyConnector). | 258 // BrowserPolicyConnector). |
| 233 MockDeviceManagementService* device_management_service_; | 259 MockDeviceManagementService* device_management_service_; |
| 234 | 260 |
| 235 scoped_ptr<TestingPrefServiceSimple> local_state_; | 261 scoped_ptr<TestingPrefServiceSimple> local_state_; |
| 236 }; | 262 }; |
| 237 | 263 |
| 238 TEST_F(UserPolicySigninServiceTest, InitWhileSignedOut) { | 264 TEST_F(UserPolicySigninServiceTest, InitWhileSignedOut) { |
| 239 EXPECT_CALL(*mock_store_, Clear()); | 265 EXPECT_CALL(*mock_store_, Clear()); |
| 240 // Make sure user is not signed in. | 266 // Make sure user is not signed in. |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 428 // UserCloudPolicyManager should be initialized. | 454 // UserCloudPolicyManager should be initialized. |
| 429 ASSERT_TRUE(manager_->core()->service()); | 455 ASSERT_TRUE(manager_->core()->service()); |
| 430 | 456 |
| 431 // Now sign out. | 457 // Now sign out. |
| 432 SigninManagerFactory::GetForProfile(profile_.get())->SignOut(); | 458 SigninManagerFactory::GetForProfile(profile_.get())->SignOut(); |
| 433 | 459 |
| 434 // UserCloudPolicyManager should be shut down. | 460 // UserCloudPolicyManager should be shut down. |
| 435 ASSERT_FALSE(manager_->core()->service()); | 461 ASSERT_FALSE(manager_->core()->service()); |
| 436 } | 462 } |
| 437 | 463 |
| 438 TEST_F(UserPolicySigninServiceTest, FetchPolicyOAuthFailure) { | 464 TEST_F(UserPolicySigninServiceTest, RegisterPolicyClientOAuthFailure) { |
| 439 // Set the user as signed in. | |
| 440 SigninManagerFactory::GetForProfile(profile_.get())->SetAuthenticatedUsername( | |
| 441 "testuser@test.com"); | |
| 442 | |
| 443 UserPolicySigninService* signin_service = | 465 UserPolicySigninService* signin_service = |
| 444 UserPolicySigninServiceFactory::GetForProfile(profile_.get()); | 466 UserPolicySigninServiceFactory::GetForProfile(profile_.get()); |
| 445 EXPECT_CALL(*this, OnPolicyRefresh(_)).Times(0); | 467 RegisterPolicyClientWithCallback(signin_service); |
| 446 signin_service->FetchPolicyForSignedInUser( | |
| 447 "mock_token", | |
| 448 base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, | |
| 449 base::Unretained(this))); | |
| 450 Mock::VerifyAndClearExpectations(this); | 468 Mock::VerifyAndClearExpectations(this); |
| 451 | 469 |
| 452 // UserCloudPolicyManager should be initialized. | 470 // UserCloudPolicyManager should not be initialized. |
| 453 ASSERT_TRUE(manager_->core()->service()); | 471 ASSERT_FALSE(manager_->core()->service()); |
| 454 ASSERT_TRUE(IsRequestActive()); | 472 ASSERT_TRUE(IsRequestActive()); |
| 473 EXPECT_FALSE(register_completed_); |
| 455 | 474 |
| 456 // Cause the access token fetch to fail - callback should be invoked. | 475 // Cause the access token fetch to fail - callback should be invoked. |
| 457 EXPECT_CALL(*this, OnPolicyRefresh(false)).Times(1); | |
| 458 net::TestURLFetcher* fetcher = url_factory_.GetFetcherByID(0); | 476 net::TestURLFetcher* fetcher = url_factory_.GetFetcherByID(0); |
| 459 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED, -1)); | 477 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED, -1)); |
| 460 fetcher->delegate()->OnURLFetchComplete(fetcher); | 478 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 479 EXPECT_TRUE(register_completed_); |
| 480 EXPECT_FALSE(created_client_.get()); |
| 481 EXPECT_FALSE(IsRequestActive()); |
| 461 } | 482 } |
| 462 | 483 |
| 463 TEST_F(UserPolicySigninServiceTest, FetchPolicyNonHostedDomain) { | 484 TEST_F(UserPolicySigninServiceTest, RegisterPolicyClientNonHostedDomain) { |
| 464 // Set the user as signed in. | |
| 465 SigninManagerFactory::GetForProfile(profile_.get())->SetAuthenticatedUsername( | |
| 466 "testuser@test.com"); | |
| 467 | |
| 468 UserPolicySigninService* signin_service = | 485 UserPolicySigninService* signin_service = |
| 469 UserPolicySigninServiceFactory::GetForProfile(profile_.get()); | 486 UserPolicySigninServiceFactory::GetForProfile(profile_.get()); |
| 470 EXPECT_CALL(*this, OnPolicyRefresh(_)).Times(0); | 487 RegisterPolicyClientWithCallback(signin_service); |
| 471 signin_service->FetchPolicyForSignedInUser( | |
| 472 "mock_token", | |
| 473 base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, | |
| 474 base::Unretained(this))); | |
| 475 | 488 |
| 476 // UserCloudPolicyManager should be initialized. | 489 // UserCloudPolicyManager should not be initialized. |
| 477 ASSERT_TRUE(manager_->core()->service()); | 490 ASSERT_FALSE(manager_->core()->service()); |
| 478 ASSERT_TRUE(IsRequestActive()); | 491 ASSERT_TRUE(IsRequestActive()); |
| 479 | 492 |
| 480 // Cause the access token request to succeed. | 493 // Cause the access token request to succeed. |
| 481 MakeOAuthTokenFetchSucceed(); | 494 MakeOAuthTokenFetchSucceed(); |
| 482 | 495 |
| 483 // Should be a follow-up fetch to check the hosted-domain status. | 496 // Should be a follow-up fetch to check the hosted-domain status. |
| 484 ASSERT_TRUE(IsRequestActive()); | 497 ASSERT_TRUE(IsRequestActive()); |
| 485 Mock::VerifyAndClearExpectations(this); | 498 Mock::VerifyAndClearExpectations(this); |
| 499 EXPECT_FALSE(register_completed_); |
| 486 | 500 |
| 487 // Report that the user is not on a hosted domain - callback should be | 501 // Report that the user is not on a hosted domain - callback should be |
| 488 // invoked reporting a failed fetch. | 502 // invoked reporting a failed fetch. |
| 489 EXPECT_CALL(*this, OnPolicyRefresh(false)).Times(1); | |
| 490 ReportHostedDomainStatus(false); | 503 ReportHostedDomainStatus(false); |
| 491 | 504 |
| 492 // Since this is not a hosted domain, we should not issue a request for a | 505 // Since this is not a hosted domain, we should not issue a request for a |
| 493 // DMToken. | 506 // DMToken. |
| 507 EXPECT_TRUE(register_completed_); |
| 508 EXPECT_FALSE(created_client_.get()); |
| 494 ASSERT_FALSE(IsRequestActive()); | 509 ASSERT_FALSE(IsRequestActive()); |
| 495 } | 510 } |
| 496 | 511 |
| 497 TEST_F(UserPolicySigninServiceTest, FetchPolicyFailedRegistration) { | 512 TEST_F(UserPolicySigninServiceTest, RegisterPolicyClientFailedRegistration) { |
| 498 // Set the user as signed in. | |
| 499 SigninManagerFactory::GetForProfile(profile_.get())->SetAuthenticatedUsername( | |
| 500 "testuser@test.com"); | |
| 501 | |
| 502 UserPolicySigninService* signin_service = | 513 UserPolicySigninService* signin_service = |
| 503 UserPolicySigninServiceFactory::GetForProfile(profile_.get()); | 514 UserPolicySigninServiceFactory::GetForProfile(profile_.get()); |
| 504 EXPECT_CALL(*this, OnPolicyRefresh(true)).Times(0); | 515 RegisterPolicyClientWithCallback(signin_service); |
| 505 signin_service->FetchPolicyForSignedInUser( | |
| 506 "mock_token", | |
| 507 base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, | |
| 508 base::Unretained(this))); | |
| 509 | 516 |
| 510 // UserCloudPolicyManager should be initialized. | 517 // UserCloudPolicyManager should not be initialized. |
| 511 ASSERT_TRUE(manager_->core()->service()); | 518 ASSERT_FALSE(manager_->core()->service()); |
| 512 ASSERT_TRUE(IsRequestActive()); | |
| 513 | 519 |
| 514 // Mimic successful oauth token fetch. | 520 // Mimic successful oauth token fetch. |
| 515 MakeOAuthTokenFetchSucceed(); | 521 MakeOAuthTokenFetchSucceed(); |
| 522 EXPECT_FALSE(register_completed_); |
| 516 | 523 |
| 517 // When the user is from a hosted domain, this should kick off client | 524 // When the user is from a hosted domain, this should kick off client |
| 518 // registration. | 525 // registration. |
| 519 MockDeviceManagementJob* register_request = NULL; | 526 MockDeviceManagementJob* register_request = NULL; |
| 520 EXPECT_CALL(*device_management_service_, | 527 EXPECT_CALL(*device_management_service_, |
| 521 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) | 528 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) |
| 522 .WillOnce(device_management_service_->CreateAsyncJob(®ister_request)); | 529 .WillOnce(device_management_service_->CreateAsyncJob(®ister_request)); |
| 523 EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) | 530 EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) |
| 524 .Times(1); | 531 .Times(1); |
| 525 | 532 |
| 526 // Now mimic the user being a hosted domain - this should cause a Register() | 533 // Now mimic the user being a hosted domain - this should cause a Register() |
| 527 // call. | 534 // call. |
| 528 ReportHostedDomainStatus(true); | 535 ReportHostedDomainStatus(true); |
| 529 | 536 |
| 530 // Should have no more outstanding requests. | 537 // Should have no more outstanding requests. |
| 531 ASSERT_FALSE(IsRequestActive()); | 538 ASSERT_FALSE(IsRequestActive()); |
| 532 Mock::VerifyAndClearExpectations(this); | 539 Mock::VerifyAndClearExpectations(this); |
| 533 ASSERT_TRUE(register_request); | 540 ASSERT_TRUE(register_request); |
| 541 EXPECT_FALSE(register_completed_); |
| 534 | 542 |
| 535 EXPECT_CALL(*this, OnPolicyRefresh(false)).Times(1); | |
| 536 // Make client registration fail (hosted domain user that is not managed). | 543 // Make client registration fail (hosted domain user that is not managed). |
| 537 register_request->SendResponse(DM_STATUS_SERVICE_MANAGEMENT_NOT_SUPPORTED, | 544 register_request->SendResponse(DM_STATUS_SERVICE_MANAGEMENT_NOT_SUPPORTED, |
| 538 em::DeviceManagementResponse()); | 545 em::DeviceManagementResponse()); |
| 546 EXPECT_TRUE(register_completed_); |
| 547 EXPECT_FALSE(created_client_.get()); |
| 539 } | 548 } |
| 540 | 549 |
| 541 TEST_F(UserPolicySigninServiceTest, FetchPolicyPolicyFetchFailed) { | 550 TEST_F(UserPolicySigninServiceTest, RegisterPolicyClientSucceeded) { |
| 542 // Set the user as signed in. | |
| 543 SigninManagerFactory::GetForProfile(profile_.get())->SetAuthenticatedUsername( | |
| 544 "testuser@test.com"); | |
| 545 | |
| 546 UserPolicySigninService* signin_service = | 551 UserPolicySigninService* signin_service = |
| 547 UserPolicySigninServiceFactory::GetForProfile(profile_.get()); | 552 UserPolicySigninServiceFactory::GetForProfile(profile_.get()); |
| 548 EXPECT_CALL(*this, OnPolicyRefresh(true)).Times(0); | 553 RegisterPolicyClientWithCallback(signin_service); |
| 549 signin_service->FetchPolicyForSignedInUser( | |
| 550 "mock_token", | |
| 551 base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, | |
| 552 base::Unretained(this))); | |
| 553 | |
| 554 // UserCloudPolicyManager should be initialized. | |
| 555 ASSERT_TRUE(manager_->core()->service()); | |
| 556 ASSERT_TRUE(IsRequestActive()); | |
| 557 | 554 |
| 558 // Mimic successful oauth token fetch. | 555 // Mimic successful oauth token fetch. |
| 559 MakeOAuthTokenFetchSucceed(); | 556 MakeOAuthTokenFetchSucceed(); |
| 560 | 557 |
| 561 // When the user is from a hosted domain, this should kick off client | 558 // When the user is from a hosted domain, this should kick off client |
| 562 // registration. | 559 // registration. |
| 563 MockDeviceManagementJob* register_request = NULL; | 560 MockDeviceManagementJob* register_request = NULL; |
| 564 EXPECT_CALL(*device_management_service_, | 561 EXPECT_CALL(*device_management_service_, |
| 565 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) | 562 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) |
| 566 .WillOnce(device_management_service_->CreateAsyncJob(®ister_request)); | 563 .WillOnce(device_management_service_->CreateAsyncJob(®ister_request)); |
| 567 EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) | 564 EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) |
| 568 .Times(1); | 565 .Times(1); |
| 569 | 566 |
| 570 // Now mimic the user being a hosted domain - this should cause a Register() | 567 // Now mimic the user being a hosted domain - this should cause a Register() |
| 571 // call. | 568 // call. |
| 572 ReportHostedDomainStatus(true); | 569 ReportHostedDomainStatus(true); |
| 573 | 570 |
| 574 // Should have no more outstanding requests. | 571 // Should have no more outstanding requests. |
| 575 ASSERT_FALSE(IsRequestActive()); | 572 ASSERT_FALSE(IsRequestActive()); |
| 576 Mock::VerifyAndClearExpectations(this); | 573 Mock::VerifyAndClearExpectations(this); |
| 577 ASSERT_TRUE(register_request); | 574 ASSERT_TRUE(register_request); |
| 575 EXPECT_FALSE(register_completed_); |
| 578 | 576 |
| 579 // Mimic successful client registration - this should kick off a policy | |
| 580 // fetch. | |
| 581 MockDeviceManagementJob* fetch_request = NULL; | |
| 582 EXPECT_CALL(*device_management_service_, | |
| 583 CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH)) | |
| 584 .WillOnce(device_management_service_->CreateAsyncJob(&fetch_request)); | |
| 585 EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) | |
| 586 .Times(1); | |
| 587 em::DeviceManagementResponse registration_blob; | 577 em::DeviceManagementResponse registration_blob; |
| 588 registration_blob.mutable_register_response()->set_device_management_token( | 578 registration_blob.mutable_register_response()->set_device_management_token( |
| 589 "dm_token"); | 579 "dm_token"); |
| 590 registration_blob.mutable_register_response()->set_enrollment_type( | 580 registration_blob.mutable_register_response()->set_enrollment_type( |
| 591 em::DeviceRegisterResponse::ENTERPRISE); | 581 em::DeviceRegisterResponse::ENTERPRISE); |
| 592 register_request->SendResponse(DM_STATUS_SUCCESS, registration_blob); | 582 register_request->SendResponse(DM_STATUS_SUCCESS, registration_blob); |
| 593 Mock::VerifyAndClearExpectations(this); | 583 Mock::VerifyAndClearExpectations(this); |
| 584 EXPECT_TRUE(register_completed_); |
| 585 EXPECT_TRUE(created_client_.get()); |
| 586 // UserCloudPolicyManager should not be initialized. |
| 587 ASSERT_FALSE(manager_->core()->service()); |
| 588 } |
| 589 |
| 590 TEST_F(UserPolicySigninServiceTest, FetchPolicyFailed) { |
| 591 scoped_ptr<CloudPolicyClient> client = |
| 592 UserCloudPolicyManager::CreateCloudPolicyClient( |
| 593 device_management_service_); |
| 594 client->SetupRegistration("mock_dm_token", "mock_client_id"); |
| 595 |
| 596 // Initiate a policy fetch request. |
| 597 MockDeviceManagementJob* fetch_request = NULL; |
| 598 EXPECT_CALL(*device_management_service_, |
| 599 CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH)) |
| 600 .WillOnce(device_management_service_->CreateAsyncJob(&fetch_request)); |
| 601 EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) |
| 602 .Times(1); |
| 603 UserPolicySigninService* signin_service = |
| 604 UserPolicySigninServiceFactory::GetForProfile(profile_.get()); |
| 605 signin_service->FetchPolicyForSignedInUser( |
| 606 client.Pass(), |
| 607 base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, |
| 608 base::Unretained(this))); |
| 594 ASSERT_TRUE(fetch_request); | 609 ASSERT_TRUE(fetch_request); |
| 595 | 610 |
| 596 // Make the policy fetch fail. | 611 // Make the policy fetch fail. |
| 597 EXPECT_CALL(*this, OnPolicyRefresh(false)).Times(1); | 612 EXPECT_CALL(*this, OnPolicyRefresh(false)).Times(1); |
| 598 fetch_request->SendResponse(DM_STATUS_REQUEST_FAILED, | 613 fetch_request->SendResponse(DM_STATUS_REQUEST_FAILED, |
| 599 em::DeviceManagementResponse()); | 614 em::DeviceManagementResponse()); |
| 615 // UserCloudPolicyManager should be initialized. |
| 616 ASSERT_TRUE(manager_->core()->service()); |
| 600 } | 617 } |
| 601 | 618 |
| 602 TEST_F(UserPolicySigninServiceTest, FetchPolicySuccess) { | 619 TEST_F(UserPolicySigninServiceTest, FetchPolicySuccess) { |
| 603 TestSuccessfulSignin(); | 620 TestSuccessfulSignin(); |
| 604 } | 621 } |
| 605 | 622 |
| 606 TEST_F(UserPolicySigninServiceTest, SignOutThenSignInAgain) { | 623 TEST_F(UserPolicySigninServiceTest, SignOutThenSignInAgain) { |
| 607 TestSuccessfulSignin(); | 624 TestSuccessfulSignin(); |
| 608 | 625 |
| 609 // Now sign out. | 626 // Now sign out. |
| 610 SigninManagerFactory::GetForProfile(profile_.get())->SignOut(); | 627 SigninManagerFactory::GetForProfile(profile_.get())->SignOut(); |
| 611 ASSERT_FALSE(manager_->core()->service()); | 628 ASSERT_FALSE(manager_->core()->service()); |
| 612 | 629 |
| 613 // Now sign in again. | 630 // Now sign in again. |
| 614 TestSuccessfulSignin(); | 631 TestSuccessfulSignin(); |
| 615 } | 632 } |
| 616 | 633 |
| 617 } // namespace | 634 } // namespace |
| 618 | 635 |
| 619 } // namespace policy | 636 } // namespace policy |
| OLD | NEW |