Index: chrome/browser/policy/user_policy_signin_service_unittest.cc |
diff --git a/chrome/browser/policy/user_policy_signin_service_unittest.cc b/chrome/browser/policy/user_policy_signin_service_unittest.cc |
index 3920bba090edcb8cde3c1a6b1fb4ad776c9dee5d..821de544cfd9dba33329db46cbc0d09ab150e8cf 100644 |
--- a/chrome/browser/policy/user_policy_signin_service_unittest.cc |
+++ b/chrome/browser/policy/user_policy_signin_service_unittest.cc |
@@ -64,9 +64,23 @@ class UserPolicySigninServiceTest : public testing::Test { |
: loop_(MessageLoop::TYPE_UI), |
ui_thread_(content::BrowserThread::UI, &loop_), |
file_thread_(content::BrowserThread::FILE, &loop_), |
- io_thread_(content::BrowserThread::IO, &loop_) {} |
+ io_thread_(content::BrowserThread::IO, &loop_), |
+ register_completed_(false) {} |
MOCK_METHOD1(OnPolicyRefresh, void(bool)); |
+ void OnRegisterCompleted(scoped_ptr<CloudPolicyClient> client) { |
+ register_completed_ = true; |
+ created_client_.swap(client); |
+ } |
+ |
+ void RegisterPolicyClientWithCallback(UserPolicySigninService* service) { |
+ service->RegisterPolicyClient( |
+ "testuser@test.com", |
+ "mock_oauth_token", |
+ base::Bind(&UserPolicySigninServiceTest::OnRegisterCompleted, |
+ base::Unretained(this))); |
+ ASSERT_TRUE(IsRequestActive()); |
+ } |
virtual void SetUp() OVERRIDE { |
device_management_service_ = new MockDeviceManagementService(); |
@@ -138,21 +152,10 @@ class UserPolicySigninServiceTest : public testing::Test { |
} |
void TestSuccessfulSignin() { |
- // Set the user as signed in. |
- SigninManagerFactory::GetForProfile(profile_.get())-> |
- SetAuthenticatedUsername("testuser@test.com"); |
- |
UserPolicySigninService* signin_service = |
UserPolicySigninServiceFactory::GetForProfile(profile_.get()); |
EXPECT_CALL(*this, OnPolicyRefresh(true)).Times(0); |
- signin_service->FetchPolicyForSignedInUser( |
- "mock_token", |
- base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, |
- base::Unretained(this))); |
- |
- // UserCloudPolicyManager should be initialized. |
- ASSERT_TRUE(manager_->core()->service()); |
- ASSERT_TRUE(IsRequestActive()); |
+ RegisterPolicyClientWithCallback(signin_service); |
// Mimic successful oauth token fetch. |
MakeOAuthTokenFetchSucceed(); |
@@ -176,27 +179,43 @@ class UserPolicySigninServiceTest : public testing::Test { |
Mock::VerifyAndClearExpectations(this); |
ASSERT_TRUE(register_request); |
- // Mimic successful client registration - this should kick off a policy |
- // fetch. |
- MockDeviceManagementJob* fetch_request = NULL; |
- EXPECT_CALL(*device_management_service_, |
- CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH)) |
- .WillOnce(device_management_service_->CreateAsyncJob(&fetch_request)); |
- EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) |
- .Times(1); |
+ // Mimic successful client registration - this should register the client |
+ // and invoke the callback. |
em::DeviceManagementResponse registration_blob; |
registration_blob.mutable_register_response()->set_device_management_token( |
"dm_token"); |
registration_blob.mutable_register_response()->set_enrollment_type( |
em::DeviceRegisterResponse::ENTERPRISE); |
register_request->SendResponse(DM_STATUS_SUCCESS, registration_blob); |
+ |
+ // UserCloudPolicyManager should not be initialized yet. |
+ ASSERT_FALSE(manager_->core()->service()); |
+ EXPECT_TRUE(register_completed_); |
+ EXPECT_TRUE(created_client_.get()); |
+ |
+ // Now call to fetch policy - this should fire off a fetch request. |
+ MockDeviceManagementJob* fetch_request = NULL; |
+ EXPECT_CALL(*device_management_service_, |
+ CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH)) |
+ .WillOnce(device_management_service_->CreateAsyncJob(&fetch_request)); |
+ EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) |
+ .Times(1); |
+ signin_service->FetchPolicyForSignedInUser( |
+ created_client_.Pass(), |
+ base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, |
+ base::Unretained(this))); |
+ |
Mock::VerifyAndClearExpectations(this); |
ASSERT_TRUE(fetch_request); |
+ // UserCloudPolicyManager should now be initialized. |
+ ASSERT_TRUE(manager_->core()->service()); |
+ |
// Make the policy fetch succeed - this should result in a write to the |
// store and ultimately result in a call to OnPolicyRefresh(). |
EXPECT_CALL(*mock_store_, Store(_)); |
EXPECT_CALL(*this, OnPolicyRefresh(true)).Times(1); |
+ |
// Create a fake policy blob to deliver to the client. |
em::DeviceManagementResponse policy_blob; |
em::PolicyData policy_data; |
@@ -228,6 +247,13 @@ class UserPolicySigninServiceTest : public testing::Test { |
net::TestURLFetcherFactory url_factory_; |
+ // Used in conjunction with OnRegisterCompleted() to test client registration |
+ // callbacks. |
+ scoped_ptr<CloudPolicyClient> created_client_; |
+ |
+ // True if OnRegisterCompleted() was called. |
+ bool register_completed_; |
+ |
// Weak ptr to the MockDeviceManagementService (object is owned by the |
// BrowserPolicyConnector). |
MockDeviceManagementService* device_management_service_; |
@@ -435,46 +461,33 @@ TEST_F(UserPolicySigninServiceTest, SignOutAfterInit) { |
ASSERT_FALSE(manager_->core()->service()); |
} |
-TEST_F(UserPolicySigninServiceTest, FetchPolicyOAuthFailure) { |
- // Set the user as signed in. |
- SigninManagerFactory::GetForProfile(profile_.get())->SetAuthenticatedUsername( |
- "testuser@test.com"); |
- |
+TEST_F(UserPolicySigninServiceTest, RegisterPolicyClientOAuthFailure) { |
UserPolicySigninService* signin_service = |
UserPolicySigninServiceFactory::GetForProfile(profile_.get()); |
- EXPECT_CALL(*this, OnPolicyRefresh(_)).Times(0); |
- signin_service->FetchPolicyForSignedInUser( |
- "mock_token", |
- base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, |
- base::Unretained(this))); |
+ RegisterPolicyClientWithCallback(signin_service); |
Mock::VerifyAndClearExpectations(this); |
- // UserCloudPolicyManager should be initialized. |
- ASSERT_TRUE(manager_->core()->service()); |
+ // UserCloudPolicyManager should not be initialized. |
+ ASSERT_FALSE(manager_->core()->service()); |
ASSERT_TRUE(IsRequestActive()); |
+ EXPECT_FALSE(register_completed_); |
// Cause the access token fetch to fail - callback should be invoked. |
- EXPECT_CALL(*this, OnPolicyRefresh(false)).Times(1); |
net::TestURLFetcher* fetcher = url_factory_.GetFetcherByID(0); |
fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED, -1)); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
+ EXPECT_TRUE(register_completed_); |
+ EXPECT_FALSE(created_client_.get()); |
+ EXPECT_FALSE(IsRequestActive()); |
} |
-TEST_F(UserPolicySigninServiceTest, FetchPolicyNonHostedDomain) { |
- // Set the user as signed in. |
- SigninManagerFactory::GetForProfile(profile_.get())->SetAuthenticatedUsername( |
- "testuser@test.com"); |
- |
+TEST_F(UserPolicySigninServiceTest, RegisterPolicyClientNonHostedDomain) { |
UserPolicySigninService* signin_service = |
UserPolicySigninServiceFactory::GetForProfile(profile_.get()); |
- EXPECT_CALL(*this, OnPolicyRefresh(_)).Times(0); |
- signin_service->FetchPolicyForSignedInUser( |
- "mock_token", |
- base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, |
- base::Unretained(this))); |
+ RegisterPolicyClientWithCallback(signin_service); |
- // UserCloudPolicyManager should be initialized. |
- ASSERT_TRUE(manager_->core()->service()); |
+ // UserCloudPolicyManager should not be initialized. |
+ ASSERT_FALSE(manager_->core()->service()); |
ASSERT_TRUE(IsRequestActive()); |
// Cause the access token request to succeed. |
@@ -483,36 +496,30 @@ TEST_F(UserPolicySigninServiceTest, FetchPolicyNonHostedDomain) { |
// Should be a follow-up fetch to check the hosted-domain status. |
ASSERT_TRUE(IsRequestActive()); |
Mock::VerifyAndClearExpectations(this); |
+ EXPECT_FALSE(register_completed_); |
// Report that the user is not on a hosted domain - callback should be |
// invoked reporting a failed fetch. |
- EXPECT_CALL(*this, OnPolicyRefresh(false)).Times(1); |
ReportHostedDomainStatus(false); |
// Since this is not a hosted domain, we should not issue a request for a |
// DMToken. |
+ EXPECT_TRUE(register_completed_); |
+ EXPECT_FALSE(created_client_.get()); |
ASSERT_FALSE(IsRequestActive()); |
} |
-TEST_F(UserPolicySigninServiceTest, FetchPolicyFailedRegistration) { |
- // Set the user as signed in. |
- SigninManagerFactory::GetForProfile(profile_.get())->SetAuthenticatedUsername( |
- "testuser@test.com"); |
- |
+TEST_F(UserPolicySigninServiceTest, RegisterPolicyClientFailedRegistration) { |
UserPolicySigninService* signin_service = |
UserPolicySigninServiceFactory::GetForProfile(profile_.get()); |
- EXPECT_CALL(*this, OnPolicyRefresh(true)).Times(0); |
- signin_service->FetchPolicyForSignedInUser( |
- "mock_token", |
- base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, |
- base::Unretained(this))); |
+ RegisterPolicyClientWithCallback(signin_service); |
- // UserCloudPolicyManager should be initialized. |
- ASSERT_TRUE(manager_->core()->service()); |
- ASSERT_TRUE(IsRequestActive()); |
+ // UserCloudPolicyManager should not be initialized. |
+ ASSERT_FALSE(manager_->core()->service()); |
// Mimic successful oauth token fetch. |
MakeOAuthTokenFetchSucceed(); |
+ EXPECT_FALSE(register_completed_); |
// When the user is from a hosted domain, this should kick off client |
// registration. |
@@ -531,29 +538,19 @@ TEST_F(UserPolicySigninServiceTest, FetchPolicyFailedRegistration) { |
ASSERT_FALSE(IsRequestActive()); |
Mock::VerifyAndClearExpectations(this); |
ASSERT_TRUE(register_request); |
+ EXPECT_FALSE(register_completed_); |
- EXPECT_CALL(*this, OnPolicyRefresh(false)).Times(1); |
// Make client registration fail (hosted domain user that is not managed). |
register_request->SendResponse(DM_STATUS_SERVICE_MANAGEMENT_NOT_SUPPORTED, |
em::DeviceManagementResponse()); |
+ EXPECT_TRUE(register_completed_); |
+ EXPECT_FALSE(created_client_.get()); |
} |
-TEST_F(UserPolicySigninServiceTest, FetchPolicyPolicyFetchFailed) { |
- // Set the user as signed in. |
- SigninManagerFactory::GetForProfile(profile_.get())->SetAuthenticatedUsername( |
- "testuser@test.com"); |
- |
+TEST_F(UserPolicySigninServiceTest, RegisterPolicyClientSucceeded) { |
UserPolicySigninService* signin_service = |
UserPolicySigninServiceFactory::GetForProfile(profile_.get()); |
- EXPECT_CALL(*this, OnPolicyRefresh(true)).Times(0); |
- signin_service->FetchPolicyForSignedInUser( |
- "mock_token", |
- base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, |
- base::Unretained(this))); |
- |
- // UserCloudPolicyManager should be initialized. |
- ASSERT_TRUE(manager_->core()->service()); |
- ASSERT_TRUE(IsRequestActive()); |
+ RegisterPolicyClientWithCallback(signin_service); |
// Mimic successful oauth token fetch. |
MakeOAuthTokenFetchSucceed(); |
@@ -575,15 +572,8 @@ TEST_F(UserPolicySigninServiceTest, FetchPolicyPolicyFetchFailed) { |
ASSERT_FALSE(IsRequestActive()); |
Mock::VerifyAndClearExpectations(this); |
ASSERT_TRUE(register_request); |
+ EXPECT_FALSE(register_completed_); |
- // Mimic successful client registration - this should kick off a policy |
- // fetch. |
- MockDeviceManagementJob* fetch_request = NULL; |
- EXPECT_CALL(*device_management_service_, |
- CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH)) |
- .WillOnce(device_management_service_->CreateAsyncJob(&fetch_request)); |
- EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) |
- .Times(1); |
em::DeviceManagementResponse registration_blob; |
registration_blob.mutable_register_response()->set_device_management_token( |
"dm_token"); |
@@ -591,12 +581,39 @@ TEST_F(UserPolicySigninServiceTest, FetchPolicyPolicyFetchFailed) { |
em::DeviceRegisterResponse::ENTERPRISE); |
register_request->SendResponse(DM_STATUS_SUCCESS, registration_blob); |
Mock::VerifyAndClearExpectations(this); |
+ EXPECT_TRUE(register_completed_); |
+ EXPECT_TRUE(created_client_.get()); |
+ // UserCloudPolicyManager should not be initialized. |
+ ASSERT_FALSE(manager_->core()->service()); |
+} |
+ |
+TEST_F(UserPolicySigninServiceTest, FetchPolicyFailed) { |
+ scoped_ptr<CloudPolicyClient> client = |
+ UserCloudPolicyManager::CreateCloudPolicyClient( |
+ device_management_service_); |
+ client->SetupRegistration("mock_dm_token", "mock_client_id"); |
+ |
+ // Initiate a policy fetch request. |
+ MockDeviceManagementJob* fetch_request = NULL; |
+ EXPECT_CALL(*device_management_service_, |
+ CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH)) |
+ .WillOnce(device_management_service_->CreateAsyncJob(&fetch_request)); |
+ EXPECT_CALL(*device_management_service_, StartJob(_, _, _, _, _, _, _)) |
+ .Times(1); |
+ UserPolicySigninService* signin_service = |
+ UserPolicySigninServiceFactory::GetForProfile(profile_.get()); |
+ signin_service->FetchPolicyForSignedInUser( |
+ client.Pass(), |
+ base::Bind(&UserPolicySigninServiceTest::OnPolicyRefresh, |
+ base::Unretained(this))); |
ASSERT_TRUE(fetch_request); |
// Make the policy fetch fail. |
EXPECT_CALL(*this, OnPolicyRefresh(false)).Times(1); |
fetch_request->SendResponse(DM_STATUS_REQUEST_FAILED, |
em::DeviceManagementResponse()); |
+ // UserCloudPolicyManager should be initialized. |
+ ASSERT_TRUE(manager_->core()->service()); |
} |
TEST_F(UserPolicySigninServiceTest, FetchPolicySuccess) { |