Index: chrome/browser/chromeos/policy/device_local_account_policy_service_unittest.cc |
diff --git a/chrome/browser/chromeos/policy/device_local_account_policy_service_unittest.cc b/chrome/browser/chromeos/policy/device_local_account_policy_service_unittest.cc |
index 8312db92f4ae5c6b6c86f7e98d08029efc1814ef..3e48ff6777ec858b78b9d22e027eca7d26be5ed5 100644 |
--- a/chrome/browser/chromeos/policy/device_local_account_policy_service_unittest.cc |
+++ b/chrome/browser/chromeos/policy/device_local_account_policy_service_unittest.cc |
@@ -7,6 +7,15 @@ |
#include "base/bind.h" |
#include "base/bind_helpers.h" |
#include "base/callback.h" |
+#include "base/file_util.h" |
+#include "base/files/file_path.h" |
+#include "base/files/scoped_temp_dir.h" |
+#include "base/path_service.h" |
+#include "base/run_loop.h" |
+#include "base/strings/string_number_conversions.h" |
+#include "base/strings/stringprintf.h" |
+#include "base/test/scoped_path_override.h" |
+#include "base/test/test_simple_task_runner.h" |
#include "chrome/browser/chromeos/policy/device_local_account.h" |
#include "chrome/browser/chromeos/policy/device_local_account_policy_provider.h" |
#include "chrome/browser/chromeos/settings/cros_settings.h" |
@@ -14,14 +23,18 @@ |
#include "chrome/browser/chromeos/settings/device_settings_test_helper.h" |
#include "chrome/browser/policy/cloud/cloud_policy_client.h" |
#include "chrome/browser/policy/cloud/cloud_policy_constants.h" |
+#include "chrome/browser/policy/cloud/cloud_policy_core.h" |
#include "chrome/browser/policy/cloud/cloud_policy_service.h" |
#include "chrome/browser/policy/cloud/mock_device_management_service.h" |
#include "chrome/browser/policy/cloud/policy_builder.h" |
#include "chrome/browser/policy/external_data_fetcher.h" |
#include "chrome/browser/policy/mock_configuration_policy_provider.h" |
#include "chrome/browser/policy/proto/chromeos/chrome_device_policy.pb.h" |
+#include "chrome/common/chrome_paths.h" |
+#include "chromeos/chromeos_paths.h" |
#include "chromeos/dbus/power_policy_controller.h" |
#include "policy/policy_constants.h" |
+#include "policy/proto/cloud_policy.pb.h" |
#include "testing/gtest/include/gtest/gtest.h" |
using testing::AnyNumber; |
@@ -34,6 +47,19 @@ namespace em = enterprise_management; |
namespace policy { |
+namespace { |
+ |
+const char kAccount1[] = "account1@localhost"; |
+const char kAccount2[] = "account2@localhost"; |
+const char kAccount3[] = "account3@localhost"; |
+ |
+const char kExtensionID[] = "kbmnembihfiondgfjekmnmcbddelicoi"; |
+const char kExtensionVersion[] = "1.0.0.0"; |
+const char kExtensionCRXPath[] = "extensions/hosted_app.crx"; |
+const char kUpdateURL[] = "https://clients2.google.com/service/update2/crx"; |
+ |
+} // namespace |
+ |
class MockDeviceLocalAccountPolicyServiceObserver |
: public DeviceLocalAccountPolicyService::Observer { |
public: |
@@ -41,273 +67,334 @@ class MockDeviceLocalAccountPolicyServiceObserver |
MOCK_METHOD0(OnDeviceLocalAccountsChanged, void(void)); |
}; |
-class DeviceLocalAccountPolicyServiceTest |
+class DeviceLocalAccountPolicyServiceTestBase |
: public chromeos::DeviceSettingsTestBase { |
public: |
- DeviceLocalAccountPolicyServiceTest() |
- : public_session_user_id_(GenerateDeviceLocalAccountUserId( |
- PolicyBuilder::kFakeUsername, |
- DeviceLocalAccount::TYPE_PUBLIC_SESSION)), |
- cros_settings_(&device_settings_service_), |
- service_(&device_settings_test_helper_, |
- &device_settings_service_, |
- &cros_settings_) {} |
- |
- virtual void SetUp() OVERRIDE { |
- DeviceSettingsTestBase::SetUp(); |
- |
- // Values implicitly enforced for public accounts. |
- expected_policy_map_.Set(key::kLidCloseAction, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- base::Value::CreateIntegerValue( |
- chromeos::PowerPolicyController:: |
- ACTION_STOP_SESSION), |
- NULL); |
- expected_policy_map_.Set(key::kShelfAutoHideBehavior, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- Value::CreateStringValue("Never"), |
- NULL); |
- expected_policy_map_.Set(key::kShowLogoutButtonInTray, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- Value::CreateBooleanValue(true), |
- NULL); |
- expected_policy_map_.Set(key::kFullscreenAllowed, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- Value::CreateBooleanValue(false), |
- NULL); |
- |
- // Explicitly set value. |
- expected_policy_map_.Set(key::kDisableSpdy, |
- POLICY_LEVEL_MANDATORY, |
- POLICY_SCOPE_USER, |
- Value::CreateBooleanValue(true), |
- NULL); |
- |
- device_local_account_policy_.payload().mutable_disablespdy()->set_value( |
- true); |
- device_local_account_policy_.policy_data().set_policy_type( |
- dm_protocol::kChromePublicAccountPolicyType); |
- device_local_account_policy_.policy_data().set_settings_entity_id( |
- PolicyBuilder::kFakeUsername); |
- device_local_account_policy_.Build(); |
- |
- em::DeviceLocalAccountInfoProto* account = |
- device_policy_.payload().mutable_device_local_accounts()->add_account(); |
- account->set_account_id(PolicyBuilder::kFakeUsername); |
- account->set_type( |
- em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION); |
- device_policy_.Build(); |
- |
- service_.AddObserver(&service_observer_); |
- } |
- |
- virtual void TearDown() OVERRIDE { |
- service_.RemoveObserver(&service_observer_); |
- |
- DeviceSettingsTestBase::TearDown(); |
- } |
- |
- void InstallDevicePolicy() { |
- EXPECT_CALL(service_observer_, OnDeviceLocalAccountsChanged()); |
- device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
- ReloadDeviceSettings(); |
- Mock::VerifyAndClearExpectations(&service_observer_); |
- } |
+ DeviceLocalAccountPolicyServiceTestBase(); |
- MOCK_METHOD1(OnRefreshDone, void(bool)); |
+ virtual void SetUp() OVERRIDE; |
+ |
+ void CreatePolicyService(); |
+ |
+ void InstallDeviceLocalAccountPolicy(const std::string& account_id); |
+ void AddDeviceLocalAccountToPolicy(const std::string& account_id); |
+ virtual void InstallDevicePolicy(); |
- const std::string public_session_user_id_; |
+ const std::string account_1_user_id_; |
+ const std::string account_2_user_id_; |
PolicyMap expected_policy_map_; |
UserPolicyBuilder device_local_account_policy_; |
chromeos::CrosSettings cros_settings_; |
- MockDeviceLocalAccountPolicyServiceObserver service_observer_; |
+ scoped_refptr<base::TestSimpleTaskRunner> extension_cache_task_runner_; |
MockDeviceManagementService mock_device_management_service_; |
- DeviceLocalAccountPolicyService service_; |
+ scoped_ptr<DeviceLocalAccountPolicyService> service_; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyServiceTestBase); |
+}; |
+ |
+class DeviceLocalAccountPolicyServiceTest |
+ : public DeviceLocalAccountPolicyServiceTestBase { |
+ public: |
+ MOCK_METHOD1(OnRefreshDone, void(bool)); |
+ |
+ protected: |
+ DeviceLocalAccountPolicyServiceTest(); |
+ |
+ virtual void SetUp() OVERRIDE; |
+ virtual void TearDown() OVERRIDE; |
+ |
+ void InstallDevicePolicy() OVERRIDE; |
+ |
+ MockDeviceLocalAccountPolicyServiceObserver service_observer_; |
private: |
DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyServiceTest); |
}; |
+DeviceLocalAccountPolicyServiceTestBase:: |
+ DeviceLocalAccountPolicyServiceTestBase() |
+ : account_1_user_id_(GenerateDeviceLocalAccountUserId( |
+ kAccount1, |
+ DeviceLocalAccount::TYPE_PUBLIC_SESSION)), |
+ account_2_user_id_(GenerateDeviceLocalAccountUserId( |
+ kAccount2, |
+ DeviceLocalAccount::TYPE_PUBLIC_SESSION)), |
+ cros_settings_(&device_settings_service_), |
+ extension_cache_task_runner_(new base::TestSimpleTaskRunner) { |
+} |
+ |
+void DeviceLocalAccountPolicyServiceTestBase::SetUp() { |
+ chromeos::DeviceSettingsTestBase::SetUp(); |
+ |
+ // Values implicitly enforced for public accounts. |
+ expected_policy_map_.Set(key::kLidCloseAction, |
+ POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, |
+ base::Value::CreateIntegerValue( |
+ chromeos::PowerPolicyController:: |
+ ACTION_STOP_SESSION), |
+ NULL); |
+ expected_policy_map_.Set(key::kShelfAutoHideBehavior, |
+ POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, |
+ Value::CreateStringValue("Never"), |
+ NULL); |
+ expected_policy_map_.Set(key::kShowLogoutButtonInTray, |
+ POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, |
+ Value::CreateBooleanValue(true), |
+ NULL); |
+ expected_policy_map_.Set(key::kFullscreenAllowed, |
+ POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, |
+ Value::CreateBooleanValue(false), |
+ NULL); |
+ |
+ // Explicitly set value. |
+ expected_policy_map_.Set(key::kDisableSpdy, |
+ POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, |
+ Value::CreateBooleanValue(true), |
+ NULL); |
+ |
+ device_local_account_policy_.payload().mutable_disablespdy()->set_value( |
+ true); |
+ device_local_account_policy_.policy_data().set_policy_type( |
+ dm_protocol::kChromePublicAccountPolicyType); |
+} |
+ |
+void DeviceLocalAccountPolicyServiceTestBase::CreatePolicyService() { |
+ service_.reset(new DeviceLocalAccountPolicyService( |
+ &device_settings_test_helper_, |
+ &device_settings_service_, |
+ &cros_settings_, |
+ extension_cache_task_runner_)); |
+} |
+ |
+void DeviceLocalAccountPolicyServiceTestBase:: |
+ InstallDeviceLocalAccountPolicy(const std::string& account_id) { |
+ device_local_account_policy_.policy_data().set_settings_entity_id(account_id); |
+ device_local_account_policy_.policy_data().set_username(account_id); |
+ device_local_account_policy_.Build(); |
+ device_settings_test_helper_.set_device_local_account_policy_blob( |
+ account_id, device_local_account_policy_.GetBlob()); |
+} |
+ |
+void DeviceLocalAccountPolicyServiceTestBase::AddDeviceLocalAccountToPolicy( |
+ const std::string& account_id) { |
+ em::DeviceLocalAccountInfoProto* account = |
+ device_policy_.payload().mutable_device_local_accounts()->add_account(); |
+ account->set_account_id(account_id); |
+ account->set_type( |
+ em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION); |
+} |
+ |
+void DeviceLocalAccountPolicyServiceTestBase::InstallDevicePolicy() { |
+ device_policy_.Build(); |
+ device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
+ ReloadDeviceSettings(); |
+} |
+ |
+DeviceLocalAccountPolicyServiceTest::DeviceLocalAccountPolicyServiceTest() { |
+ CreatePolicyService(); |
+} |
+ |
+void DeviceLocalAccountPolicyServiceTest::SetUp() { |
+ DeviceLocalAccountPolicyServiceTestBase::SetUp(); |
+ service_->AddObserver(&service_observer_); |
+} |
+ |
+void DeviceLocalAccountPolicyServiceTest::TearDown() { |
+ service_->RemoveObserver(&service_observer_); |
+ DeviceLocalAccountPolicyServiceTestBase::TearDown(); |
+} |
+ |
+void DeviceLocalAccountPolicyServiceTest::InstallDevicePolicy() { |
+ EXPECT_CALL(service_observer_, OnDeviceLocalAccountsChanged()); |
+ DeviceLocalAccountPolicyServiceTestBase::InstallDevicePolicy(); |
+ Mock::VerifyAndClearExpectations(&service_observer_); |
+} |
+ |
TEST_F(DeviceLocalAccountPolicyServiceTest, NoAccounts) { |
- EXPECT_FALSE(service_.GetBrokerForUser(public_session_user_id_)); |
+ EXPECT_FALSE(service_->GetBrokerForUser(account_1_user_id_)); |
} |
TEST_F(DeviceLocalAccountPolicyServiceTest, GetBroker) { |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
InstallDevicePolicy(); |
DeviceLocalAccountPolicyBroker* broker = |
- service_.GetBrokerForUser(public_session_user_id_); |
+ service_->GetBrokerForUser(account_1_user_id_); |
ASSERT_TRUE(broker); |
- EXPECT_EQ(public_session_user_id_, broker->user_id()); |
+ EXPECT_EQ(account_1_user_id_, broker->user_id()); |
ASSERT_TRUE(broker->core()->store()); |
EXPECT_EQ(CloudPolicyStore::STATUS_OK, broker->core()->store()->status()); |
EXPECT_FALSE(broker->core()->client()); |
- EXPECT_TRUE(broker->core()->store()->policy_map().empty()); |
+ EXPECT_FALSE(broker->core()->store()->policy_map().empty()); |
} |
TEST_F(DeviceLocalAccountPolicyServiceTest, LoadNoPolicy) { |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
InstallDevicePolicy(); |
- EXPECT_CALL(service_observer_, OnPolicyUpdated(public_session_user_id_)); |
DeviceLocalAccountPolicyBroker* broker = |
- service_.GetBrokerForUser(public_session_user_id_); |
+ service_->GetBrokerForUser(account_1_user_id_); |
ASSERT_TRUE(broker); |
- FlushDeviceSettings(); |
- Mock::VerifyAndClearExpectations(&service_observer_); |
- |
+ EXPECT_EQ(account_1_user_id_, broker->user_id()); |
ASSERT_TRUE(broker->core()->store()); |
EXPECT_EQ(CloudPolicyStore::STATUS_LOAD_ERROR, |
broker->core()->store()->status()); |
EXPECT_TRUE(broker->core()->store()->policy_map().empty()); |
- EXPECT_FALSE(service_.IsPolicyAvailableForUser(public_session_user_id_)); |
+ EXPECT_FALSE(service_->IsPolicyAvailableForUser(account_1_user_id_)); |
} |
TEST_F(DeviceLocalAccountPolicyServiceTest, LoadValidationFailure) { |
device_local_account_policy_.policy_data().set_policy_type( |
dm_protocol::kChromeUserPolicyType); |
- device_local_account_policy_.Build(); |
- device_settings_test_helper_.set_device_local_account_policy_blob( |
- PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob()); |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
InstallDevicePolicy(); |
- EXPECT_CALL(service_observer_, OnPolicyUpdated(public_session_user_id_)); |
DeviceLocalAccountPolicyBroker* broker = |
- service_.GetBrokerForUser(public_session_user_id_); |
+ service_->GetBrokerForUser(account_1_user_id_); |
ASSERT_TRUE(broker); |
- FlushDeviceSettings(); |
- Mock::VerifyAndClearExpectations(&service_observer_); |
- |
+ EXPECT_EQ(account_1_user_id_, broker->user_id()); |
ASSERT_TRUE(broker->core()->store()); |
EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, |
broker->core()->store()->status()); |
EXPECT_TRUE(broker->core()->store()->policy_map().empty()); |
- EXPECT_FALSE(service_.IsPolicyAvailableForUser(public_session_user_id_)); |
+ EXPECT_FALSE(service_->IsPolicyAvailableForUser(account_1_user_id_)); |
} |
TEST_F(DeviceLocalAccountPolicyServiceTest, LoadPolicy) { |
- device_settings_test_helper_.set_device_local_account_policy_blob( |
- PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob()); |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
InstallDevicePolicy(); |
- EXPECT_CALL(service_observer_, OnPolicyUpdated(public_session_user_id_)); |
DeviceLocalAccountPolicyBroker* broker = |
- service_.GetBrokerForUser(public_session_user_id_); |
+ service_->GetBrokerForUser(account_1_user_id_); |
ASSERT_TRUE(broker); |
- FlushDeviceSettings(); |
- Mock::VerifyAndClearExpectations(&service_observer_); |
- |
+ EXPECT_EQ(account_1_user_id_, broker->user_id()); |
ASSERT_TRUE(broker->core()->store()); |
- EXPECT_EQ(CloudPolicyStore::STATUS_OK, |
- broker->core()->store()->status()); |
+ EXPECT_EQ(CloudPolicyStore::STATUS_OK, broker->core()->store()->status()); |
ASSERT_TRUE(broker->core()->store()->policy()); |
EXPECT_EQ(device_local_account_policy_.policy_data().SerializeAsString(), |
broker->core()->store()->policy()->SerializeAsString()); |
EXPECT_TRUE(expected_policy_map_.Equals( |
broker->core()->store()->policy_map())); |
- EXPECT_TRUE(service_.IsPolicyAvailableForUser(public_session_user_id_)); |
+ EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); |
} |
TEST_F(DeviceLocalAccountPolicyServiceTest, StoreValidationFailure) { |
- device_local_account_policy_.policy_data().set_policy_type( |
- dm_protocol::kChromeUserPolicyType); |
- device_local_account_policy_.Build(); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
InstallDevicePolicy(); |
+ Mock::VerifyAndClearExpectations(&service_observer_); |
- EXPECT_CALL(service_observer_, OnPolicyUpdated(public_session_user_id_)); |
DeviceLocalAccountPolicyBroker* broker = |
- service_.GetBrokerForUser(public_session_user_id_); |
+ service_->GetBrokerForUser(account_1_user_id_); |
ASSERT_TRUE(broker); |
+ EXPECT_EQ(account_1_user_id_, broker->user_id()); |
ASSERT_TRUE(broker->core()->store()); |
+ |
+ device_local_account_policy_.policy_data().set_policy_type( |
+ dm_protocol::kChromeUserPolicyType); |
+ device_local_account_policy_.Build(); |
broker->core()->store()->Store(device_local_account_policy_.policy()); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
FlushDeviceSettings(); |
- Mock::VerifyAndClearExpectations(&service_observer_); |
- ASSERT_TRUE(broker->core()->store()); |
EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, |
broker->core()->store()->status()); |
EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_WRONG_POLICY_TYPE, |
broker->core()->store()->validation_status()); |
- EXPECT_FALSE(service_.IsPolicyAvailableForUser(public_session_user_id_)); |
+ EXPECT_FALSE(service_->IsPolicyAvailableForUser(account_1_user_id_)); |
} |
TEST_F(DeviceLocalAccountPolicyServiceTest, StorePolicy) { |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
InstallDevicePolicy(); |
+ Mock::VerifyAndClearExpectations(&service_observer_); |
- EXPECT_CALL(service_observer_, OnPolicyUpdated(public_session_user_id_)); |
DeviceLocalAccountPolicyBroker* broker = |
- service_.GetBrokerForUser(public_session_user_id_); |
+ service_->GetBrokerForUser(account_1_user_id_); |
ASSERT_TRUE(broker); |
+ EXPECT_EQ(account_1_user_id_, broker->user_id()); |
ASSERT_TRUE(broker->core()->store()); |
+ |
+ device_local_account_policy_.policy_data().set_settings_entity_id(kAccount1); |
+ device_local_account_policy_.policy_data().set_username(kAccount1); |
+ device_local_account_policy_.Build(); |
broker->core()->store()->Store(device_local_account_policy_.policy()); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
FlushDeviceSettings(); |
- Mock::VerifyAndClearExpectations(&service_observer_); |
- EXPECT_EQ(device_local_account_policy_.GetBlob(), |
- device_settings_test_helper_.device_local_account_policy_blob( |
- PolicyBuilder::kFakeUsername)); |
- EXPECT_TRUE(service_.IsPolicyAvailableForUser(public_session_user_id_)); |
+ EXPECT_EQ(CloudPolicyStore::STATUS_OK, broker->core()->store()->status()); |
+ ASSERT_TRUE(broker->core()->store()->policy()); |
+ EXPECT_EQ(device_local_account_policy_.policy_data().SerializeAsString(), |
+ broker->core()->store()->policy()->SerializeAsString()); |
+ EXPECT_TRUE(expected_policy_map_.Equals( |
+ broker->core()->store()->policy_map())); |
+ EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); |
} |
TEST_F(DeviceLocalAccountPolicyServiceTest, DevicePolicyChange) { |
- device_settings_test_helper_.set_device_local_account_policy_blob( |
- PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob()); |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
InstallDevicePolicy(); |
- EXPECT_CALL(service_observer_, OnDeviceLocalAccountsChanged()); |
device_policy_.payload().mutable_device_local_accounts()->clear_account(); |
- device_policy_.Build(); |
- device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
- device_settings_service_.PropertyChangeComplete(true); |
- FlushDeviceSettings(); |
- EXPECT_FALSE(service_.GetBrokerForUser(public_session_user_id_)); |
- Mock::VerifyAndClearExpectations(&service_observer_); |
+ InstallDevicePolicy(); |
+ |
+ EXPECT_FALSE(service_->GetBrokerForUser(account_1_user_id_)); |
} |
TEST_F(DeviceLocalAccountPolicyServiceTest, DuplicateAccounts) { |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
InstallDevicePolicy(); |
- DeviceLocalAccountPolicyBroker* broker = |
- service_.GetBrokerForUser(public_session_user_id_); |
- ASSERT_TRUE(broker); |
+ Mock::VerifyAndClearExpectations(&service_observer_); |
// Add a second entry with a duplicate account name to device policy. |
- em::DeviceLocalAccountInfoProto* account = |
- device_policy_.payload().mutable_device_local_accounts()->add_account(); |
- account->set_account_id(PolicyBuilder::kFakeUsername); |
- account->set_type( |
- em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION); |
- device_policy_.Build(); |
- device_settings_test_helper_.set_device_local_account_policy_blob( |
- PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob()); |
- device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
- |
- EXPECT_CALL(service_observer_, OnDeviceLocalAccountsChanged()); |
- EXPECT_CALL(service_observer_, OnPolicyUpdated(public_session_user_id_)); |
- device_settings_service_.PropertyChangeComplete(true); |
- FlushDeviceSettings(); |
- Mock::VerifyAndClearExpectations(&service_observer_); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ InstallDevicePolicy(); |
// Make sure the broker is accessible and policy got loaded. |
- broker = service_.GetBrokerForUser(public_session_user_id_); |
+ DeviceLocalAccountPolicyBroker* broker = |
+ service_->GetBrokerForUser(account_1_user_id_); |
ASSERT_TRUE(broker); |
- EXPECT_EQ(public_session_user_id_, broker->user_id()); |
- EXPECT_TRUE(broker->core()->store()->policy()); |
+ EXPECT_EQ(account_1_user_id_, broker->user_id()); |
+ ASSERT_TRUE(broker->core()->store()); |
+ EXPECT_EQ(CloudPolicyStore::STATUS_OK, broker->core()->store()->status()); |
+ ASSERT_TRUE(broker->core()->store()->policy()); |
+ EXPECT_EQ(device_local_account_policy_.policy_data().SerializeAsString(), |
+ broker->core()->store()->policy()->SerializeAsString()); |
+ EXPECT_TRUE(expected_policy_map_.Equals( |
+ broker->core()->store()->policy_map())); |
+ EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); |
} |
TEST_F(DeviceLocalAccountPolicyServiceTest, FetchPolicy) { |
- device_settings_test_helper_.set_device_local_account_policy_blob( |
- PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob()); |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
InstallDevicePolicy(); |
DeviceLocalAccountPolicyBroker* broker = |
- service_.GetBrokerForUser(public_session_user_id_); |
+ service_->GetBrokerForUser(account_1_user_id_); |
ASSERT_TRUE(broker); |
- service_.Connect(&mock_device_management_service_); |
+ service_->Connect(&mock_device_management_service_); |
EXPECT_TRUE(broker->core()->client()); |
em::DeviceManagementRequest request; |
@@ -325,7 +412,7 @@ TEST_F(DeviceLocalAccountPolicyServiceTest, FetchPolicy) { |
device_policy_.policy_data().device_id(), |
_)) |
.WillOnce(SaveArg<6>(&request)); |
- EXPECT_CALL(service_observer_, OnPolicyUpdated(public_session_user_id_)); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
broker->core()->client()->FetchPolicy(); |
FlushDeviceSettings(); |
Mock::VerifyAndClearExpectations(&service_observer_); |
@@ -335,7 +422,7 @@ TEST_F(DeviceLocalAccountPolicyServiceTest, FetchPolicy) { |
EXPECT_EQ(dm_protocol::kChromePublicAccountPolicyType, |
request.policy_request().request(0).policy_type()); |
EXPECT_FALSE(request.policy_request().request(0).has_machine_id()); |
- EXPECT_EQ(PolicyBuilder::kFakeUsername, |
+ EXPECT_EQ(kAccount1, |
request.policy_request().request(0).settings_entity_id()); |
ASSERT_TRUE(broker->core()->store()); |
@@ -346,26 +433,27 @@ TEST_F(DeviceLocalAccountPolicyServiceTest, FetchPolicy) { |
broker->core()->store()->policy()->SerializeAsString()); |
EXPECT_TRUE(expected_policy_map_.Equals( |
broker->core()->store()->policy_map())); |
- EXPECT_TRUE(service_.IsPolicyAvailableForUser(public_session_user_id_)); |
+ EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); |
- EXPECT_CALL(service_observer_, OnPolicyUpdated(public_session_user_id_)) |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)) |
.Times(0); |
- service_.Disconnect(); |
+ service_->Disconnect(); |
EXPECT_FALSE(broker->core()->client()); |
Mock::VerifyAndClearExpectations(&service_observer_); |
- EXPECT_TRUE(service_.IsPolicyAvailableForUser(public_session_user_id_)); |
+ EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); |
} |
TEST_F(DeviceLocalAccountPolicyServiceTest, RefreshPolicy) { |
- device_settings_test_helper_.set_device_local_account_policy_blob( |
- PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob()); |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
InstallDevicePolicy(); |
DeviceLocalAccountPolicyBroker* broker = |
- service_.GetBrokerForUser(public_session_user_id_); |
+ service_->GetBrokerForUser(account_1_user_id_); |
ASSERT_TRUE(broker); |
- service_.Connect(&mock_device_management_service_); |
+ service_->Connect(&mock_device_management_service_); |
ASSERT_TRUE(broker->core()->service()); |
em::DeviceManagementResponse response; |
@@ -375,7 +463,7 @@ TEST_F(DeviceLocalAccountPolicyServiceTest, RefreshPolicy) { |
.WillOnce(mock_device_management_service_.SucceedJob(response)); |
EXPECT_CALL(mock_device_management_service_, StartJob(_, _, _, _, _, _, _)); |
EXPECT_CALL(*this, OnRefreshDone(true)).Times(1); |
- EXPECT_CALL(service_observer_, OnPolicyUpdated(public_session_user_id_)); |
+ EXPECT_CALL(service_observer_, OnPolicyUpdated(account_1_user_id_)); |
broker->core()->service()->RefreshPolicy( |
base::Bind(&DeviceLocalAccountPolicyServiceTest::OnRefreshDone, |
base::Unretained(this))); |
@@ -389,90 +477,368 @@ TEST_F(DeviceLocalAccountPolicyServiceTest, RefreshPolicy) { |
broker->core()->store()->status()); |
EXPECT_TRUE(expected_policy_map_.Equals( |
broker->core()->store()->policy_map())); |
- EXPECT_TRUE(service_.IsPolicyAvailableForUser(public_session_user_id_)); |
+ EXPECT_TRUE(service_->IsPolicyAvailableForUser(account_1_user_id_)); |
+} |
+ |
+class DeviceLocalAccountPolicyExtensionCacheTest |
+ : public DeviceLocalAccountPolicyServiceTestBase { |
+ protected: |
+ DeviceLocalAccountPolicyExtensionCacheTest(); |
+ |
+ virtual void SetUp() OVERRIDE; |
+ |
+ base::FilePath GetCacheDirectoryForAccountID(const std::string& account_id); |
+ |
+ base::ScopedTempDir cache_root_dir_; |
+ scoped_ptr<base::ScopedPathOverride> cache_root_dir_override_; |
+ |
+ base::FilePath cache_dir_1_; |
+ base::FilePath cache_dir_2_; |
+ base::FilePath cache_dir_3_; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyExtensionCacheTest); |
+}; |
+ |
+DeviceLocalAccountPolicyExtensionCacheTest:: |
+ DeviceLocalAccountPolicyExtensionCacheTest() { |
+} |
+ |
+void DeviceLocalAccountPolicyExtensionCacheTest::SetUp() { |
+ DeviceLocalAccountPolicyServiceTestBase::SetUp(); |
+ ASSERT_TRUE(cache_root_dir_.CreateUniqueTempDir()); |
+ cache_root_dir_override_.reset(new base::ScopedPathOverride( |
+ chromeos::DIR_DEVICE_LOCAL_ACCOUNT_CACHE, |
+ cache_root_dir_.path())); |
+ |
+ cache_dir_1_ = GetCacheDirectoryForAccountID(kAccount1); |
+ cache_dir_2_ = GetCacheDirectoryForAccountID(kAccount2); |
+ cache_dir_3_ = GetCacheDirectoryForAccountID(kAccount3); |
+ |
+ em::StringList* forcelist = device_local_account_policy_.payload() |
+ .mutable_extensioninstallforcelist()->mutable_value(); |
+ forcelist->add_entries(base::StringPrintf("%s;%s", kExtensionID, kUpdateURL)); |
+} |
+ |
+base::FilePath DeviceLocalAccountPolicyExtensionCacheTest:: |
+ GetCacheDirectoryForAccountID(const std::string& account_id) { |
+ return cache_root_dir_.path().Append(base::HexEncode(account_id.c_str(), |
+ account_id.size())); |
+} |
+ |
+// Verifies that during startup, orphaned cache directories are deleted, |
+// cache directories belonging to an existing account are preserved and missing |
+// cache directories are created. Also verifies that when startup is complete, |
+// the caches for all existing accounts are running. |
+TEST_F(DeviceLocalAccountPolicyExtensionCacheTest, Startup) { |
+ base::FilePath test_data_dir; |
+ ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); |
+ const base::FilePath source_crx_file = |
+ test_data_dir.Append(kExtensionCRXPath); |
+ const std::string target_crx_file_name = |
+ base::StringPrintf("%s-%s.crx", kExtensionID, kExtensionVersion); |
+ |
+ // Create and pre-populate a cache directory for account 1. |
+ EXPECT_TRUE(file_util::CreateDirectory(cache_dir_1_)); |
+ EXPECT_TRUE(CopyFile(source_crx_file, |
+ cache_dir_1_.Append(target_crx_file_name))); |
+ |
+ // Create and pre-populate a cache directory for account 3. |
+ EXPECT_TRUE(file_util::CreateDirectory(cache_dir_3_)); |
+ EXPECT_TRUE(CopyFile(source_crx_file, |
+ cache_dir_3_.Append(target_crx_file_name))); |
+ |
+ // Add accounts 1 and 2 to device policy. |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ InstallDeviceLocalAccountPolicy(kAccount2); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount2); |
+ InstallDevicePolicy(); |
+ |
+ // Create the DeviceLocalAccountPolicyService, allowing it to finish the |
+ // deletion of orphaned cache directories. |
+ CreatePolicyService(); |
+ FlushDeviceSettings(); |
+ extension_cache_task_runner_->RunUntilIdle(); |
+ |
+ // Verify that the cache directory for account 1 and its contents still exist. |
+ EXPECT_TRUE(base::DirectoryExists(cache_dir_1_)); |
+ EXPECT_TRUE(ContentsEqual(source_crx_file, |
+ cache_dir_1_.Append(target_crx_file_name))); |
+ |
+ // Verify that a cache directory for account 2 was created. |
+ EXPECT_TRUE(base::DirectoryExists(cache_dir_2_)); |
+ |
+ // Verify that the cache directory for account 3 was deleted. |
+ EXPECT_FALSE(base::DirectoryExists(cache_dir_3_)); |
+ |
+ // Verify that the cache for account 1 has been started. |
+ DeviceLocalAccountPolicyBroker* broker = |
+ service_->GetBrokerForUser(account_1_user_id_); |
+ ASSERT_TRUE(broker); |
+ EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); |
+ |
+ // Verify that the cache for account 2 has been started. |
+ broker = service_->GetBrokerForUser(account_2_user_id_); |
+ ASSERT_TRUE(broker); |
+ EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); |
+} |
+ |
+// Verifies that while the deletion of orphaned cache directories is in |
+// progress, the caches for accounts which existed before the deletion started |
+// are running but caches for newly added accounts are not started. |
+TEST_F(DeviceLocalAccountPolicyExtensionCacheTest, RaceAgainstOrphanDeletion) { |
+ // Add account 1 to device policy. |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ InstallDevicePolicy(); |
+ |
+ // Create the DeviceLocalAccountPolicyService, triggering the deletion of |
+ // orphaned cache directories. |
+ CreatePolicyService(); |
+ FlushDeviceSettings(); |
+ |
+ // Verify that the cache for account 1 has been started as it is unaffected by |
+ // the orphan deletion. |
+ DeviceLocalAccountPolicyBroker* broker = |
+ service_->GetBrokerForUser(account_1_user_id_); |
+ ASSERT_TRUE(broker); |
+ EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); |
+ |
+ // Add account 2 to device policy. |
+ InstallDeviceLocalAccountPolicy(kAccount2); |
+ AddDeviceLocalAccountToPolicy(kAccount2); |
+ InstallDevicePolicy(); |
+ |
+ // Verify that the cache for account 2 has not been started yet as the orphan |
+ // deletion is still in progress. |
+ broker = service_->GetBrokerForUser(account_2_user_id_); |
+ ASSERT_TRUE(broker); |
+ EXPECT_FALSE(broker->extension_loader()->IsCacheRunning()); |
+ |
+ // Allow the orphan deletion to finish. |
+ extension_cache_task_runner_->RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // Verify that the cache for account 2 has been started. |
+ EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); |
+} |
+ |
+// Verifies that while the shutdown of a cache is in progress, no new cache is |
+// started if an account with the same ID is re-added. |
+TEST_F(DeviceLocalAccountPolicyExtensionCacheTest, RaceAgainstCacheShutdown) { |
+ // Add account 1 to device policy. |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ InstallDevicePolicy(); |
+ |
+ // Create the DeviceLocalAccountPolicyService, allowing it to finish the |
+ // deletion of orphaned cache directories. |
+ CreatePolicyService(); |
+ FlushDeviceSettings(); |
+ extension_cache_task_runner_->RunUntilIdle(); |
+ |
+ // Remove account 1 from device policy, triggering a shutdown of its cache. |
+ device_policy_.payload().mutable_device_local_accounts()->clear_account(); |
+ InstallDevicePolicy(); |
+ |
+ // Re-add account 1 to device policy. |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ InstallDevicePolicy(); |
+ |
+ // Verify that the cache for account 1 has not been started yet as the |
+ // shutdown of a previous cache for this account ID is still in progress. |
+ DeviceLocalAccountPolicyBroker* broker = |
+ service_->GetBrokerForUser(account_1_user_id_); |
+ ASSERT_TRUE(broker); |
+ EXPECT_FALSE(broker->extension_loader()->IsCacheRunning()); |
+ |
+ // Allow the cache shutdown to finish. |
+ extension_cache_task_runner_->RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // Verify that the cache directory for account 1 still exists. |
+ EXPECT_TRUE(base::DirectoryExists(cache_dir_1_)); |
+ |
+ // Verify that the cache for account 1 has been started, reusing the existing |
+ // cache directory. |
+ EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); |
+} |
+ |
+// Verifies that while the deletion of an obsolete cache directory is in |
+// progress, no new cache is started if an account with the same ID is re-added. |
+TEST_F(DeviceLocalAccountPolicyExtensionCacheTest, |
+ RaceAgainstObsoleteDeletion) { |
+ // Add account 1 to device policy. |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ InstallDevicePolicy(); |
+ |
+ // Create the DeviceLocalAccountPolicyService, allowing it to finish the |
+ // deletion of orphaned cache directories. |
+ CreatePolicyService(); |
+ FlushDeviceSettings(); |
+ extension_cache_task_runner_->RunUntilIdle(); |
+ |
+ // Remove account 1 from device policy, allowing the shutdown of its cache to |
+ // finish and the deletion of its now obsolete cache directory to begin. |
+ device_policy_.payload().mutable_device_local_accounts()->clear_account(); |
+ InstallDevicePolicy(); |
+ extension_cache_task_runner_->RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // Re-add account 1 to device policy. |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ InstallDevicePolicy(); |
+ |
+ // Verify that the cache for account 1 has not been started yet as the |
+ // deletion of the cache directory for this account ID is still in progress. |
+ DeviceLocalAccountPolicyBroker* broker = |
+ service_->GetBrokerForUser(account_1_user_id_); |
+ ASSERT_TRUE(broker); |
+ EXPECT_FALSE(broker->extension_loader()->IsCacheRunning()); |
+ |
+ // Allow the deletion to finish. |
+ extension_cache_task_runner_->RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // Verify that the cache directory for account 1 was deleted. |
+ EXPECT_FALSE(base::DirectoryExists(cache_dir_1_)); |
+ |
+ // Verify that the cache for account 1 has been started. |
+ EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); |
+} |
+ |
+// Verifies that when an account is added and no deletion of cache directories |
+// affecting this account is in progress, its cache is started immediately. |
+TEST_F(DeviceLocalAccountPolicyExtensionCacheTest, AddAccount) { |
+ // Create the DeviceLocalAccountPolicyService, allowing it to finish the |
+ // deletion of orphaned cache directories. |
+ InstallDevicePolicy(); |
+ CreatePolicyService(); |
+ FlushDeviceSettings(); |
+ extension_cache_task_runner_->RunUntilIdle(); |
+ |
+ // Add account 1 to device policy. |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ InstallDevicePolicy(); |
+ |
+ // Verify that the cache for account 1 has been started. |
+ DeviceLocalAccountPolicyBroker* broker = |
+ service_->GetBrokerForUser(account_1_user_id_); |
+ ASSERT_TRUE(broker); |
+ EXPECT_TRUE(broker->extension_loader()->IsCacheRunning()); |
+} |
+ |
+// Verifies that when an account is removed, its cache directory is deleted. |
+TEST_F(DeviceLocalAccountPolicyExtensionCacheTest, RemoveAccount) { |
+ // Add account 1 to device policy. |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ InstallDevicePolicy(); |
+ |
+ // Create the DeviceLocalAccountPolicyService, allowing it to finish the |
+ // deletion of orphaned cache directories. |
+ CreatePolicyService(); |
+ FlushDeviceSettings(); |
+ extension_cache_task_runner_->RunUntilIdle(); |
+ |
+ // Verify that a cache directory has been created for account 1. |
+ EXPECT_TRUE(base::DirectoryExists(cache_dir_1_)); |
+ |
+ // Remove account 1 from device policy, allowing the deletion of its now |
+ // obsolete cache directory to finish. |
+ device_policy_.payload().mutable_device_local_accounts()->clear_account(); |
+ InstallDevicePolicy(); |
+ extension_cache_task_runner_->RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
+ extension_cache_task_runner_->RunUntilIdle(); |
+ |
+ // Verify that the cache directory for account 1 was deleted. |
+ EXPECT_FALSE(base::DirectoryExists(cache_dir_1_)); |
} |
class DeviceLocalAccountPolicyProviderTest |
- : public DeviceLocalAccountPolicyServiceTest { |
+ : public DeviceLocalAccountPolicyServiceTestBase { |
protected: |
- DeviceLocalAccountPolicyProviderTest() |
- : provider_( |
- GenerateDeviceLocalAccountUserId( |
- PolicyBuilder::kFakeUsername, |
- DeviceLocalAccount::TYPE_PUBLIC_SESSION), |
- &service_) {} |
- |
- virtual void SetUp() OVERRIDE { |
- DeviceLocalAccountPolicyServiceTest::SetUp(); |
- provider_.Init(); |
- provider_.AddObserver(&provider_observer_); |
- |
- EXPECT_CALL(service_observer_, OnPolicyUpdated(_)).Times(AnyNumber()); |
- EXPECT_CALL(service_observer_, OnDeviceLocalAccountsChanged()) |
- .Times(AnyNumber()); |
- } |
- |
- virtual void TearDown() OVERRIDE { |
- provider_.RemoveObserver(&provider_observer_); |
- provider_.Shutdown(); |
- DeviceLocalAccountPolicyServiceTest::TearDown(); |
- } |
- |
- DeviceLocalAccountPolicyProvider provider_; |
+ DeviceLocalAccountPolicyProviderTest(); |
+ |
+ virtual void SetUp() OVERRIDE; |
+ virtual void TearDown() OVERRIDE; |
+ |
+ scoped_ptr<DeviceLocalAccountPolicyProvider> provider_; |
MockConfigurationPolicyObserver provider_observer_; |
private: |
DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyProviderTest); |
}; |
+DeviceLocalAccountPolicyProviderTest::DeviceLocalAccountPolicyProviderTest() { |
+ CreatePolicyService(); |
+ provider_.reset(new DeviceLocalAccountPolicyProvider( |
+ GenerateDeviceLocalAccountUserId(kAccount1, |
+ DeviceLocalAccount::TYPE_PUBLIC_SESSION), |
+ service_.get())); |
+} |
+ |
+void DeviceLocalAccountPolicyProviderTest::SetUp() { |
+ DeviceLocalAccountPolicyServiceTestBase::SetUp(); |
+ provider_->Init(); |
+ provider_->AddObserver(&provider_observer_); |
+} |
+ |
+void DeviceLocalAccountPolicyProviderTest::TearDown() { |
+ provider_->RemoveObserver(&provider_observer_); |
+ provider_->Shutdown(); |
+ DeviceLocalAccountPolicyServiceTestBase::TearDown(); |
+} |
+ |
TEST_F(DeviceLocalAccountPolicyProviderTest, Initialization) { |
- EXPECT_FALSE(provider_.IsInitializationComplete(POLICY_DOMAIN_CHROME)); |
+ EXPECT_FALSE(provider_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); |
// Policy change should complete initialization. |
- EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1)); |
- device_settings_test_helper_.set_device_local_account_policy_blob( |
- PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob()); |
- device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
- ReloadDeviceSettings(); |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) |
+ .Times(AtLeast(1)); |
+ InstallDevicePolicy(); |
Mock::VerifyAndClearExpectations(&provider_observer_); |
- EXPECT_TRUE(provider_.IsInitializationComplete(POLICY_DOMAIN_CHROME)); |
+ EXPECT_TRUE(provider_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); |
// The account disappearing should *not* flip the initialization flag back. |
- EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)) |
+ EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) |
.Times(AnyNumber()); |
device_policy_.payload().mutable_device_local_accounts()->clear_account(); |
- device_policy_.Build(); |
- device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
- ReloadDeviceSettings(); |
+ InstallDevicePolicy(); |
Mock::VerifyAndClearExpectations(&provider_observer_); |
- EXPECT_TRUE(provider_.IsInitializationComplete(POLICY_DOMAIN_CHROME)); |
+ EXPECT_TRUE(provider_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); |
} |
TEST_F(DeviceLocalAccountPolicyProviderTest, Policy) { |
// Policy should load successfully. |
- EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1)); |
- device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
- device_settings_test_helper_.set_device_local_account_policy_blob( |
- PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob()); |
- ReloadDeviceSettings(); |
+ EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) |
+ .Times(AtLeast(1)); |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ InstallDevicePolicy(); |
Mock::VerifyAndClearExpectations(&provider_observer_); |
PolicyBundle expected_policy_bundle; |
expected_policy_bundle.Get(PolicyNamespace( |
POLICY_DOMAIN_CHROME, std::string())).CopyFrom(expected_policy_map_); |
- EXPECT_TRUE(expected_policy_bundle.Equals(provider_.policies())); |
+ EXPECT_TRUE(expected_policy_bundle.Equals(provider_->policies())); |
// Policy change should be reported. |
- EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1)); |
+ EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) |
+ .Times(AtLeast(1)); |
device_local_account_policy_.payload().mutable_disablespdy()->set_value( |
false); |
- device_local_account_policy_.Build(); |
- device_settings_test_helper_.set_device_local_account_policy_blob( |
- PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob()); |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
DeviceLocalAccountPolicyBroker* broker = |
- service_.GetBrokerForUser(public_session_user_id_); |
+ service_->GetBrokerForUser(account_1_user_id_); |
ASSERT_TRUE(broker); |
broker->core()->store()->Load(); |
FlushDeviceSettings(); |
@@ -485,57 +851,55 @@ TEST_F(DeviceLocalAccountPolicyProviderTest, Policy) { |
POLICY_SCOPE_USER, |
Value::CreateBooleanValue(false), |
NULL); |
- EXPECT_TRUE(expected_policy_bundle.Equals(provider_.policies())); |
+ EXPECT_TRUE(expected_policy_bundle.Equals(provider_->policies())); |
// Any values set for the |ShelfAutoHideBehavior|, |ShowLogoutButtonInTray| |
// and |ExtensionAllowedTypes| policies should be overridden. |
- EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1)); |
+ EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) |
+ .Times(AtLeast(1)); |
device_local_account_policy_.payload().mutable_shelfautohidebehavior()-> |
set_value("Always"); |
device_local_account_policy_.payload().mutable_showlogoutbuttonintray()-> |
set_value(false); |
- device_local_account_policy_.Build(); |
- device_settings_test_helper_.set_device_local_account_policy_blob( |
- PolicyBuilder::kFakeUsername, device_local_account_policy_.GetBlob()); |
+ InstallDeviceLocalAccountPolicy(kAccount1); |
broker->core()->store()->Load(); |
FlushDeviceSettings(); |
Mock::VerifyAndClearExpectations(&provider_observer_); |
- EXPECT_TRUE(expected_policy_bundle.Equals(provider_.policies())); |
+ EXPECT_TRUE(expected_policy_bundle.Equals(provider_->policies())); |
// Account disappears, policy should stay in effect. |
- EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)) |
+ EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) |
.Times(AnyNumber()); |
device_policy_.payload().mutable_device_local_accounts()->clear_account(); |
- device_policy_.Build(); |
- device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
- ReloadDeviceSettings(); |
+ InstallDevicePolicy(); |
Mock::VerifyAndClearExpectations(&provider_observer_); |
- EXPECT_TRUE(expected_policy_bundle.Equals(provider_.policies())); |
+ EXPECT_TRUE(expected_policy_bundle.Equals(provider_->policies())); |
} |
TEST_F(DeviceLocalAccountPolicyProviderTest, RefreshPolicies) { |
// If there's no device policy, the refresh completes immediately. |
- EXPECT_FALSE(service_.GetBrokerForUser(public_session_user_id_)); |
- EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1)); |
- provider_.RefreshPolicies(); |
+ EXPECT_FALSE(service_->GetBrokerForUser(account_1_user_id_)); |
+ EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) |
+ .Times(AtLeast(1)); |
+ provider_->RefreshPolicies(); |
Mock::VerifyAndClearExpectations(&provider_observer_); |
// Make device settings appear. |
- EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)) |
+ EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) |
.Times(AnyNumber()); |
- device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); |
- ReloadDeviceSettings(); |
- Mock::VerifyAndClearExpectations(&provider_observer_); |
- EXPECT_TRUE(service_.GetBrokerForUser(public_session_user_id_)); |
+ AddDeviceLocalAccountToPolicy(kAccount1); |
+ InstallDevicePolicy(); |
+ EXPECT_TRUE(service_->GetBrokerForUser(account_1_user_id_)); |
// If there's no cloud connection, refreshes are still immediate. |
DeviceLocalAccountPolicyBroker* broker = |
- service_.GetBrokerForUser(public_session_user_id_); |
+ service_->GetBrokerForUser(account_1_user_id_); |
ASSERT_TRUE(broker); |
EXPECT_FALSE(broker->core()->client()); |
- EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1)); |
- provider_.RefreshPolicies(); |
+ EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) |
+ .Times(AtLeast(1)); |
+ provider_->RefreshPolicies(); |
Mock::VerifyAndClearExpectations(&provider_observer_); |
// Bring up the cloud connection. The refresh scheduler may fire refreshes at |
@@ -545,7 +909,7 @@ TEST_F(DeviceLocalAccountPolicyProviderTest, RefreshPolicies) { |
mock_device_management_service_.FailJob(DM_STATUS_REQUEST_FAILED)); |
EXPECT_CALL(mock_device_management_service_, StartJob(_, _, _, _, _, _, _)) |
.Times(AnyNumber()); |
- service_.Connect(&mock_device_management_service_); |
+ service_->Connect(&mock_device_management_service_); |
FlushDeviceSettings(); |
Mock::VerifyAndClearExpectations(&mock_device_management_service_); |
@@ -555,16 +919,18 @@ TEST_F(DeviceLocalAccountPolicyProviderTest, RefreshPolicies) { |
EXPECT_CALL(mock_device_management_service_, CreateJob(_)) |
.WillOnce(mock_device_management_service_.CreateAsyncJob(&request_job)); |
EXPECT_CALL(mock_device_management_service_, StartJob(_, _, _, _, _, _, _)); |
- provider_.RefreshPolicies(); |
+ provider_->RefreshPolicies(); |
ReloadDeviceSettings(); |
Mock::VerifyAndClearExpectations(&provider_observer_); |
Mock::VerifyAndClearExpectations(&mock_device_management_service_); |
- EXPECT_TRUE(provider_.IsInitializationComplete(POLICY_DOMAIN_CHROME)); |
+ EXPECT_TRUE(provider_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); |
// When the response comes in, it should propagate and fire the notification. |
- EXPECT_CALL(provider_observer_, OnUpdatePolicy(&provider_)).Times(AtLeast(1)); |
+ EXPECT_CALL(provider_observer_, OnUpdatePolicy(provider_.get())) |
+ .Times(AtLeast(1)); |
ASSERT_TRUE(request_job); |
em::DeviceManagementResponse response; |
+ device_local_account_policy_.Build(); |
response.mutable_policy_response()->add_response()->CopyFrom( |
device_local_account_policy_.policy()); |
request_job->SendResponse(DM_STATUS_SUCCESS, response); |