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 |