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