| Index: device_policy_unittest.cc
|
| diff --git a/device_policy_unittest.cc b/device_policy_unittest.cc
|
| index 9c195d60ac05fb5bbb07cd4124fdec47a570caed..dc391c4d6331d49210e7b6e6d50bf5e31dccbf21 100644
|
| --- a/device_policy_unittest.cc
|
| +++ b/device_policy_unittest.cc
|
| @@ -10,9 +10,17 @@
|
| #include <base/scoped_temp_dir.h>
|
| #include <gtest/gtest.h>
|
|
|
| +#include "login_manager/bindings/chrome_device_policy.pb.h"
|
| #include "login_manager/bindings/device_management_backend.pb.h"
|
| +#include "login_manager/mock_owner_key.h"
|
| +
|
| +namespace em = enterprise_management;
|
|
|
| namespace login_manager {
|
| +using google::protobuf::RepeatedPtrField;
|
| +using std::string;
|
| +using ::testing::Return;
|
| +using ::testing::_;
|
|
|
| class DevicePolicyTest : public ::testing::Test {
|
| public:
|
| @@ -49,10 +57,63 @@ class DevicePolicyTest : public ::testing::Test {
|
| std::string serialized;
|
| ASSERT_TRUE(policy_.SerializeToString(&serialized));
|
| std::string serialized_from;
|
| - ASSERT_TRUE(store->Get(&serialized_from));
|
| + ASSERT_TRUE(store->SerializeToString(&serialized_from));
|
| EXPECT_EQ(serialized, serialized_from);
|
| }
|
|
|
| + void ExtractPolicyValue(const DevicePolicy& pol,
|
| + em::ChromeDeviceSettingsProto* polval) {
|
| + em::PolicyData poldata;
|
| + ASSERT_TRUE(pol.Get().has_policy_data());
|
| + ASSERT_TRUE(poldata.ParseFromString(pol.Get().policy_data()));
|
| + ASSERT_TRUE(poldata.has_policy_type());
|
| + ASSERT_EQ(poldata.policy_type(), DevicePolicy::kDevicePolicyType);
|
| + ASSERT_TRUE(poldata.has_policy_value());
|
| + ASSERT_TRUE(polval->ParseFromString(poldata.policy_value()));
|
| + }
|
| +
|
| + int CountOwnerInWhitelist(const DevicePolicy& pol, const std::string& owner) {
|
| + em::ChromeDeviceSettingsProto polval;
|
| + ExtractPolicyValue(pol, &polval);
|
| + const em::UserWhitelistProto& whitelist_proto = polval.user_whitelist();
|
| + int whitelist_count = 0;
|
| + const RepeatedPtrField<std::string>& whitelist =
|
| + whitelist_proto.user_whitelist();
|
| + for (RepeatedPtrField<std::string>::const_iterator it = whitelist.begin();
|
| + it != whitelist.end();
|
| + ++it) {
|
| + whitelist_count += (owner == *it ? 1 : 0);
|
| + }
|
| + return whitelist_count;
|
| + }
|
| +
|
| + em::PolicyFetchResponse Wrap(const em::ChromeDeviceSettingsProto& polval) {
|
| + em::PolicyData new_poldata;
|
| + new_poldata.set_policy_type(DevicePolicy::kDevicePolicyType);
|
| + new_poldata.set_policy_value(polval.SerializeAsString());
|
| + em::PolicyFetchResponse new_policy;
|
| + new_policy.set_policy_data(new_poldata.SerializeAsString());
|
| + return new_policy;
|
| + }
|
| +
|
| + em::PolicyFetchResponse CreateWithOwner(const std::string& owner) {
|
| + em::ChromeDeviceSettingsProto new_polval;
|
| + new_polval.mutable_user_whitelist()->add_user_whitelist(owner);
|
| + return Wrap(new_polval);
|
| + }
|
| +
|
| + em::PolicyFetchResponse CreateWithWhitelist(
|
| + const std::vector<std::string>& users) {
|
| + em::ChromeDeviceSettingsProto polval;
|
| + em::UserWhitelistProto* whitelist_proto = polval.mutable_user_whitelist();
|
| + for(std::vector<std::string>::const_iterator it = users.begin();
|
| + it != users.end();
|
| + ++it) {
|
| + whitelist_proto->add_user_whitelist(*it);
|
| + }
|
| + return Wrap(polval);
|
| + }
|
| +
|
| static const char kDefaultPolicy[];
|
|
|
| ScopedTempDir tmpdir_;
|
| @@ -70,9 +131,9 @@ const char DevicePolicyTest::kDefaultPolicy[] = "the policy";
|
| TEST_F(DevicePolicyTest, CreateEmptyStore) {
|
| StartFresh();
|
| DevicePolicy store(tmpfile_);
|
| - ASSERT_TRUE(store.LoadOrCreate()); // Should create an empty DictionaryValue.
|
| + ASSERT_TRUE(store.LoadOrCreate()); // Should create an empty policy.
|
| std::string serialized;
|
| - EXPECT_TRUE(store.Get(&serialized));
|
| + EXPECT_TRUE(store.SerializeToString(&serialized));
|
| EXPECT_TRUE(serialized.empty());
|
| }
|
|
|
| @@ -95,7 +156,7 @@ TEST_F(DevicePolicyTest, VerifyPolicyUpdate) {
|
| store_->Set(new_policy);
|
|
|
| std::string new_out;
|
| - ASSERT_TRUE(store_->Get(&new_out));
|
| + ASSERT_TRUE(store_->SerializeToString(&new_out));
|
| std::string new_value;
|
| ASSERT_TRUE(new_policy.SerializeToString(&new_value));
|
| EXPECT_EQ(new_value, new_out);
|
| @@ -107,4 +168,50 @@ TEST_F(DevicePolicyTest, LoadStoreFromDisk) {
|
| CheckExpectedPolicy(&store2);
|
| }
|
|
|
| +TEST_F(DevicePolicyTest, FreshPolicy) {
|
| + StartFresh();
|
| + DevicePolicy pol(tmpfile_);
|
| + ASSERT_TRUE(pol.LoadOrCreate()); // Should create an empty policy.
|
| +
|
| + std::string current_user("me");
|
| + scoped_ptr<MockOwnerKey> key(new MockOwnerKey);
|
| + EXPECT_CALL(*key.get(), Sign(_, _, _))
|
| + .WillOnce(Return(true));
|
| + pol.StoreOwnerProperties(key.get(), current_user, NULL);
|
| +
|
| + ASSERT_EQ(CountOwnerInWhitelist(pol, current_user), 1);
|
| +}
|
| +
|
| +TEST_F(DevicePolicyTest, OwnerAlreadyInPolicy) {
|
| + StartFresh();
|
| + DevicePolicy pol(tmpfile_);
|
| + ASSERT_TRUE(pol.LoadOrCreate()); // Should create an empty policy.
|
| +
|
| + std::string current_user("me");
|
| + pol.Set(CreateWithOwner(current_user));
|
| +
|
| + scoped_ptr<MockOwnerKey> key(new MockOwnerKey);
|
| + pol.StoreOwnerProperties(key.get(), current_user, NULL);
|
| +
|
| + ASSERT_EQ(CountOwnerInWhitelist(pol, current_user), 1);
|
| +}
|
| +
|
| +TEST_F(DevicePolicyTest, ExistingPolicy) {
|
| + StartFresh();
|
| + DevicePolicy pol(tmpfile_);
|
| + ASSERT_TRUE(pol.LoadOrCreate()); // Should create an empty policy.
|
| +
|
| + std::string current_user("me");
|
| + const char* users[] = { "you", "him", "her" };
|
| + std::vector<std::string> default_whitelist(users, users + arraysize(users));
|
| + pol.Set(CreateWithWhitelist(default_whitelist));
|
| +
|
| + scoped_ptr<MockOwnerKey> key(new MockOwnerKey);
|
| + EXPECT_CALL(*key.get(), Sign(_, _, _))
|
| + .WillOnce(Return(true));
|
| + pol.StoreOwnerProperties(key.get(), current_user, NULL);
|
| +
|
| + ASSERT_EQ(CountOwnerInWhitelist(pol, current_user), 1);
|
| +}
|
| +
|
| } // namespace login_manager
|
|
|