Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Unified Diff: chrome/browser/chromeos/login/owner_manager_unittest.cc

Issue 3141031: [Chrome OS] Wire up ownership API from libcros (Closed)
Patch Set: address davemoore comments Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/login/owner_manager_unittest.cc
diff --git a/chrome/browser/chromeos/login/owner_manager_unittest.cc b/chrome/browser/chromeos/login/owner_manager_unittest.cc
index fd5d6dd2d4157923b61edddb6069b6ab851eeb44..287b75a6058027a06a63d477c0f39c8de9afa55f 100644
--- a/chrome/browser/chromeos/login/owner_manager_unittest.cc
+++ b/chrome/browser/chromeos/login/owner_manager_unittest.cc
@@ -2,28 +2,19 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "chrome/browser/chromeos/login/owner_manager_unittest.h"
#include "chrome/browser/chromeos/login/owner_manager.h"
-#include <cert.h>
-#include <keyhi.h>
-#include <keythi.h> // KeyType enum
-#include <pk11pub.h>
-#include <stdlib.h>
-
#include <string>
#include "base/crypto/rsa_private_key.h"
#include "base/file_path.h"
#include "base/file_util.h"
-#include "base/logging.h"
-#include "base/nss_util_internal.h"
#include "base/nss_util.h"
+#include "base/logging.h"
#include "base/scoped_temp_dir.h"
#include "chrome/browser/chrome_thread.h"
-#include "chrome/common/notification_observer.h"
-#include "chrome/common/notification_registrar.h"
-#include "chrome/common/notification_service.h"
-#include "chrome/common/notification_type.h"
+#include "chrome/browser/chromeos/login/mock_owner_key_utils.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -36,100 +27,14 @@ using ::testing::_;
namespace chromeos {
-namespace {
-
-class MockKeyUtils : public OwnerKeyUtils {
- public:
- MockKeyUtils() {}
- ~MockKeyUtils() {}
- MOCK_METHOD0(GenerateKeyPair, RSAPrivateKey*());
- MOCK_METHOD1(ExportPublicKeyViaDbus, bool(RSAPrivateKey* pair));
- MOCK_METHOD2(ExportPublicKeyToFile, bool(RSAPrivateKey* pair,
- const FilePath& key_file));
- MOCK_METHOD2(ImportPublicKey, bool(const FilePath& key_file,
- std::vector<uint8>* output));
- MOCK_METHOD1(FindPrivateKey, RSAPrivateKey*(const std::vector<uint8>& key));
- MOCK_METHOD0(GetOwnerKeyFilePath, FilePath());
- private:
- DISALLOW_COPY_AND_ASSIGN(MockKeyUtils);
-};
-
-class MockInjector : public OwnerKeyUtils::Factory {
- public:
- // Takes ownership of |mock|.
- explicit MockInjector(MockKeyUtils* mock) :
- transient_(mock),
- delete_transient_(true) {
- }
-
- virtual ~MockInjector() {
- if (delete_transient_)
- delete transient_;
- }
-
- // If this is called, its caller takes ownership of |transient_|.
- // If it's never called, |transient_| remains our problem.
- OwnerKeyUtils* CreateOwnerKeyUtils() {
- delete_transient_ = false;
- return transient_;
- }
-
- private:
- MockKeyUtils* transient_;
- bool delete_transient_;
- DISALLOW_COPY_AND_ASSIGN(MockInjector);
-};
-
-class KeyUser : public OwnerManager::Delegate {
- public:
- explicit KeyUser(const OwnerManager::KeyOpCode expected)
- : expected_(expected) {
- }
-
- virtual ~KeyUser() {}
-
- void OnKeyOpComplete(const OwnerManager::KeyOpCode return_code,
- const std::string& payload) {
- MessageLoop::current()->Quit();
- EXPECT_EQ(expected_, return_code);
- }
-
- const OwnerManager::KeyOpCode expected_;
- private:
- DISALLOW_COPY_AND_ASSIGN(KeyUser);
-};
-
-static bool Win(RSAPrivateKey* key) {
- MessageLoop::current()->Quit();
- return true;
-}
-
-static bool Fail(RSAPrivateKey* key) {
- MessageLoop::current()->Quit();
- return false;
-}
-
-} // anonymous namespace
-
-class OwnerManagerTest : public ::testing::Test,
- public NotificationObserver {
+class OwnerManagerTest : public ::testing::Test {
public:
OwnerManagerTest()
: message_loop_(MessageLoop::TYPE_UI),
ui_thread_(ChromeThread::UI, &message_loop_),
file_thread_(ChromeThread::FILE),
- success_expected_(false),
- quit_on_observe_(true),
mock_(new MockKeyUtils),
injector_(mock_) /* injector_ takes ownership of mock_ */ {
- registrar_.Add(
- this,
- NotificationType::OWNER_KEY_FETCH_ATTEMPT_FAILED,
- NotificationService::AllSources());
- registrar_.Add(
- this,
- NotificationType::OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED,
- NotificationService::AllSources());
}
virtual ~OwnerManagerTest() {}
@@ -159,27 +64,6 @@ class OwnerManagerTest : public ::testing::Test,
manager->private_key_.reset(fake_private_key_.release());
}
- // NotificationObserver implementation.
- virtual void Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- if (type == NotificationType::OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED) {
- EXPECT_TRUE(success_expected_);
- if (quit_on_observe_)
- MessageLoop::current()->Quit();
- } else if (type == NotificationType::OWNER_KEY_FETCH_ATTEMPT_FAILED) {
- EXPECT_FALSE(success_expected_);
- 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; }
-
ScopedTempDir tmpdir_;
FilePath tmpfile_;
@@ -190,40 +74,33 @@ class OwnerManagerTest : public ::testing::Test,
std::vector<uint8> fake_public_key_;
scoped_ptr<RSAPrivateKey> fake_private_key_;
- NotificationRegistrar registrar_;
- bool success_expected_;
- bool quit_on_observe_;
-
MockKeyUtils* mock_;
MockInjector injector_;
+
};
-TEST_F(OwnerManagerTest, LoadKeyUnowned) {
+TEST_F(OwnerManagerTest, LoadOwnerKeyFail) {
StartUnowned();
-
- EXPECT_CALL(*mock_, GetOwnerKeyFilePath())
- .WillRepeatedly(Return(tmpfile_));
-
+ MockKeyLoadObserver loader;
scoped_refptr<OwnerManager> manager(new OwnerManager);
- EXPECT_FALSE(manager->StartLoadOwnerKeyAttempt());
-}
-TEST_F(OwnerManagerTest, LoadOwnerKeyFail) {
EXPECT_CALL(*mock_, GetOwnerKeyFilePath())
.WillRepeatedly(Return(tmpfile_));
EXPECT_CALL(*mock_, ImportPublicKey(tmpfile_, _))
.WillOnce(Return(false))
.RetiresOnSaturation();
- scoped_refptr<OwnerManager> manager(new OwnerManager);
- EXPECT_TRUE(manager->StartLoadOwnerKeyAttempt());
-
- // Run remaining events, until ExportPublicKeyViaDbus().
+ ChromeThread::PostTask(
+ ChromeThread::FILE, FROM_HERE,
+ NewRunnableMethod(manager.get(),
+ &OwnerManager::LoadOwnerKey));
message_loop_.Run();
}
TEST_F(OwnerManagerTest, LoadOwnerKey) {
- ExpectKeyFetchSuccess(true);
+ MockKeyLoadObserver loader;
+ loader.ExpectKeyFetchSuccess(true);
+ scoped_refptr<OwnerManager> manager(new OwnerManager);
EXPECT_CALL(*mock_, GetOwnerKeyFilePath())
.WillRepeatedly(Return(tmpfile_));
@@ -232,23 +109,19 @@ TEST_F(OwnerManagerTest, LoadOwnerKey) {
Return(true)))
.RetiresOnSaturation();
- scoped_refptr<OwnerManager> manager(new OwnerManager);
- EXPECT_TRUE(manager->StartLoadOwnerKeyAttempt());
+ ChromeThread::PostTask(
+ ChromeThread::FILE, FROM_HERE,
+ NewRunnableMethod(manager.get(),
+ &OwnerManager::LoadOwnerKey));
- // Run remaining events, until ExportPublicKeyViaDbus().
message_loop_.Run();
}
-TEST_F(OwnerManagerTest, TakeOwnershipAlreadyOwned) {
- EXPECT_CALL(*mock_, GetOwnerKeyFilePath())
- .WillRepeatedly(Return(tmpfile_));
-
- scoped_refptr<OwnerManager> manager(new OwnerManager);
- EXPECT_FALSE(manager->StartTakeOwnershipAttempt());
-}
-
TEST_F(OwnerManagerTest, KeyGenerationFail) {
StartUnowned();
+ MockKeyLoadObserver loader;
+ loader.ExpectKeyFetchSuccess(false);
+ scoped_refptr<OwnerManager> manager(new OwnerManager);
EXPECT_CALL(*mock_, GenerateKeyPair())
.WillOnce(Return(reinterpret_cast<RSAPrivateKey*>(NULL)))
@@ -256,17 +129,23 @@ TEST_F(OwnerManagerTest, KeyGenerationFail) {
EXPECT_CALL(*mock_, GetOwnerKeyFilePath())
.WillRepeatedly(Return(tmpfile_));
- scoped_refptr<OwnerManager> manager(new OwnerManager);
- EXPECT_TRUE(manager->StartTakeOwnershipAttempt());
+ ChromeThread::PostTask(
+ ChromeThread::FILE, FROM_HERE,
+ NewRunnableMethod(manager.get(),
+ &OwnerManager::GenerateKeysAndExportPublic));
message_loop_.Run();
}
TEST_F(OwnerManagerTest, KeyExportFail) {
StartUnowned();
+ MockKeyLoadObserver loader;
+ loader.ExpectKeyFetchSuccess(false);
+ scoped_refptr<OwnerManager> manager(new OwnerManager);
- EXPECT_CALL(*mock_, ExportPublicKeyViaDbus(fake_private_key_.get()))
- .WillOnce(Invoke(Fail))
+ EXPECT_CALL(*mock_, ExportPublicKeyViaDbus(fake_private_key_.get(),
+ manager.get()))
+ .WillOnce(Invoke(MockKeyUtils::ExportPublicKeyViaDbusFail))
.RetiresOnSaturation();
EXPECT_CALL(*mock_, GenerateKeyPair())
.WillOnce(Return(fake_private_key_.release()))
@@ -274,18 +153,23 @@ TEST_F(OwnerManagerTest, KeyExportFail) {
EXPECT_CALL(*mock_, GetOwnerKeyFilePath())
.WillRepeatedly(Return(tmpfile_));
- scoped_refptr<OwnerManager> manager(new OwnerManager);
- EXPECT_TRUE(manager->StartTakeOwnershipAttempt());
+ ChromeThread::PostTask(
+ ChromeThread::FILE, FROM_HERE,
+ NewRunnableMethod(manager.get(),
+ &OwnerManager::GenerateKeysAndExportPublic));
message_loop_.Run();
}
TEST_F(OwnerManagerTest, TakeOwnership) {
StartUnowned();
- ExpectKeyFetchSuccess(true);
+ MockKeyLoadObserver loader;
+ loader.ExpectKeyFetchSuccess(true);
+ scoped_refptr<OwnerManager> manager(new OwnerManager);
- EXPECT_CALL(*mock_, ExportPublicKeyViaDbus(fake_private_key_.get()))
- .WillOnce(Invoke(Win))
+ EXPECT_CALL(*mock_, ExportPublicKeyViaDbus(fake_private_key_.get(),
+ manager.get()))
+ .WillOnce(Invoke(MockKeyUtils::ExportPublicKeyViaDbusWin))
.RetiresOnSaturation();
EXPECT_CALL(*mock_, GenerateKeyPair())
.WillOnce(Return(fake_private_key_.release()))
@@ -293,57 +177,64 @@ TEST_F(OwnerManagerTest, TakeOwnership) {
EXPECT_CALL(*mock_, GetOwnerKeyFilePath())
.WillRepeatedly(Return(tmpfile_));
- scoped_refptr<OwnerManager> manager(new OwnerManager);
- EXPECT_TRUE(manager->StartTakeOwnershipAttempt());
+ ChromeThread::PostTask(
+ ChromeThread::FILE, FROM_HERE,
+ NewRunnableMethod(manager.get(),
+ &OwnerManager::GenerateKeysAndExportPublic));
message_loop_.Run();
}
-TEST_F(OwnerManagerTest, NotYetOwnedVerify) {
+TEST_F(OwnerManagerTest, GetKeyFailDuringVerify) {
StartUnowned();
-
- // Since this shouldn't happen, don't want it to end the test if it does.
- SetQuitOnKeyFetch(false);
-
- EXPECT_CALL(*mock_, GetOwnerKeyFilePath())
- .WillRepeatedly(Return(tmpfile_));
-
+ MockKeyLoadObserver loader;
+ loader.ExpectKeyFetchSuccess(false);
scoped_refptr<OwnerManager> manager(new OwnerManager);
- KeyUser delegate(OwnerManager::KEY_UNAVAILABLE);
- EXPECT_FALSE(manager->StartVerifyAttempt("", "", &delegate));
-}
-TEST_F(OwnerManagerTest, AlreadyHaveKeysVerify) {
EXPECT_CALL(*mock_, GetOwnerKeyFilePath())
.WillRepeatedly(Return(tmpfile_));
+ EXPECT_CALL(*mock_, ImportPublicKey(tmpfile_, _))
+ .WillOnce(Return(false))
+ .RetiresOnSaturation();
- scoped_refptr<OwnerManager> manager(new OwnerManager);
- InjectKeys(manager.get());
- KeyUser delegate(OwnerManager::SUCCESS);
- EXPECT_TRUE(manager->StartVerifyAttempt("", "", &delegate));
+ MockKeyUser delegate(OwnerManager::KEY_UNAVAILABLE);
+ ChromeThread::PostTask(
+ ChromeThread::FILE, FROM_HERE,
+ NewRunnableMethod(manager.get(),
+ &OwnerManager::Verify,
+ ChromeThread::UI,
+ std::string(),
+ std::string(),
+ &delegate));
message_loop_.Run();
}
-TEST_F(OwnerManagerTest, GetKeyFailDuringVerify) {
- ExpectKeyFetchSuccess(false);
+TEST_F(OwnerManagerTest, AlreadyHaveKeysVerify) {
+ scoped_refptr<OwnerManager> manager(new OwnerManager);
EXPECT_CALL(*mock_, GetOwnerKeyFilePath())
.WillRepeatedly(Return(tmpfile_));
- EXPECT_CALL(*mock_, ImportPublicKey(tmpfile_, _))
- .WillOnce(Return(false))
- .RetiresOnSaturation();
-
- scoped_refptr<OwnerManager> manager(new OwnerManager);
- KeyUser delegate(OwnerManager::KEY_UNAVAILABLE);
- EXPECT_TRUE(manager->StartVerifyAttempt("", "", &delegate));
+ InjectKeys(manager.get());
+ MockKeyUser delegate(OwnerManager::SUCCESS);
+
+ ChromeThread::PostTask(
+ ChromeThread::FILE, FROM_HERE,
+ NewRunnableMethod(manager.get(),
+ &OwnerManager::Verify,
+ ChromeThread::UI,
+ std::string(),
+ std::string(),
+ &delegate));
message_loop_.Run();
}
TEST_F(OwnerManagerTest, GetKeyAndVerify) {
- ExpectKeyFetchSuccess(true);
- SetQuitOnKeyFetch(false);
+ MockKeyLoadObserver loader;
+ loader.ExpectKeyFetchSuccess(true);
+ loader.SetQuitOnKeyFetch(false);
+ scoped_refptr<OwnerManager> manager(new OwnerManager);
EXPECT_CALL(*mock_, GetOwnerKeyFilePath())
.WillRepeatedly(Return(tmpfile_));
@@ -352,10 +243,15 @@ TEST_F(OwnerManagerTest, GetKeyAndVerify) {
Return(true)))
.RetiresOnSaturation();
- scoped_refptr<OwnerManager> manager(new OwnerManager);
- KeyUser delegate(OwnerManager::SUCCESS);
- EXPECT_TRUE(manager->StartVerifyAttempt("", "", &delegate));
-
+ MockKeyUser delegate(OwnerManager::SUCCESS);
+ ChromeThread::PostTask(
+ ChromeThread::FILE, FROM_HERE,
+ NewRunnableMethod(manager.get(),
+ &OwnerManager::Verify,
+ ChromeThread::UI,
+ std::string(),
+ std::string(),
+ &delegate));
message_loop_.Run();
}
« no previous file with comments | « chrome/browser/chromeos/login/owner_manager_unittest.h ('k') | chrome/browser/chromeos/login/ownership_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698