Index: chrome/browser/chromeos/login/signed_settings_helper_unittest.cc |
diff --git a/chrome/browser/chromeos/login/signed_settings_helper_unittest.cc b/chrome/browser/chromeos/login/signed_settings_helper_unittest.cc |
index a808d770a30a967294ef057575050c6c0cc57ec1..5b04b55469952c886af7254b06e99279aceb5a97 100644 |
--- a/chrome/browser/chromeos/login/signed_settings_helper_unittest.cc |
+++ b/chrome/browser/chromeos/login/signed_settings_helper_unittest.cc |
@@ -4,9 +4,13 @@ |
#include "chrome/browser/chromeos/login/signed_settings_helper.h" |
+#include "base/bind.h" |
#include "chrome/browser/chromeos/cros/cros_library.h" |
#include "chrome/browser/chromeos/cros_settings_names.h" |
#include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" |
+#include "chrome/browser/chromeos/dbus/mock_dbus_thread_manager.h" |
+#include "chrome/browser/chromeos/dbus/mock_session_manager_client.h" |
+#include "chrome/browser/chromeos/login/mock_owner_key_utils.h" |
#include "chrome/browser/chromeos/login/mock_ownership_service.h" |
#include "chrome/browser/chromeos/login/owner_manager.h" |
#include "chrome/browser/chromeos/login/signed_settings.h" |
@@ -16,51 +20,53 @@ |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
-using content::BrowserThread; |
using ::testing::_; |
using ::testing::A; |
-using ::testing::AtLeast; |
using ::testing::InSequence; |
using ::testing::Invoke; |
-using ::testing::Return; |
-using ::testing::ReturnRef; |
-using ::testing::SaveArg; |
using ::testing::WithArg; |
namespace em = enterprise_management; |
namespace chromeos { |
-class MockSignedSettingsHelperCallback : public SignedSettingsHelper::Callback { |
- public: |
- virtual ~MockSignedSettingsHelperCallback() {} |
- |
- MOCK_METHOD3(OnStorePropertyCompleted, void( |
- SignedSettings::ReturnCode code, |
- const std::string& name, |
- const base::Value& value)); |
- MOCK_METHOD3(OnRetrievePropertyCompleted, void( |
- SignedSettings::ReturnCode code, |
- const std::string& name, |
- const base::Value* value)); |
-}; |
+ACTION_P(Retrieve, policy_blob) { arg0.Run(policy_blob); } |
+ACTION_P(Store, success) { arg1.Run(success); } |
class SignedSettingsHelperTest : public testing::Test, |
public SignedSettingsHelper::TestDelegate { |
public: |
SignedSettingsHelperTest() |
- : fake_email_("fakey@example.com"), |
- fake_prop_(kReleaseChannel), |
- fake_value_("false"), |
- message_loop_(MessageLoop::TYPE_UI), |
- ui_thread_(BrowserThread::UI, &message_loop_), |
- file_thread_(BrowserThread::FILE), |
- pending_ops_(0) { |
+ : message_loop_(MessageLoop::TYPE_UI), |
+ ui_thread_(content::BrowserThread::UI, &message_loop_), |
+ file_thread_(content::BrowserThread::FILE, &message_loop_), |
+ pending_ops_(0), |
+ mock_dbus_thread_manager_(new MockDBusThreadManager) { |
} |
virtual void SetUp() { |
- file_thread_.Start(); |
SignedSettingsHelper::Get()->set_test_delegate(this); |
- DBusThreadManager::Initialize(); |
+ DBusThreadManager::InitializeForTesting(mock_dbus_thread_manager_); |
+ |
+ fake_policy_data_ = BuildPolicyData(); |
+ std::string data_serialized = fake_policy_data_.SerializeAsString(); |
+ std::string serialized_policy_; |
+ fake_policy_ = BuildProto(data_serialized, |
+ std::string("false"), |
+ &serialized_policy_); |
+ |
+ MockSessionManagerClient* client = |
+ mock_dbus_thread_manager_->mock_session_manager_client(); |
+ EXPECT_CALL(*client, StorePolicy(_, _)) |
+ .WillRepeatedly(Store(true)); |
Mattias Nissler (ping if slow)
2011/12/02 12:13:37
Can this be inlined with something along the lines
pastarmovj
2011/12/02 14:43:38
Couldn't get this running with some gmock voodoo b
|
+ EXPECT_CALL(*client, RetrievePolicy(_)) |
+ .WillRepeatedly(Retrieve(serialized_policy_)); |
+ |
+ EXPECT_CALL(m_, StartSigningAttempt(_, A<OwnerManager::Delegate*>())) |
+ .WillRepeatedly(WithArg<1>( |
+ Invoke(&SignedSettingsHelperTest::OnKeyOpComplete))); |
+ EXPECT_CALL(m_, StartVerifyAttempt(_, _, A<OwnerManager::Delegate*>())) |
+ .WillRepeatedly(WithArg<2>( |
+ Invoke(&SignedSettingsHelperTest::OnKeyOpComplete))); |
} |
virtual void TearDown() { |
@@ -78,8 +84,6 @@ class SignedSettingsHelperTest : public testing::Test, |
virtual void OnOpCompleted(SignedSettings* op) { |
--pending_ops_; |
- if (!pending_ops_) |
- MessageLoop::current()->Quit(); |
} |
static void OnKeyOpComplete(OwnerManager::Delegate* op) { |
@@ -89,14 +93,26 @@ class SignedSettingsHelperTest : public testing::Test, |
em::PolicyData BuildPolicyData() { |
em::PolicyData to_return; |
em::ChromeDeviceSettingsProto pol; |
- to_return.set_policy_type(SignedSettings::kDevicePolicyType); |
+ to_return.set_policy_type(chromeos::kDevicePolicyType); |
to_return.set_policy_value(pol.SerializeAsString()); |
return to_return; |
} |
- const std::string fake_email_; |
- const std::string fake_prop_; |
- const base::StringValue fake_value_; |
+ em::PolicyFetchResponse BuildProto(const std::string& data, |
+ const std::string& sig, |
+ std::string* out_serialized) { |
+ em::PolicyFetchResponse fake_policy; |
+ if (!data.empty()) |
+ fake_policy.set_policy_data(data); |
+ if (!sig.empty()) |
+ fake_policy.set_policy_data_signature(sig); |
+ EXPECT_TRUE(fake_policy.SerializeToString(out_serialized)); |
+ return fake_policy; |
+ } |
+ |
+ em::PolicyData fake_policy_data_; |
+ em::PolicyFetchResponse fake_policy_; |
+ std::string serialized_policy_; |
MockOwnershipService m_; |
MessageLoop message_loop_; |
@@ -105,83 +121,86 @@ class SignedSettingsHelperTest : public testing::Test, |
int pending_ops_; |
+ MockDBusThreadManager* mock_dbus_thread_manager_; |
+ |
ScopedStubCrosEnabler stub_cros_enabler_; |
}; |
+class SignedSettingsCallbacks { |
+ public: |
+ virtual ~SignedSettingsCallbacks() {} |
+ // Callback of StorePolicyOp. |
+ virtual void OnStorePolicyCompleted(SignedSettings::ReturnCode code) = 0; |
+ // Callback of RetrievePolicyOp. |
+ virtual void OnRetrievePolicyCompleted( |
+ SignedSettings::ReturnCode code, |
+ const em::PolicyFetchResponse& policy) = 0; |
+}; |
+ |
+class MockSignedSettingsCallbacks |
+ : public SignedSettingsCallbacks, |
+ public base::SupportsWeakPtr<MockSignedSettingsCallbacks> { |
+public: |
+ virtual ~MockSignedSettingsCallbacks() {} |
+ |
+ MOCK_METHOD1(OnStorePolicyCompleted, void(SignedSettings::ReturnCode)); |
+ MOCK_METHOD2(OnRetrievePolicyCompleted, void(SignedSettings::ReturnCode, |
+ const em::PolicyFetchResponse&)); |
+}; |
+ |
TEST_F(SignedSettingsHelperTest, SerializedOps) { |
- MockSignedSettingsHelperCallback cb; |
- |
- EXPECT_CALL(m_, GetStatus(_)) |
- .Times(2) |
- .WillRepeatedly(Return(OwnershipService::OWNERSHIP_TAKEN)); |
- EXPECT_CALL(m_, has_cached_policy()) |
- .Times(2) |
- .WillRepeatedly(Return(true)); |
- em::PolicyData fake_pol = BuildPolicyData(); |
- EXPECT_CALL(m_, cached_policy()) |
- .Times(2) |
- .WillRepeatedly(ReturnRef(fake_pol)); |
- EXPECT_CALL(m_, set_cached_policy(A<const em::PolicyData&>())) |
- .Times(1) |
- .WillRepeatedly(SaveArg<0>(&fake_pol)); |
+ MockSignedSettingsCallbacks cb; |
InSequence s; |
- EXPECT_CALL(m_, StartSigningAttempt(_, A<OwnerManager::Delegate*>())) |
- .WillOnce(WithArg<1>(Invoke(&SignedSettingsHelperTest::OnKeyOpComplete))); |
- EXPECT_CALL(cb, OnStorePropertyCompleted(SignedSettings::SUCCESS, _, _)) |
+ EXPECT_CALL(cb, OnStorePolicyCompleted(SignedSettings::SUCCESS)) |
.Times(1); |
- |
- EXPECT_CALL(cb, OnRetrievePropertyCompleted(SignedSettings::SUCCESS, _, _)) |
+ EXPECT_CALL(cb, OnRetrievePolicyCompleted(SignedSettings::SUCCESS, _)) |
.Times(1); |
pending_ops_ = 2; |
- SignedSettingsHelper::Get()->StartStorePropertyOp(fake_prop_, fake_value_, |
- &cb); |
- SignedSettingsHelper::Get()->StartRetrieveProperty(fake_prop_, &cb); |
- |
- message_loop_.Run(); |
+ SignedSettingsHelper::Get()->StartStorePolicyOp( |
+ fake_policy_, |
+ base::Bind(&MockSignedSettingsCallbacks::OnStorePolicyCompleted, |
+ base::Unretained(&cb))); |
+ SignedSettingsHelper::Get()->StartRetrievePolicyOp( |
+ base::Bind(&MockSignedSettingsCallbacks::OnRetrievePolicyCompleted, |
+ base::Unretained(&cb))); |
+ |
+ message_loop_.RunAllPending(); |
+ ASSERT_EQ(0, pending_ops_); |
} |
TEST_F(SignedSettingsHelperTest, CanceledOps) { |
- MockSignedSettingsHelperCallback cb; |
- |
- EXPECT_CALL(m_, GetStatus(_)) |
- .Times(3) |
- .WillRepeatedly(Return(OwnershipService::OWNERSHIP_TAKEN)); |
- EXPECT_CALL(m_, has_cached_policy()) |
- .Times(3) |
- .WillRepeatedly(Return(true)); |
- em::PolicyData fake_pol = BuildPolicyData(); |
- EXPECT_CALL(m_, cached_policy()) |
- .Times(3) |
- .WillRepeatedly(ReturnRef(fake_pol)); |
- EXPECT_CALL(m_, set_cached_policy(A<const em::PolicyData&>())) |
- .Times(1) |
- .WillRepeatedly(SaveArg<0>(&fake_pol)); |
+ MockSignedSettingsCallbacks cb; |
InSequence s; |
- |
- // RetrievePropertyOp for cb_to_be_canceled still gets executed but callback |
- // does not happen. |
- EXPECT_CALL(m_, StartSigningAttempt(_, A<OwnerManager::Delegate*>())) |
- .WillOnce(WithArg<1>(Invoke(&SignedSettingsHelperTest::OnKeyOpComplete))); |
- EXPECT_CALL(cb, OnStorePropertyCompleted(SignedSettings::SUCCESS, _, _)) |
+ EXPECT_CALL(cb, OnStorePolicyCompleted(SignedSettings::SUCCESS)) |
.Times(1); |
- EXPECT_CALL(cb, OnRetrievePropertyCompleted(SignedSettings::SUCCESS, _, _)) |
+ EXPECT_CALL(cb, OnRetrievePolicyCompleted(SignedSettings::SUCCESS, _)) |
.Times(1); |
pending_ops_ = 3; |
- MockSignedSettingsHelperCallback cb_to_be_canceled; |
- SignedSettingsHelper::Get()->StartRetrieveProperty(fake_prop_, |
- &cb_to_be_canceled); |
- SignedSettingsHelper::Get()->CancelCallback(&cb_to_be_canceled); |
- SignedSettingsHelper::Get()->StartStorePropertyOp(fake_prop_, fake_value_, |
- &cb); |
- SignedSettingsHelper::Get()->StartRetrieveProperty(fake_prop_, &cb); |
- |
- message_loop_.Run(); |
+ { |
+ // This op will be deleted and never will be executed (expect only one call |
+ // to OnRetrievePolicyCompleted above). However the OpComplete callback will |
+ // be still called, therefore we expect three pending ops. |
+ MockSignedSettingsCallbacks cb_to_be_deleted; |
+ SignedSettingsHelper::Get()->StartRetrievePolicyOp( |
+ base::Bind(&MockSignedSettingsCallbacks::OnRetrievePolicyCompleted, |
+ cb_to_be_deleted.AsWeakPtr())); |
+ } |
+ SignedSettingsHelper::Get()->StartStorePolicyOp( |
+ fake_policy_, |
+ base::Bind(&MockSignedSettingsCallbacks::OnStorePolicyCompleted, |
+ base::Unretained(&cb))); |
+ SignedSettingsHelper::Get()->StartRetrievePolicyOp( |
+ base::Bind(&MockSignedSettingsCallbacks::OnRetrievePolicyCompleted, |
+ base::Unretained(&cb))); |
+ |
+ message_loop_.RunAllPending(); |
+ ASSERT_EQ(0, pending_ops_); |
} |
} // namespace chromeos |