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