• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_OWNER_MANAGER_UNITTEST_H_
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_OWNER_MANAGER_UNITTEST_H_
7 
8 #include "chrome/browser/chromeos/login/owner_manager.h"
9 
10 #include <string>
11 #include <vector>
12 
13 #include "base/file_path.h"
14 #include "base/file_util.h"
15 #include "base/logging.h"
16 #include "content/common/notification_observer.h"
17 #include "content/common/notification_registrar.h"
18 #include "content/common/notification_service.h"
19 #include "content/common/notification_type.h"
20 #include "testing/gmock/include/gmock/gmock.h"
21 #include "testing/gtest/include/gtest/gtest.h"
22 
23 
24 namespace chromeos {
25 class MockKeyLoadObserver : public NotificationObserver {
26  public:
MockKeyLoadObserver()27   MockKeyLoadObserver()
28       : success_expected_(false),
29         quit_on_observe_(true),
30         observed_(false) {
31     registrar_.Add(
32         this,
33         NotificationType::OWNER_KEY_FETCH_ATTEMPT_FAILED,
34         NotificationService::AllSources());
35     registrar_.Add(
36         this,
37         NotificationType::OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED,
38         NotificationService::AllSources());
39   }
40 
~MockKeyLoadObserver()41   virtual ~MockKeyLoadObserver() {
42     EXPECT_TRUE(observed_);
43   }
44 
45   // NotificationObserver implementation.
Observe(NotificationType type,const NotificationSource & source,const NotificationDetails & details)46   virtual void Observe(NotificationType type,
47                        const NotificationSource& source,
48                        const NotificationDetails& details) {
49     LOG(INFO) << "Observed key fetch event";
50     if (type == NotificationType::OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED) {
51       EXPECT_TRUE(success_expected_);
52       observed_ = true;
53       if (quit_on_observe_)
54         MessageLoop::current()->Quit();
55     } else if (type == NotificationType::OWNER_KEY_FETCH_ATTEMPT_FAILED) {
56       EXPECT_FALSE(success_expected_);
57       observed_ = true;
58       if (quit_on_observe_)
59         MessageLoop::current()->Quit();
60     }
61   }
62 
ExpectKeyFetchSuccess(bool should_succeed)63   void ExpectKeyFetchSuccess(bool should_succeed) {
64     success_expected_ = should_succeed;
65   }
66 
SetQuitOnKeyFetch(bool should_quit)67   void SetQuitOnKeyFetch(bool should_quit) { quit_on_observe_ = should_quit; }
68 
69  private:
70   NotificationRegistrar registrar_;
71   bool success_expected_;
72   bool quit_on_observe_;
73   bool observed_;
74   DISALLOW_COPY_AND_ASSIGN(MockKeyLoadObserver);
75 };
76 
77 class MockKeyUser : public OwnerManager::Delegate {
78  public:
MockKeyUser(const OwnerManager::KeyOpCode expected)79   explicit MockKeyUser(const OwnerManager::KeyOpCode expected)
80       : expected_(expected),
81         quit_on_callback_(true) {
82   }
MockKeyUser(const OwnerManager::KeyOpCode expected,bool quit_on_callback)83   MockKeyUser(const OwnerManager::KeyOpCode expected, bool quit_on_callback)
84       : expected_(expected),
85         quit_on_callback_(quit_on_callback) {
86   }
87 
~MockKeyUser()88   virtual ~MockKeyUser() {}
89 
OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,const std::vector<uint8> & payload)90   void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
91                        const std::vector<uint8>& payload) {
92     EXPECT_EQ(expected_, return_code);
93     if (quit_on_callback_)
94       MessageLoop::current()->Quit();
95   }
96 
97   const OwnerManager::KeyOpCode expected_;
98   const bool quit_on_callback_;
99  private:
100   DISALLOW_COPY_AND_ASSIGN(MockKeyUser);
101 };
102 
103 class MockKeyUpdateUser : public OwnerManager::KeyUpdateDelegate {
104  public:
MockKeyUpdateUser()105   MockKeyUpdateUser() {}
~MockKeyUpdateUser()106   virtual ~MockKeyUpdateUser() {}
107 
OnKeyUpdated()108   virtual void OnKeyUpdated() {
109     MessageLoop::current()->Quit();
110   }
111 
112  private:
113   DISALLOW_COPY_AND_ASSIGN(MockKeyUpdateUser);
114 };
115 
116 
117 class MockSigner : public OwnerManager::Delegate {
118  public:
MockSigner(const OwnerManager::KeyOpCode expected,const std::vector<uint8> & sig)119   MockSigner(const OwnerManager::KeyOpCode expected,
120              const std::vector<uint8>& sig)
121       : expected_code_(expected),
122         expected_sig_(sig) {
123   }
124 
~MockSigner()125   virtual ~MockSigner() {}
126 
OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,const std::vector<uint8> & payload)127   void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
128                        const std::vector<uint8>& payload) {
129     EXPECT_EQ(expected_code_, return_code);
130     for (uint32 i = 0; i < payload.size(); ++i)
131       EXPECT_EQ(expected_sig_[i], payload[i]);
132     MessageLoop::current()->Quit();
133   }
134 
135   const OwnerManager::KeyOpCode expected_code_;
136   const std::vector<uint8> expected_sig_;
137 
138  private:
139   DISALLOW_COPY_AND_ASSIGN(MockSigner);
140 };
141 
142 }  // namespace chromeos
143 
144 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_OWNER_MANAGER_UNITTEST_H_
145