| 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 "chrome/browser/policy/cloud/user_cloud_policy_store.h" | 5 #include "chrome/browser/policy/cloud/user_cloud_policy_store.h" |
| 6 | 6 |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/files/scoped_temp_dir.h" | 8 #include "base/files/scoped_temp_dir.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 TEST_F(UserCloudPolicyStoreTest, LoadWithNoFile) { | 108 TEST_F(UserCloudPolicyStoreTest, LoadWithNoFile) { |
| 109 EXPECT_FALSE(store_->policy()); | 109 EXPECT_FALSE(store_->policy()); |
| 110 EXPECT_TRUE(store_->policy_map().empty()); | 110 EXPECT_TRUE(store_->policy_map().empty()); |
| 111 | 111 |
| 112 EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); | 112 EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); |
| 113 store_->Load(); | 113 store_->Load(); |
| 114 RunUntilIdle(); | 114 RunUntilIdle(); |
| 115 | 115 |
| 116 EXPECT_FALSE(store_->policy()); | 116 EXPECT_FALSE(store_->policy()); |
| 117 EXPECT_TRUE(store_->policy_map().empty()); | 117 EXPECT_TRUE(store_->policy_map().empty()); |
| 118 EXPECT_FALSE(store_->policy_changed()); |
| 118 } | 119 } |
| 119 | 120 |
| 120 TEST_F(UserCloudPolicyStoreTest, LoadWithInvalidFile) { | 121 TEST_F(UserCloudPolicyStoreTest, LoadWithInvalidFile) { |
| 121 EXPECT_FALSE(store_->policy()); | 122 EXPECT_FALSE(store_->policy()); |
| 122 EXPECT_TRUE(store_->policy_map().empty()); | 123 EXPECT_TRUE(store_->policy_map().empty()); |
| 123 | 124 |
| 124 // Create a bogus file. | 125 // Create a bogus file. |
| 125 ASSERT_TRUE(file_util::CreateDirectory(policy_file().DirName())); | 126 ASSERT_TRUE(file_util::CreateDirectory(policy_file().DirName())); |
| 126 std::string bogus_data = "bogus_data"; | 127 std::string bogus_data = "bogus_data"; |
| 127 int size = bogus_data.size(); | 128 int size = bogus_data.size(); |
| 128 ASSERT_EQ(size, file_util::WriteFile(policy_file(), | 129 ASSERT_EQ(size, file_util::WriteFile(policy_file(), |
| 129 bogus_data.c_str(), | 130 bogus_data.c_str(), |
| 130 bogus_data.size())); | 131 bogus_data.size())); |
| 131 | 132 |
| 132 ExpectError(store_.get(), CloudPolicyStore::STATUS_LOAD_ERROR); | 133 ExpectError(store_.get(), CloudPolicyStore::STATUS_LOAD_ERROR); |
| 133 store_->Load(); | 134 store_->Load(); |
| 134 RunUntilIdle(); | 135 RunUntilIdle(); |
| 135 | 136 |
| 136 EXPECT_FALSE(store_->policy()); | 137 EXPECT_FALSE(store_->policy()); |
| 137 EXPECT_TRUE(store_->policy_map().empty()); | 138 EXPECT_TRUE(store_->policy_map().empty()); |
| 139 EXPECT_FALSE(store_->policy_changed()); |
| 138 } | 140 } |
| 139 | 141 |
| 140 TEST_F(UserCloudPolicyStoreTest, LoadImmediatelyWithNoFile) { | 142 TEST_F(UserCloudPolicyStoreTest, LoadImmediatelyWithNoFile) { |
| 141 EXPECT_FALSE(store_->policy()); | 143 EXPECT_FALSE(store_->policy()); |
| 142 EXPECT_TRUE(store_->policy_map().empty()); | 144 EXPECT_TRUE(store_->policy_map().empty()); |
| 143 | 145 |
| 144 EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); | 146 EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); |
| 145 store_->LoadImmediately(); // Should load without running the message loop. | 147 store_->LoadImmediately(); // Should load without running the message loop. |
| 146 | 148 |
| 147 EXPECT_FALSE(store_->policy()); | 149 EXPECT_FALSE(store_->policy()); |
| 148 EXPECT_TRUE(store_->policy_map().empty()); | 150 EXPECT_TRUE(store_->policy_map().empty()); |
| 151 EXPECT_FALSE(store_->policy_changed()); |
| 149 } | 152 } |
| 150 | 153 |
| 151 TEST_F(UserCloudPolicyStoreTest, LoadImmediatelyWithInvalidFile) { | 154 TEST_F(UserCloudPolicyStoreTest, LoadImmediatelyWithInvalidFile) { |
| 152 EXPECT_FALSE(store_->policy()); | 155 EXPECT_FALSE(store_->policy()); |
| 153 EXPECT_TRUE(store_->policy_map().empty()); | 156 EXPECT_TRUE(store_->policy_map().empty()); |
| 154 | 157 |
| 155 // Create a bogus file. | 158 // Create a bogus file. |
| 156 ASSERT_TRUE(file_util::CreateDirectory(policy_file().DirName())); | 159 ASSERT_TRUE(file_util::CreateDirectory(policy_file().DirName())); |
| 157 std::string bogus_data = "bogus_data"; | 160 std::string bogus_data = "bogus_data"; |
| 158 int size = bogus_data.size(); | 161 int size = bogus_data.size(); |
| 159 ASSERT_EQ(size, file_util::WriteFile(policy_file(), | 162 ASSERT_EQ(size, file_util::WriteFile(policy_file(), |
| 160 bogus_data.c_str(), | 163 bogus_data.c_str(), |
| 161 bogus_data.size())); | 164 bogus_data.size())); |
| 162 | 165 |
| 163 ExpectError(store_.get(), CloudPolicyStore::STATUS_LOAD_ERROR); | 166 ExpectError(store_.get(), CloudPolicyStore::STATUS_LOAD_ERROR); |
| 164 store_->LoadImmediately(); // Should load without running the message loop. | 167 store_->LoadImmediately(); // Should load without running the message loop. |
| 165 | 168 |
| 166 EXPECT_FALSE(store_->policy()); | 169 EXPECT_FALSE(store_->policy()); |
| 167 EXPECT_TRUE(store_->policy_map().empty()); | 170 EXPECT_TRUE(store_->policy_map().empty()); |
| 171 EXPECT_FALSE(store_->policy_changed()); |
| 168 } | 172 } |
| 169 | 173 |
| 170 TEST_F(UserCloudPolicyStoreTest, Store) { | 174 TEST_F(UserCloudPolicyStoreTest, Store) { |
| 171 EXPECT_FALSE(store_->policy()); | 175 EXPECT_FALSE(store_->policy()); |
| 172 EXPECT_TRUE(store_->policy_map().empty()); | 176 EXPECT_TRUE(store_->policy_map().empty()); |
| 173 | 177 |
| 174 // Store a simple policy and make sure it ends up as the currently active | 178 // Store a simple policy and make sure it ends up as the currently active |
| 175 // policy. | 179 // policy. |
| 176 EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); | 180 EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); |
| 177 store_->Store(policy_.policy()); | 181 store_->Store(policy_.policy()); |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 store2->AddObserver(&observer_); | 280 store2->AddObserver(&observer_); |
| 277 EXPECT_CALL(observer_, OnStoreLoaded(store2.get())); | 281 EXPECT_CALL(observer_, OnStoreLoaded(store2.get())); |
| 278 store2->LoadImmediately(); // Should load without running the message loop. | 282 store2->LoadImmediately(); // Should load without running the message loop. |
| 279 | 283 |
| 280 ASSERT_TRUE(store2->policy()); | 284 ASSERT_TRUE(store2->policy()); |
| 281 EXPECT_EQ(policy_.policy_data().SerializeAsString(), | 285 EXPECT_EQ(policy_.policy_data().SerializeAsString(), |
| 282 store2->policy()->SerializeAsString()); | 286 store2->policy()->SerializeAsString()); |
| 283 VerifyPolicyMap(store2.get()); | 287 VerifyPolicyMap(store2.get()); |
| 284 EXPECT_EQ(CloudPolicyStore::STATUS_OK, store2->status()); | 288 EXPECT_EQ(CloudPolicyStore::STATUS_OK, store2->status()); |
| 285 store2->RemoveObserver(&observer_); | 289 store2->RemoveObserver(&observer_); |
| 290 EXPECT_TRUE(store2->policy_changed()); |
| 286 } | 291 } |
| 287 | 292 |
| 288 TEST_F(UserCloudPolicyStoreTest, StoreValidationError) { | 293 TEST_F(UserCloudPolicyStoreTest, StoreValidationError) { |
| 289 // Create an invalid policy (no policy type). | 294 // Create an invalid policy (no policy type). |
| 290 policy_.policy_data().clear_policy_type(); | 295 policy_.policy_data().clear_policy_type(); |
| 291 policy_.Build(); | 296 policy_.Build(); |
| 292 | 297 |
| 293 // Store policy. | 298 // Store policy. |
| 294 ExpectError(store_.get(), CloudPolicyStore::STATUS_VALIDATION_ERROR); | 299 ExpectError(store_.get(), CloudPolicyStore::STATUS_VALIDATION_ERROR); |
| 295 store_->Store(policy_.policy()); | 300 store_->Store(policy_.policy()); |
| 296 RunUntilIdle(); | 301 RunUntilIdle(); |
| 297 ASSERT_FALSE(store_->policy()); | 302 ASSERT_FALSE(store_->policy()); |
| 303 EXPECT_FALSE(store_->policy_changed()); |
| 298 } | 304 } |
| 299 | 305 |
| 300 TEST_F(UserCloudPolicyStoreTest, LoadValidationError) { | 306 TEST_F(UserCloudPolicyStoreTest, LoadValidationError) { |
| 301 // Force a validation error by changing the username after policy is stored. | 307 // Force a validation error by changing the username after policy is stored. |
| 302 EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); | 308 EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); |
| 303 store_->Store(policy_.policy()); | 309 store_->Store(policy_.policy()); |
| 304 RunUntilIdle(); | 310 RunUntilIdle(); |
| 305 | 311 |
| 306 // Sign out, and sign back in as a different user, and try to load the profile | 312 // Sign out, and sign back in as a different user, and try to load the profile |
| 307 // data (should fail due to mismatched username). | 313 // data (should fail due to mismatched username). |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 new UserCloudPolicyStore(profile_.get(), policy_file())); | 347 new UserCloudPolicyStore(profile_.get(), policy_file())); |
| 342 store4->AddObserver(&observer_); | 348 store4->AddObserver(&observer_); |
| 343 ExpectError(store4.get(), CloudPolicyStore::STATUS_VALIDATION_ERROR); | 349 ExpectError(store4.get(), CloudPolicyStore::STATUS_VALIDATION_ERROR); |
| 344 store4->Load(); | 350 store4->Load(); |
| 345 RunUntilIdle(); | 351 RunUntilIdle(); |
| 346 | 352 |
| 347 ASSERT_FALSE(store4->policy()); | 353 ASSERT_FALSE(store4->policy()); |
| 348 store4->RemoveObserver(&observer_); | 354 store4->RemoveObserver(&observer_); |
| 349 } | 355 } |
| 350 | 356 |
| 357 TEST_F(UserCloudPolicyStoreTest, PolicyChanged) { |
| 358 EXPECT_CALL(observer_, OnStoreLoaded(store_.get())).Times(7); |
| 359 EXPECT_FALSE(store_->policy_changed()); |
| 360 |
| 361 // Clearing before storing should not result in a change. |
| 362 store_->Clear(); |
| 363 EXPECT_FALSE(store_->policy_changed()); |
| 364 |
| 365 // Storing an initial policy should result in a change. |
| 366 store_->Store(policy_.policy()); |
| 367 RunUntilIdle(); |
| 368 EXPECT_TRUE(store_->policy_changed()); |
| 369 |
| 370 // Storing the same policy should not result in a change. |
| 371 store_->Store(policy_.policy()); |
| 372 RunUntilIdle(); |
| 373 EXPECT_FALSE(store_->policy_changed()); |
| 374 |
| 375 // Storing a modified policy should result in a change. |
| 376 policy_.payload().mutable_urlblacklist()->mutable_value()->add_entries( |
| 377 "build.chromium.org"); |
| 378 policy_.Build(); |
| 379 store_->Store(policy_.policy()); |
| 380 RunUntilIdle(); |
| 381 EXPECT_TRUE(store_->policy_changed()); |
| 382 |
| 383 // Storing the same policy should not result in a change. |
| 384 store_->Store(policy_.policy()); |
| 385 RunUntilIdle(); |
| 386 EXPECT_FALSE(store_->policy_changed()); |
| 387 |
| 388 // Clearing the policy should result in a change. |
| 389 store_->Clear(); |
| 390 EXPECT_TRUE(store_->policy_changed()); |
| 391 |
| 392 // Clearing the policy again shouldn't result in a change. |
| 393 store_->Clear(); |
| 394 EXPECT_FALSE(store_->policy_changed()); |
| 395 } |
| 396 |
| 351 } // namespace | 397 } // namespace |
| 352 | 398 |
| 353 } // namespace policy | 399 } // namespace policy |
| OLD | NEW |