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