| 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/chromeos/policy/user_cloud_policy_store_chromeos.h" |    5 #include "chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos.h" | 
|    6  |    6  | 
|    7 #include <vector> |    7 #include <vector> | 
|    8  |    8  | 
|    9 #include "base/basictypes.h" |    9 #include "base/basictypes.h" | 
|   10 #include "base/bind.h" |   10 #include "base/bind.h" | 
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  120     EXPECT_EQ(1U, store_->policy_map().size()); |  120     EXPECT_EQ(1U, store_->policy_map().size()); | 
|  121     const PolicyMap::Entry* entry = |  121     const PolicyMap::Entry* entry = | 
|  122         store_->policy_map().Get(key::kHomepageLocation); |  122         store_->policy_map().Get(key::kHomepageLocation); | 
|  123     ASSERT_TRUE(entry); |  123     ASSERT_TRUE(entry); | 
|  124     EXPECT_TRUE(base::StringValue(expected_value).Equals(entry->value)); |  124     EXPECT_TRUE(base::StringValue(expected_value).Equals(entry->value)); | 
|  125   } |  125   } | 
|  126  |  126  | 
|  127   void StoreUserPolicyKey(const std::vector<uint8>& public_key) { |  127   void StoreUserPolicyKey(const std::vector<uint8>& public_key) { | 
|  128     ASSERT_TRUE(base::CreateDirectory(user_policy_key_file().DirName())); |  128     ASSERT_TRUE(base::CreateDirectory(user_policy_key_file().DirName())); | 
|  129     ASSERT_TRUE( |  129     ASSERT_TRUE( | 
|  130         file_util::WriteFile(user_policy_key_file(), |  130         base::WriteFile(user_policy_key_file(), | 
|  131                              reinterpret_cast<const char*>(public_key.data()), |  131                         reinterpret_cast<const char*>(public_key.data()), | 
|  132                              public_key.size())); |  132                         public_key.size())); | 
|  133   } |  133   } | 
|  134  |  134  | 
|  135   // Stores the current |policy_| and verifies that it is published. |  135   // Stores the current |policy_| and verifies that it is published. | 
|  136   // If |new_public_key| is set then it will be persisted after storing but |  136   // If |new_public_key| is set then it will be persisted after storing but | 
|  137   // before loading the policy, so that the signature validation can succeed. |  137   // before loading the policy, so that the signature validation can succeed. | 
|  138   // If |previous_value| is set then a previously existing policy with that |  138   // If |previous_value| is set then a previously existing policy with that | 
|  139   // value will be expected; otherwise no previous policy is expected. |  139   // value will be expected; otherwise no previous policy is expected. | 
|  140   // If |new_value| is set then a new policy with that value is expected after |  140   // If |new_value| is set then a new policy with that value is expected after | 
|  141   // storing the |policy_| blob. |  141   // storing the |policy_| blob. | 
|  142   void PerformStorePolicy(const std::vector<uint8>* new_public_key, |  142   void PerformStorePolicy(const std::vector<uint8>* new_public_key, | 
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  393   VerifyStoreHasValidationError(); |  393   VerifyStoreHasValidationError(); | 
|  394 } |  394 } | 
|  395  |  395  | 
|  396 TEST_F(UserCloudPolicyStoreChromeOSTest, MigrationFull) { |  396 TEST_F(UserCloudPolicyStoreChromeOSTest, MigrationFull) { | 
|  397   std::string data; |  397   std::string data; | 
|  398  |  398  | 
|  399   em::DeviceCredentials credentials; |  399   em::DeviceCredentials credentials; | 
|  400   credentials.set_device_token(kLegacyToken); |  400   credentials.set_device_token(kLegacyToken); | 
|  401   credentials.set_device_id(kLegacyDeviceId); |  401   credentials.set_device_id(kLegacyDeviceId); | 
|  402   ASSERT_TRUE(credentials.SerializeToString(&data)); |  402   ASSERT_TRUE(credentials.SerializeToString(&data)); | 
|  403   ASSERT_NE(-1, file_util::WriteFile(token_file(), data.c_str(), data.size())); |  403   ASSERT_NE(-1, base::WriteFile(token_file(), data.c_str(), data.size())); | 
|  404  |  404  | 
|  405   em::CachedCloudPolicyResponse cached_policy; |  405   em::CachedCloudPolicyResponse cached_policy; | 
|  406   cached_policy.mutable_cloud_policy()->CopyFrom(policy_.policy()); |  406   cached_policy.mutable_cloud_policy()->CopyFrom(policy_.policy()); | 
|  407   ASSERT_TRUE(cached_policy.SerializeToString(&data)); |  407   ASSERT_TRUE(cached_policy.SerializeToString(&data)); | 
|  408   ASSERT_NE(-1, file_util::WriteFile(policy_file(), data.c_str(), data.size())); |  408   ASSERT_NE(-1, base::WriteFile(policy_file(), data.c_str(), data.size())); | 
|  409  |  409  | 
|  410   EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); |  410   EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); | 
|  411   ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad("")); |  411   ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad("")); | 
|  412   Mock::VerifyAndClearExpectations(&observer_); |  412   Mock::VerifyAndClearExpectations(&observer_); | 
|  413  |  413  | 
|  414   // Verify that legacy user policy and token have been loaded. |  414   // Verify that legacy user policy and token have been loaded. | 
|  415   em::PolicyData expected_policy_data; |  415   em::PolicyData expected_policy_data; | 
|  416   EXPECT_TRUE(expected_policy_data.ParseFromString( |  416   EXPECT_TRUE(expected_policy_data.ParseFromString( | 
|  417                   cached_policy.cloud_policy().policy_data())); |  417                   cached_policy.cloud_policy().policy_data())); | 
|  418   expected_policy_data.clear_public_key_version(); |  418   expected_policy_data.clear_public_key_version(); | 
|  419   expected_policy_data.set_request_token(kLegacyToken); |  419   expected_policy_data.set_request_token(kLegacyToken); | 
|  420   expected_policy_data.set_device_id(kLegacyDeviceId); |  420   expected_policy_data.set_device_id(kLegacyDeviceId); | 
|  421   ASSERT_TRUE(store_->policy()); |  421   ASSERT_TRUE(store_->policy()); | 
|  422   EXPECT_EQ(expected_policy_data.SerializeAsString(), |  422   EXPECT_EQ(expected_policy_data.SerializeAsString(), | 
|  423             store_->policy()->SerializeAsString()); |  423             store_->policy()->SerializeAsString()); | 
|  424   VerifyPolicyMap(kDefaultHomepage); |  424   VerifyPolicyMap(kDefaultHomepage); | 
|  425   EXPECT_EQ(CloudPolicyStore::STATUS_OK, store_->status()); |  425   EXPECT_EQ(CloudPolicyStore::STATUS_OK, store_->status()); | 
|  426 } |  426 } | 
|  427  |  427  | 
|  428 TEST_F(UserCloudPolicyStoreChromeOSTest, MigrationNoToken) { |  428 TEST_F(UserCloudPolicyStoreChromeOSTest, MigrationNoToken) { | 
|  429   std::string data; |  429   std::string data; | 
|  430   testing::Sequence seq; |  430   testing::Sequence seq; | 
|  431  |  431  | 
|  432   em::CachedCloudPolicyResponse cached_policy; |  432   em::CachedCloudPolicyResponse cached_policy; | 
|  433   cached_policy.mutable_cloud_policy()->CopyFrom(policy_.policy()); |  433   cached_policy.mutable_cloud_policy()->CopyFrom(policy_.policy()); | 
|  434   ASSERT_TRUE(cached_policy.SerializeToString(&data)); |  434   ASSERT_TRUE(cached_policy.SerializeToString(&data)); | 
|  435   ASSERT_NE(-1, file_util::WriteFile(policy_file(), data.c_str(), data.size())); |  435   ASSERT_NE(-1, base::WriteFile(policy_file(), data.c_str(), data.size())); | 
|  436  |  436  | 
|  437   EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); |  437   EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); | 
|  438   ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad("")); |  438   ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad("")); | 
|  439   Mock::VerifyAndClearExpectations(&observer_); |  439   Mock::VerifyAndClearExpectations(&observer_); | 
|  440  |  440  | 
|  441   // Verify the legacy cache has been loaded. |  441   // Verify the legacy cache has been loaded. | 
|  442   em::PolicyData expected_policy_data; |  442   em::PolicyData expected_policy_data; | 
|  443   EXPECT_TRUE(expected_policy_data.ParseFromString( |  443   EXPECT_TRUE(expected_policy_data.ParseFromString( | 
|  444                   cached_policy.cloud_policy().policy_data())); |  444                   cached_policy.cloud_policy().policy_data())); | 
|  445   expected_policy_data.clear_public_key_version(); |  445   expected_policy_data.clear_public_key_version(); | 
|  446   ASSERT_TRUE(store_->policy()); |  446   ASSERT_TRUE(store_->policy()); | 
|  447   EXPECT_EQ(expected_policy_data.SerializeAsString(), |  447   EXPECT_EQ(expected_policy_data.SerializeAsString(), | 
|  448             store_->policy()->SerializeAsString()); |  448             store_->policy()->SerializeAsString()); | 
|  449   VerifyPolicyMap(kDefaultHomepage); |  449   VerifyPolicyMap(kDefaultHomepage); | 
|  450   EXPECT_EQ(CloudPolicyStore::STATUS_OK, store_->status()); |  450   EXPECT_EQ(CloudPolicyStore::STATUS_OK, store_->status()); | 
|  451 } |  451 } | 
|  452  |  452  | 
|  453 TEST_F(UserCloudPolicyStoreChromeOSTest, MigrationNoPolicy) { |  453 TEST_F(UserCloudPolicyStoreChromeOSTest, MigrationNoPolicy) { | 
|  454   std::string data; |  454   std::string data; | 
|  455  |  455  | 
|  456   em::DeviceCredentials credentials; |  456   em::DeviceCredentials credentials; | 
|  457   credentials.set_device_token(kLegacyToken); |  457   credentials.set_device_token(kLegacyToken); | 
|  458   credentials.set_device_id(kLegacyDeviceId); |  458   credentials.set_device_id(kLegacyDeviceId); | 
|  459   ASSERT_TRUE(credentials.SerializeToString(&data)); |  459   ASSERT_TRUE(credentials.SerializeToString(&data)); | 
|  460   ASSERT_NE(-1, file_util::WriteFile(token_file(), data.c_str(), data.size())); |  460   ASSERT_NE(-1, base::WriteFile(token_file(), data.c_str(), data.size())); | 
|  461  |  461  | 
|  462   EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); |  462   EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); | 
|  463   ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad("")); |  463   ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad("")); | 
|  464   Mock::VerifyAndClearExpectations(&observer_); |  464   Mock::VerifyAndClearExpectations(&observer_); | 
|  465  |  465  | 
|  466   // Verify that legacy user policy and token have been loaded. |  466   // Verify that legacy user policy and token have been loaded. | 
|  467   em::PolicyData expected_policy_data; |  467   em::PolicyData expected_policy_data; | 
|  468   expected_policy_data.set_request_token(kLegacyToken); |  468   expected_policy_data.set_request_token(kLegacyToken); | 
|  469   expected_policy_data.set_device_id(kLegacyDeviceId); |  469   expected_policy_data.set_device_id(kLegacyDeviceId); | 
|  470   ASSERT_TRUE(store_->policy()); |  470   ASSERT_TRUE(store_->policy()); | 
|  471   EXPECT_EQ(expected_policy_data.SerializeAsString(), |  471   EXPECT_EQ(expected_policy_data.SerializeAsString(), | 
|  472             store_->policy()->SerializeAsString()); |  472             store_->policy()->SerializeAsString()); | 
|  473   EXPECT_TRUE(store_->policy_map().empty()); |  473   EXPECT_TRUE(store_->policy_map().empty()); | 
|  474   EXPECT_EQ(CloudPolicyStore::STATUS_OK, store_->status()); |  474   EXPECT_EQ(CloudPolicyStore::STATUS_OK, store_->status()); | 
|  475 } |  475 } | 
|  476  |  476  | 
|  477 TEST_F(UserCloudPolicyStoreChromeOSTest, MigrationAndStoreNew) { |  477 TEST_F(UserCloudPolicyStoreChromeOSTest, MigrationAndStoreNew) { | 
|  478   // Start without an existing public key. |  478   // Start without an existing public key. | 
|  479   ASSERT_TRUE(base::DeleteFile(user_policy_key_file(), false)); |  479   ASSERT_TRUE(base::DeleteFile(user_policy_key_file(), false)); | 
|  480  |  480  | 
|  481   std::string data; |  481   std::string data; | 
|  482   em::CachedCloudPolicyResponse cached_policy; |  482   em::CachedCloudPolicyResponse cached_policy; | 
|  483   cached_policy.mutable_cloud_policy()->CopyFrom(policy_.policy()); |  483   cached_policy.mutable_cloud_policy()->CopyFrom(policy_.policy()); | 
|  484   ASSERT_TRUE(cached_policy.SerializeToString(&data)); |  484   ASSERT_TRUE(cached_policy.SerializeToString(&data)); | 
|  485   ASSERT_NE(-1, file_util::WriteFile(policy_file(), data.c_str(), data.size())); |  485   ASSERT_NE(-1, base::WriteFile(policy_file(), data.c_str(), data.size())); | 
|  486  |  486  | 
|  487   EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); |  487   EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); | 
|  488   ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad("")); |  488   ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad("")); | 
|  489   Mock::VerifyAndClearExpectations(&observer_); |  489   Mock::VerifyAndClearExpectations(&observer_); | 
|  490  |  490  | 
|  491   // Verify the legacy cache has been loaded. |  491   // Verify the legacy cache has been loaded. | 
|  492   em::PolicyData expected_policy_data; |  492   em::PolicyData expected_policy_data; | 
|  493   EXPECT_TRUE(expected_policy_data.ParseFromString( |  493   EXPECT_TRUE(expected_policy_data.ParseFromString( | 
|  494                   cached_policy.cloud_policy().policy_data())); |  494                   cached_policy.cloud_policy().policy_data())); | 
|  495   expected_policy_data.clear_public_key_version(); |  495   expected_policy_data.clear_public_key_version(); | 
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  609   Mock::VerifyAndClearExpectations(&cryptohome_client_); |  609   Mock::VerifyAndClearExpectations(&cryptohome_client_); | 
|  610  |  610  | 
|  611   EXPECT_FALSE(store_->policy()); |  611   EXPECT_FALSE(store_->policy()); | 
|  612   EXPECT_TRUE(store_->policy_map().empty()); |  612   EXPECT_TRUE(store_->policy_map().empty()); | 
|  613   EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status()); |  613   EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status()); | 
|  614 } |  614 } | 
|  615  |  615  | 
|  616 }  // namespace |  616 }  // namespace | 
|  617  |  617  | 
|  618 }  // namespace policy |  618 }  // namespace policy | 
| OLD | NEW |