signed_settings_helper_unittest.cc revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
1// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/chromeos/login/signed_settings_helper.h" 6 7#include "chrome/browser/browser_thread.h" 8#include "chrome/browser/chromeos/cros/cros_library.h" 9#include "chrome/browser/chromeos/login/mock_ownership_service.h" 10#include "chrome/browser/chromeos/login/owner_manager.h" 11#include "chrome/browser/chromeos/login/signed_settings.h" 12#include "testing/gmock/include/gmock/gmock.h" 13#include "testing/gtest/include/gtest/gtest.h" 14 15using ::testing::_; 16using ::testing::InSequence; 17 18namespace chromeos { 19 20class MockSignedSettingsHelperCallback : public SignedSettingsHelper::Callback { 21 public: 22 MOCK_METHOD2(OnCheckWhitelistCompleted, void( 23 SignedSettings::ReturnCode code, const std::string& email)); 24 MOCK_METHOD2(OnWhitelistCompleted, void( 25 SignedSettings::ReturnCode code, const std::string& email)); 26 MOCK_METHOD2(OnUnwhitelistCompleted, void( 27 SignedSettings::ReturnCode code, const std::string& email)); 28 MOCK_METHOD3(OnStorePropertyCompleted, void( 29 SignedSettings::ReturnCode code, 30 const std::string& name, 31 const std::string& value)); 32 MOCK_METHOD3(OnRetrievePropertyCompleted, void( 33 SignedSettings::ReturnCode code, 34 const std::string& name, 35 const std::string& value)); 36}; 37 38class SignedSettingsHelperTest : public ::testing::Test, 39 public SignedSettingsHelper::TestDelegate { 40 public: 41 SignedSettingsHelperTest() 42 : fake_email_("fakey"), 43 fake_prop_("prop_name"), 44 fake_value_("stub"), 45 message_loop_(MessageLoop::TYPE_UI), 46 ui_thread_(BrowserThread::UI, &message_loop_), 47 file_thread_(BrowserThread::FILE), 48 pending_ops_(0) { 49 } 50 51 virtual void SetUp() { 52 file_thread_.Start(); 53 SignedSettingsHelper::Get()->set_test_delegate(this); 54 } 55 56 virtual void TearDown() { 57 SignedSettingsHelper::Get()->set_test_delegate(NULL); 58 } 59 60 virtual void OnOpCreated(SignedSettings* op) { 61 // Use MockOwnershipService for all SignedSettings op. 62 op->set_service(&m_); 63 } 64 65 virtual void OnOpStarted(SignedSettings* op) { 66 op->OnKeyOpComplete(OwnerManager::SUCCESS, std::vector<uint8>()); 67 } 68 69 virtual void OnOpCompleted(SignedSettings* op) { 70 --pending_ops_; 71 if (!pending_ops_) 72 MessageLoop::current()->Quit(); 73 } 74 75 const std::string fake_email_; 76 const std::string fake_prop_; 77 const std::string fake_value_; 78 MockOwnershipService m_; 79 80 MessageLoop message_loop_; 81 BrowserThread ui_thread_; 82 BrowserThread file_thread_; 83 84 int pending_ops_; 85 86 ScopedStubCrosEnabler stub_cros_enabler_; 87}; 88 89TEST_F(SignedSettingsHelperTest, SerializedOps) { 90 MockSignedSettingsHelperCallback cb; 91 92 EXPECT_CALL(m_, IsAlreadyOwned()).Times(2); 93 InSequence s; 94 EXPECT_CALL(m_, StartVerifyAttempt(_, _, _)).Times(1); 95 EXPECT_CALL(cb, OnCheckWhitelistCompleted(SignedSettings::SUCCESS, _)) 96 .Times(1); 97 EXPECT_CALL(m_, StartSigningAttempt(_, _)).Times(1); 98 EXPECT_CALL(cb, OnWhitelistCompleted(SignedSettings::SUCCESS, _)) 99 .Times(1); 100 EXPECT_CALL(m_, StartSigningAttempt(_, _)).Times(1); 101 EXPECT_CALL(cb, OnUnwhitelistCompleted(SignedSettings::SUCCESS, _)) 102 .Times(1); 103 EXPECT_CALL(m_, StartSigningAttempt(_, _)).Times(1); 104 EXPECT_CALL(cb, OnStorePropertyCompleted(SignedSettings::SUCCESS, _, _)) 105 .Times(1); 106 EXPECT_CALL(m_, StartVerifyAttempt(_, _, _)).Times(1); 107 EXPECT_CALL(cb, OnRetrievePropertyCompleted(SignedSettings::SUCCESS, _, _)) 108 .Times(1); 109 110 pending_ops_ = 5; 111 SignedSettingsHelper::Get()->StartCheckWhitelistOp(fake_email_, &cb); 112 SignedSettingsHelper::Get()->StartWhitelistOp(fake_email_, true, &cb); 113 SignedSettingsHelper::Get()->StartWhitelistOp(fake_email_, false, &cb); 114 SignedSettingsHelper::Get()->StartStorePropertyOp(fake_prop_, fake_value_, 115 &cb); 116 SignedSettingsHelper::Get()->StartRetrieveProperty(fake_prop_, &cb); 117 118 message_loop_.Run(); 119} 120 121TEST_F(SignedSettingsHelperTest, CanceledOps) { 122 MockSignedSettingsHelperCallback cb; 123 124 EXPECT_CALL(m_, IsAlreadyOwned()).Times(2); 125 InSequence s; 126 EXPECT_CALL(m_, StartVerifyAttempt(_, _, _)).Times(1); 127 EXPECT_CALL(cb, OnCheckWhitelistCompleted(SignedSettings::SUCCESS, _)) 128 .Times(1); 129 EXPECT_CALL(m_, StartSigningAttempt(_, _)).Times(1); 130 EXPECT_CALL(cb, OnWhitelistCompleted(SignedSettings::SUCCESS, _)) 131 .Times(1); 132 EXPECT_CALL(m_, StartSigningAttempt(_, _)).Times(1); 133 EXPECT_CALL(cb, OnUnwhitelistCompleted(SignedSettings::SUCCESS, _)) 134 .Times(1); 135 136 // CheckWhitelistOp for cb_to_be_canceled still gets executed but callback 137 // does not happen. 138 EXPECT_CALL(m_, StartVerifyAttempt(_, _, _)).Times(1); 139 140 EXPECT_CALL(m_, StartSigningAttempt(_, _)).Times(1); 141 EXPECT_CALL(cb, OnStorePropertyCompleted(SignedSettings::SUCCESS, _, _)) 142 .Times(1); 143 EXPECT_CALL(m_, StartVerifyAttempt(_, _, _)).Times(1); 144 EXPECT_CALL(cb, OnRetrievePropertyCompleted(SignedSettings::SUCCESS, _, _)) 145 .Times(1); 146 147 pending_ops_ = 6; 148 SignedSettingsHelper::Get()->StartCheckWhitelistOp(fake_email_, &cb); 149 SignedSettingsHelper::Get()->StartWhitelistOp(fake_email_, true, &cb); 150 SignedSettingsHelper::Get()->StartWhitelistOp(fake_email_, false, &cb); 151 152 MockSignedSettingsHelperCallback cb_to_be_canceled; 153 SignedSettingsHelper::Get()->StartCheckWhitelistOp(fake_email_, 154 &cb_to_be_canceled); 155 SignedSettingsHelper::Get()->CancelCallback(&cb_to_be_canceled); 156 157 SignedSettingsHelper::Get()->StartStorePropertyOp(fake_prop_, fake_value_, 158 &cb); 159 SignedSettingsHelper::Get()->StartRetrieveProperty(fake_prop_, &cb); 160 161 message_loop_.Run(); 162} 163 164} // namespace chromeos 165