Index: chrome/browser/chromeos/settings/device_settings_service_unittest.cc |
diff --git a/chrome/browser/chromeos/settings/device_settings_service_unittest.cc b/chrome/browser/chromeos/settings/device_settings_service_unittest.cc |
index 7accb8ec54e996d15195f9e14ee62b8b9cd96198..acdf6d10bf2d09a0218c416356d56721d8c463ae 100644 |
--- a/chrome/browser/chromeos/settings/device_settings_service_unittest.cc |
+++ b/chrome/browser/chromeos/settings/device_settings_service_unittest.cc |
@@ -39,16 +39,20 @@ class DeviceSettingsServiceTest : public DeviceSettingsTestBase { |
} |
void SetOwnershipStatus( |
- DeviceSettingsService::OwnershipStatus ownership_status, |
- bool is_owner) { |
- is_owner_ = is_owner; |
+ DeviceSettingsService::OwnershipStatus ownership_status) { |
ownership_status_ = ownership_status; |
} |
+ void OnIsOwner(bool is_owner) { |
+ is_owner_ = is_owner; |
+ is_owner_set_ = true; |
+ } |
+ |
protected: |
DeviceSettingsServiceTest() |
: operation_completed_(false), |
is_owner_(true), |
+ is_owner_set_(false), |
ownership_status_(DeviceSettingsService::OWNERSHIP_UNKNOWN) {} |
virtual void SetUp() OVERRIDE { |
@@ -68,6 +72,7 @@ class DeviceSettingsServiceTest : public DeviceSettingsTestBase { |
bool operation_completed_; |
bool is_owner_; |
+ bool is_owner_set_; |
DeviceSettingsService::OwnershipStatus ownership_status_; |
private: |
@@ -281,7 +286,6 @@ TEST_F(DeviceSettingsServiceTest, OwnershipStatus) { |
EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key()); |
EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE, |
device_settings_service_.GetOwnershipStatus()); |
- EXPECT_FALSE(is_owner_); |
EXPECT_EQ(DeviceSettingsService::OWNERSHIP_NONE, ownership_status_); |
owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey()); |
@@ -299,7 +303,6 @@ TEST_F(DeviceSettingsServiceTest, OwnershipStatus) { |
EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key()); |
EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, |
device_settings_service_.GetOwnershipStatus()); |
- EXPECT_FALSE(is_owner_); |
EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, ownership_status_); |
owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); |
@@ -316,10 +319,144 @@ TEST_F(DeviceSettingsServiceTest, OwnershipStatus) { |
EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key()); |
EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, |
device_settings_service_.GetOwnershipStatus()); |
- EXPECT_TRUE(is_owner_); |
EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, ownership_status_); |
} |
+TEST_F(DeviceSettingsServiceTest, OnCertificatesLoadedForNonOwner) { |
+ owner_key_util_->Clear(); |
+ |
+ EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); |
+ EXPECT_FALSE(device_settings_service_.GetOwnerKey().get()); |
+ EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN, |
+ device_settings_service_.GetOwnershipStatus()); |
+ |
+ device_settings_service_.IsCurrentUserOwnerAsync( |
+ base::Bind(&DeviceSettingsServiceTest::OnIsOwner, |
+ base::Unretained(this))); |
+ |
+ owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey()); |
+ ReloadDeviceSettings(); |
+ |
+ EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); |
+ ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); |
+ ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); |
+ std::vector<uint8> key; |
+ ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); |
+ EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); |
+ EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key()); |
+ EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, |
+ device_settings_service_.GetOwnershipStatus()); |
+ EXPECT_FALSE(is_owner_set_); |
+ |
+ // Simulate CertLoader reporting a new set of certificates. The passed |
+ // certificates are ignored. |
+ device_settings_service_.OnCertificatesLoaded(net::CertificateList(), true); |
+ FlushDeviceSettings(); |
+ |
+ EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); |
+ ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); |
+ ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); |
+ ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); |
+ EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); |
+ EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key()); |
+ EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, |
+ device_settings_service_.GetOwnershipStatus()); |
+ EXPECT_TRUE(is_owner_set_); |
+ EXPECT_FALSE(is_owner_); |
+} |
+ |
+TEST_F(DeviceSettingsServiceTest, OnCertificatesLoadedForOwner) { |
+ owner_key_util_->Clear(); |
+ |
+ EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); |
+ EXPECT_FALSE(device_settings_service_.GetOwnerKey().get()); |
+ EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN, |
+ device_settings_service_.GetOwnershipStatus()); |
+ |
+ device_settings_service_.IsCurrentUserOwnerAsync( |
+ base::Bind(&DeviceSettingsServiceTest::OnIsOwner, |
+ base::Unretained(this))); |
+ |
+ owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey()); |
+ ReloadDeviceSettings(); |
+ |
+ EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); |
+ ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); |
+ ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); |
+ std::vector<uint8> key; |
+ ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); |
+ EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); |
+ EXPECT_FALSE(device_settings_service_.GetOwnerKey()->private_key()); |
+ EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, |
+ device_settings_service_.GetOwnershipStatus()); |
+ EXPECT_FALSE(is_owner_set_); |
+ |
+ owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); |
+ device_settings_service_.SetUsername(device_policy_.policy_data().username()); |
+ // Simulate CertLoader reporting a new set of certificates. The passed |
+ // certificates are ignored. |
+ device_settings_service_.OnCertificatesLoaded(net::CertificateList(), true); |
+ FlushDeviceSettings(); |
+ |
+ EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey()); |
+ ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); |
+ ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); |
+ ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); |
+ EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); |
+ EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key()); |
+ EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, |
+ device_settings_service_.GetOwnershipStatus()); |
+ EXPECT_TRUE(is_owner_set_); |
+ EXPECT_TRUE(is_owner_); |
+} |
+ |
+TEST_F(DeviceSettingsServiceTest, IsCurrentUserOwnerAsyncWithLoadedCerts) { |
+ owner_key_util_->Clear(); |
+ |
+ EXPECT_FALSE(device_settings_service_.HasPrivateOwnerKey()); |
+ EXPECT_FALSE(device_settings_service_.GetOwnerKey().get()); |
+ EXPECT_EQ(DeviceSettingsService::OWNERSHIP_UNKNOWN, |
+ device_settings_service_.GetOwnershipStatus()); |
+ |
+ owner_key_util_->SetPublicKeyFromPrivateKey(*device_policy_.GetSigningKey()); |
+ owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey()); |
+ device_settings_service_.SetUsername(device_policy_.policy_data().username()); |
+ ReloadDeviceSettings(); |
+ |
+ // Simulate CertLoader reporting a new set of certificates. The passed |
+ // certificates are ignored. |
+ device_settings_service_.OnCertificatesLoaded(net::CertificateList(), true); |
+ FlushDeviceSettings(); |
+ |
+ EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey()); |
+ ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); |
+ ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); |
+ std::vector<uint8> key; |
+ ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); |
+ EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); |
+ EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key()); |
+ EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, |
+ device_settings_service_.GetOwnershipStatus()); |
+ EXPECT_FALSE(is_owner_set_); |
+ |
+ device_settings_service_.IsCurrentUserOwnerAsync( |
+ base::Bind(&DeviceSettingsServiceTest::OnIsOwner, |
+ base::Unretained(this))); |
+ // The callback should be called immediately. |
+ base::MessageLoop::current()->RunUntilIdle(); |
+ |
+ EXPECT_TRUE(device_settings_service_.HasPrivateOwnerKey()); |
+ ASSERT_TRUE(device_settings_service_.GetOwnerKey().get()); |
+ ASSERT_TRUE(device_settings_service_.GetOwnerKey()->public_key()); |
+ ASSERT_TRUE(device_policy_.GetSigningKey()->ExportPublicKey(&key)); |
+ EXPECT_EQ(*device_settings_service_.GetOwnerKey()->public_key(), key); |
+ EXPECT_TRUE(device_settings_service_.GetOwnerKey()->private_key()); |
+ EXPECT_EQ(DeviceSettingsService::OWNERSHIP_TAKEN, |
+ device_settings_service_.GetOwnershipStatus()); |
+ EXPECT_TRUE(is_owner_set_); |
+ EXPECT_TRUE(is_owner_); |
+} |
+ |
TEST_F(DeviceSettingsServiceTest, Observer) { |
owner_key_util_->Clear(); |
MockDeviceSettingsObserver observer_; |