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