// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_OWNER_MANAGER_UNITTEST_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_OWNER_MANAGER_UNITTEST_H_
#include "chrome/browser/chromeos/login/owner_manager.h"
#include <string>
#include <vector>
#include "base/file_path.h"
#include "base/file_util.h"
#include "base/logging.h"
#include "content/common/notification_observer.h"
#include "content/common/notification_registrar.h"
#include "content/common/notification_service.h"
#include "content/common/notification_type.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chromeos {
class MockKeyLoadObserver : public NotificationObserver {
public:
MockKeyLoadObserver()
: success_expected_(false),
quit_on_observe_(true),
observed_(false) {
registrar_.Add(
this,
NotificationType::OWNER_KEY_FETCH_ATTEMPT_FAILED,
NotificationService::AllSources());
registrar_.Add(
this,
NotificationType::OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED,
NotificationService::AllSources());
}
virtual ~MockKeyLoadObserver() {
EXPECT_TRUE(observed_);
}
// NotificationObserver implementation.
virtual void Observe(NotificationType type,
const NotificationSource& source,
const NotificationDetails& details) {
LOG(INFO) << "Observed key fetch event";
if (type == NotificationType::OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED) {
EXPECT_TRUE(success_expected_);
observed_ = true;
if (quit_on_observe_)
MessageLoop::current()->Quit();
} else if (type == NotificationType::OWNER_KEY_FETCH_ATTEMPT_FAILED) {
EXPECT_FALSE(success_expected_);
observed_ = true;
if (quit_on_observe_)
MessageLoop::current()->Quit();
}
}
void ExpectKeyFetchSuccess(bool should_succeed) {
success_expected_ = should_succeed;
}
void SetQuitOnKeyFetch(bool should_quit) { quit_on_observe_ = should_quit; }
private:
NotificationRegistrar registrar_;
bool success_expected_;
bool quit_on_observe_;
bool observed_;
DISALLOW_COPY_AND_ASSIGN(MockKeyLoadObserver);
};
class MockKeyUser : public OwnerManager::Delegate {
public:
explicit MockKeyUser(const OwnerManager::KeyOpCode expected)
: expected_(expected),
quit_on_callback_(true) {
}
MockKeyUser(const OwnerManager::KeyOpCode expected, bool quit_on_callback)
: expected_(expected),
quit_on_callback_(quit_on_callback) {
}
virtual ~MockKeyUser() {}
void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
const std::vector<uint8>& payload) {
EXPECT_EQ(expected_, return_code);
if (quit_on_callback_)
MessageLoop::current()->Quit();
}
const OwnerManager::KeyOpCode expected_;
const bool quit_on_callback_;
private:
DISALLOW_COPY_AND_ASSIGN(MockKeyUser);
};
class MockKeyUpdateUser : public OwnerManager::KeyUpdateDelegate {
public:
MockKeyUpdateUser() {}
virtual ~MockKeyUpdateUser() {}
virtual void OnKeyUpdated() {
MessageLoop::current()->Quit();
}
private:
DISALLOW_COPY_AND_ASSIGN(MockKeyUpdateUser);
};
class MockSigner : public OwnerManager::Delegate {
public:
MockSigner(const OwnerManager::KeyOpCode expected,
const std::vector<uint8>& sig)
: expected_code_(expected),
expected_sig_(sig) {
}
virtual ~MockSigner() {}
void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
const std::vector<uint8>& payload) {
EXPECT_EQ(expected_code_, return_code);
for (uint32 i = 0; i < payload.size(); ++i)
EXPECT_EQ(expected_sig_[i], payload[i]);
MessageLoop::current()->Quit();
}
const OwnerManager::KeyOpCode expected_code_;
const std::vector<uint8> expected_sig_;
private:
DISALLOW_COPY_AND_ASSIGN(MockSigner);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_OWNER_MANAGER_UNITTEST_H_