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

Unified Diff: chromeos/tpm_token_info_getter_unittest.cc

Issue 738683002: Move chromeos/tpm_* to chromeos/tpm (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix the build Created 6 years 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
« no previous file with comments | « chromeos/tpm_token_info_getter.cc ('k') | chromeos/tpm_token_loader.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos/tpm_token_info_getter_unittest.cc
diff --git a/chromeos/tpm_token_info_getter_unittest.cc b/chromeos/tpm_token_info_getter_unittest.cc
deleted file mode 100644
index d474bb9a51443b9f6003165542c732f80b097a16..0000000000000000000000000000000000000000
--- a/chromeos/tpm_token_info_getter_unittest.cc
+++ /dev/null
@@ -1,525 +0,0 @@
-// Copyright 2014 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.
-
-#include <string>
-#include <vector>
-
-#include "base/bind.h"
-#include "base/location.h"
-#include "base/macros.h"
-#include "base/message_loop/message_loop.h"
-#include "base/run_loop.h"
-#include "base/single_thread_task_runner.h"
-#include "base/task_runner.h"
-#include "base/thread_task_runner_handle.h"
-#include "chromeos/dbus/fake_cryptohome_client.h"
-#include "chromeos/tpm_token_info_getter.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace {
-
-// The struct holding information returned by TPMTokenInfoGetter::Start
-// callback.
-struct TestTPMTokenInfo {
- TestTPMTokenInfo() : enabled(false), slot_id(-2) {}
-
- bool IsReady() const {
- return slot_id >= 0;
- }
-
- bool enabled;
- std::string name;
- std::string pin;
- int slot_id;
-};
-
-// Callback for TPMTokenInfoGetter::Start. It records the values returned
-// by TPMTokenInfoGetter to |info|.
-void RecordGetterResult(TestTPMTokenInfo* target,
- const chromeos::TPMTokenInfo& source) {
- target->enabled = source.tpm_is_enabled;
- target->name = source.token_name;
- target->pin = source.user_pin;
- target->slot_id = source.token_slot_id;
-}
-
-// Task runner for handling delayed tasks posted by TPMTokenInfoGetter when
-// retrying failed cryptohome method calls. It just records the requested
-// delay and immediately runs the task. The task is run asynchronously to be
-// closer to what's actually happening in production.
-// The delays used by TPMTokenGetter should be monotonically increasing, so
-// the fake task runner does not handle task reordering based on the delays.
-class FakeTaskRunner : public base::TaskRunner {
- public:
- // |delays|: Vector to which the dalays seen by the task runner are saved.
- explicit FakeTaskRunner(std::vector<int64>* delays) : delays_(delays) {}
-
- // base::TaskRunner overrides:
- bool PostDelayedTask(const tracked_objects::Location& from_here,
- const base::Closure& task,
- base::TimeDelta delay) override {
- delays_->push_back(delay.InMilliseconds());
- base::ThreadTaskRunnerHandle::Get()->PostTask(from_here, task);
- return true;
- }
- bool RunsTasksOnCurrentThread() const override { return true; }
-
- protected:
- ~FakeTaskRunner() override {}
-
- private:
- // The vector of delays.
- std::vector<int64>* delays_;
-
- DISALLOW_COPY_AND_ASSIGN(FakeTaskRunner);
-};
-
-// Implementation of CryptohomeClient used in these tests. Note that
-// TestCryptohomeClient implements FakeCryptohomeClient purely for convenience
-// of not having to implement whole CryptohomeClient interface.
-// TestCryptohomeClient overrides all CryptohomeClient methods used in
-// TPMTokenInfoGetter tests.
-class TestCryptohomeClient : public chromeos::FakeCryptohomeClient {
- public:
- // |user_id|: The user associated with the TPMTokenInfoGetter that will be
- // using the TestCryptohomeClient. Should be empty for system token.
- explicit TestCryptohomeClient(const std::string& user_id)
- : user_id_(user_id),
- tpm_is_enabled_(true),
- tpm_is_enabled_failure_count_(0),
- tpm_is_enabled_succeeded_(false),
- get_tpm_token_info_failure_count_(0),
- get_tpm_token_info_not_set_count_(0),
- get_tpm_token_info_succeeded_(false) {
- }
-
- ~TestCryptohomeClient() override {}
-
- void set_tpm_is_enabled(bool value) {
- tpm_is_enabled_ = value;
- }
-
- void set_tpm_is_enabled_failure_count(int value) {
- ASSERT_GT(value, 0);
- tpm_is_enabled_failure_count_ = value;
- }
-
- void set_get_tpm_token_info_failure_count(int value) {
- ASSERT_GT(value, 0);
- get_tpm_token_info_failure_count_ = value;
- }
-
- void set_get_tpm_token_info_not_set_count(int value) {
- ASSERT_GT(value, 0);
- get_tpm_token_info_not_set_count_ = value;
- }
-
- // Sets the tpm tpken info to be reported by the test CryptohomeClient.
- // If there is |Pkcs11GetTpmTokenInfo| in progress, runs the pending
- // callback with the set tpm token info.
- void SetTPMTokenInfo(const std::string& token_name,
- const std::string& pin,
- int slot_id) {
- tpm_token_info_.name = token_name;
- tpm_token_info_.pin = pin;
- tpm_token_info_.slot_id = slot_id;
-
- ASSERT_TRUE(tpm_token_info_.IsReady());
-
- InvokeGetTpmTokenInfoCallbackIfReady();
- }
-
- private:
- // FakeCryptohomeClient override.
- void TpmIsEnabled(const chromeos::BoolDBusMethodCallback& callback) override {
- ASSERT_FALSE(tpm_is_enabled_succeeded_);
- if (tpm_is_enabled_failure_count_ > 0) {
- --tpm_is_enabled_failure_count_;
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- base::Bind(callback, chromeos::DBUS_METHOD_CALL_FAILURE, false));
- } else {
- tpm_is_enabled_succeeded_ = true;
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- base::Bind(callback,
- chromeos::DBUS_METHOD_CALL_SUCCESS, tpm_is_enabled_));
- }
- }
-
- void Pkcs11GetTpmTokenInfo(
- const Pkcs11GetTpmTokenInfoCallback& callback) override {
- ASSERT_TRUE(user_id_.empty());
-
- HandleGetTpmTokenInfo(callback);
- }
-
- void Pkcs11GetTpmTokenInfoForUser(
- const std::string& user_id,
- const Pkcs11GetTpmTokenInfoCallback& callback) override {
- ASSERT_FALSE(user_id_.empty());
- ASSERT_EQ(user_id_, user_id);
-
- HandleGetTpmTokenInfo(callback);
- }
-
- // Handles Pkcs11GetTpmTokenInfo calls (both for system and user token). The
- // CryptohomeClient method overrides should make sure that |user_id_| is
- // properly set before calling this.
- void HandleGetTpmTokenInfo(const Pkcs11GetTpmTokenInfoCallback& callback) {
- ASSERT_TRUE(tpm_is_enabled_succeeded_);
- ASSERT_FALSE(get_tpm_token_info_succeeded_);
- ASSERT_TRUE(pending_get_tpm_token_info_callback_.is_null());
-
- if (get_tpm_token_info_failure_count_ > 0) {
- --get_tpm_token_info_failure_count_;
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- base::Bind(callback,
- chromeos::DBUS_METHOD_CALL_FAILURE,
- std::string() /* token name */,
- std::string() /* user pin */,
- -1 /* slot id */));
- return;
- }
-
- if (get_tpm_token_info_not_set_count_ > 0) {
- --get_tpm_token_info_not_set_count_;
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- base::Bind(callback,
- chromeos::DBUS_METHOD_CALL_SUCCESS,
- std::string() /* token name */,
- std::string() /* user pin */,
- -1 /* slot id */));
- return;
- }
-
- pending_get_tpm_token_info_callback_ = callback;
- InvokeGetTpmTokenInfoCallbackIfReady();
- }
-
- void InvokeGetTpmTokenInfoCallbackIfReady() {
- if (!tpm_token_info_.IsReady() ||
- pending_get_tpm_token_info_callback_.is_null())
- return;
-
- get_tpm_token_info_succeeded_ = true;
- // Called synchronously for convenience (to avoid using extra RunLoop in
- // tests). Unlike with other Cryptohome callbacks, TPMTokenInfoGetter does
- // not rely on this callback being called asynchronously.
- pending_get_tpm_token_info_callback_.Run(
- chromeos::DBUS_METHOD_CALL_SUCCESS,
- tpm_token_info_.name,
- tpm_token_info_.pin,
- tpm_token_info_.slot_id);
- }
-
- std::string user_id_;
- bool tpm_is_enabled_;
- int tpm_is_enabled_failure_count_;
- bool tpm_is_enabled_succeeded_;
- int get_tpm_token_info_failure_count_;
- int get_tpm_token_info_not_set_count_;
- bool get_tpm_token_info_succeeded_;
- Pkcs11GetTpmTokenInfoCallback pending_get_tpm_token_info_callback_;
- TestTPMTokenInfo tpm_token_info_;
-
- DISALLOW_COPY_AND_ASSIGN(TestCryptohomeClient);
-};
-
-class SystemTPMTokenInfoGetterTest : public testing::Test {
- public:
- SystemTPMTokenInfoGetterTest() {}
- ~SystemTPMTokenInfoGetterTest() override {}
-
- void SetUp() override {
- cryptohome_client_.reset(new TestCryptohomeClient(std::string()));
- tpm_token_info_getter_ =
- chromeos::TPMTokenInfoGetter::CreateForSystemToken(
- cryptohome_client_.get(),
- scoped_refptr<base::TaskRunner>(new FakeTaskRunner(&delays_)));
- }
-
- protected:
- scoped_ptr<TestCryptohomeClient> cryptohome_client_;
- scoped_ptr<chromeos::TPMTokenInfoGetter> tpm_token_info_getter_;
-
- std::vector<int64> delays_;
-
- private:
- base::MessageLoop message_loop_;
-
- DISALLOW_COPY_AND_ASSIGN(SystemTPMTokenInfoGetterTest);
-};
-
-class UserTPMTokenInfoGetterTest : public testing::Test {
- public:
- UserTPMTokenInfoGetterTest() : user_id_("user") {}
- ~UserTPMTokenInfoGetterTest() override {}
-
- void SetUp() override {
- cryptohome_client_.reset(new TestCryptohomeClient(user_id_));
- tpm_token_info_getter_ =
- chromeos::TPMTokenInfoGetter::CreateForUserToken(
- user_id_,
- cryptohome_client_.get(),
- scoped_refptr<base::TaskRunner>(new FakeTaskRunner(&delays_)));
- }
-
- protected:
- scoped_ptr<TestCryptohomeClient> cryptohome_client_;
- scoped_ptr<chromeos::TPMTokenInfoGetter> tpm_token_info_getter_;
-
- std::string user_id_;
- std::vector<int64> delays_;
-
- private:
- base::MessageLoop message_loop_;
-
- DISALLOW_COPY_AND_ASSIGN(UserTPMTokenInfoGetterTest);
-};
-
-TEST_F(SystemTPMTokenInfoGetterTest, BasicFlow) {
- TestTPMTokenInfo reported_info;
- tpm_token_info_getter_->Start(
- base::Bind(&RecordGetterResult, &reported_info));
- base::RunLoop().RunUntilIdle();
-
- EXPECT_FALSE(reported_info.IsReady());
- cryptohome_client_->SetTPMTokenInfo("TOKEN_1", "2222", 1);
-
- EXPECT_TRUE(reported_info.IsReady());
- EXPECT_TRUE(reported_info.enabled);
- EXPECT_EQ("TOKEN_1", reported_info.name);
- EXPECT_EQ("2222", reported_info.pin);
- EXPECT_EQ(1, reported_info.slot_id);
-
- EXPECT_EQ(std::vector<int64>(), delays_);
-}
-
-TEST_F(SystemTPMTokenInfoGetterTest, TokenSlotIdEqualsZero) {
- TestTPMTokenInfo reported_info;
- tpm_token_info_getter_->Start(
- base::Bind(&RecordGetterResult, &reported_info));
- base::RunLoop().RunUntilIdle();
-
- EXPECT_FALSE(reported_info.IsReady());
- cryptohome_client_->SetTPMTokenInfo("TOKEN_0", "2222", 0);
-
- EXPECT_TRUE(reported_info.IsReady());
- base::RunLoop().RunUntilIdle();
-
- EXPECT_TRUE(reported_info.enabled);
- EXPECT_EQ("TOKEN_0", reported_info.name);
- EXPECT_EQ("2222", reported_info.pin);
- EXPECT_EQ(0, reported_info.slot_id);
-
- EXPECT_EQ(std::vector<int64>(), delays_);
-}
-
-TEST_F(SystemTPMTokenInfoGetterTest, TPMNotEnabled) {
- cryptohome_client_->set_tpm_is_enabled(false);
-
- TestTPMTokenInfo reported_info;
- tpm_token_info_getter_->Start(
- base::Bind(&RecordGetterResult, &reported_info));
- base::RunLoop().RunUntilIdle();
-
- EXPECT_FALSE(reported_info.IsReady());
- EXPECT_FALSE(reported_info.enabled);
-
- EXPECT_EQ(std::vector<int64>(), delays_);
-}
-
-TEST_F(SystemTPMTokenInfoGetterTest, TpmEnabledCallFails) {
- cryptohome_client_->set_tpm_is_enabled_failure_count(1);
-
- TestTPMTokenInfo reported_info;
- tpm_token_info_getter_->Start(
- base::Bind(&RecordGetterResult, &reported_info));
- base::RunLoop().RunUntilIdle();
-
- EXPECT_FALSE(reported_info.IsReady());
- cryptohome_client_->SetTPMTokenInfo("TOKEN_1", "2222", 1);
-
- EXPECT_TRUE(reported_info.IsReady());
- EXPECT_TRUE(reported_info.enabled);
- EXPECT_EQ("TOKEN_1", reported_info.name);
- EXPECT_EQ("2222", reported_info.pin);
- EXPECT_EQ(1, reported_info.slot_id);
-
- const int64 kExpectedDelays[] = {100};
- EXPECT_EQ(std::vector<int64>(kExpectedDelays,
- kExpectedDelays + arraysize(kExpectedDelays)),
- delays_);
-}
-
-TEST_F(SystemTPMTokenInfoGetterTest, GetTpmTokenInfoInitiallyNotReady) {
- cryptohome_client_->set_get_tpm_token_info_not_set_count(1);
-
- TestTPMTokenInfo reported_info;
- tpm_token_info_getter_->Start(
- base::Bind(&RecordGetterResult, &reported_info));
- base::RunLoop().RunUntilIdle();
-
- EXPECT_FALSE(reported_info.IsReady());
- cryptohome_client_->SetTPMTokenInfo("TOKEN_1", "2222", 1);
-
- EXPECT_TRUE(reported_info.IsReady());
- EXPECT_TRUE(reported_info.enabled);
- EXPECT_EQ("TOKEN_1", reported_info.name);
- EXPECT_EQ("2222", reported_info.pin);
- EXPECT_EQ(1, reported_info.slot_id);
-
- const int64 kExpectedDelays[] = {100};
- EXPECT_EQ(std::vector<int64>(kExpectedDelays,
- kExpectedDelays + arraysize(kExpectedDelays)),
- delays_);
-}
-
-TEST_F(SystemTPMTokenInfoGetterTest, GetTpmTokenInfoInitiallyFails) {
- cryptohome_client_->set_get_tpm_token_info_failure_count(1);
-
- TestTPMTokenInfo reported_info;
- tpm_token_info_getter_->Start(
- base::Bind(&RecordGetterResult, &reported_info));
- base::RunLoop().RunUntilIdle();
-
- EXPECT_FALSE(reported_info.IsReady());
- cryptohome_client_->SetTPMTokenInfo("TOKEN_1", "2222", 1);
-
- EXPECT_TRUE(reported_info.IsReady());
- EXPECT_TRUE(reported_info.enabled);
- EXPECT_EQ("TOKEN_1", reported_info.name);
- EXPECT_EQ("2222", reported_info.pin);
- EXPECT_EQ(1, reported_info.slot_id);
-
- const int64 kExpectedDelays[] = {100};
- EXPECT_EQ(std::vector<int64>(kExpectedDelays,
- kExpectedDelays + arraysize(kExpectedDelays)),
- delays_);
-}
-
-TEST_F(SystemTPMTokenInfoGetterTest, RetryDelaysIncreaseExponentially) {
- cryptohome_client_->set_tpm_is_enabled_failure_count(2);
- cryptohome_client_->set_get_tpm_token_info_failure_count(1);
- cryptohome_client_->set_get_tpm_token_info_not_set_count(3);
-
- TestTPMTokenInfo reported_info;
- tpm_token_info_getter_->Start(
- base::Bind(&RecordGetterResult, &reported_info));
- base::RunLoop().RunUntilIdle();
-
- EXPECT_FALSE(reported_info.IsReady());
- cryptohome_client_->SetTPMTokenInfo("TOKEN_1", "2222", 2);
-
- EXPECT_TRUE(reported_info.IsReady());
- EXPECT_TRUE(reported_info.enabled);
- EXPECT_EQ("TOKEN_1", reported_info.name);
- EXPECT_EQ("2222", reported_info.pin);
- EXPECT_EQ(2, reported_info.slot_id);
-
- int64 kExpectedDelays[] = { 100, 200, 400, 800, 1600, 3200 };
- ASSERT_EQ(
- std::vector<int64>(kExpectedDelays,
- kExpectedDelays + arraysize(kExpectedDelays)),
- delays_);
-}
-
-TEST_F(SystemTPMTokenInfoGetterTest, RetryDelayBounded) {
- cryptohome_client_->set_tpm_is_enabled_failure_count(4);
- cryptohome_client_->set_get_tpm_token_info_failure_count(5);
- cryptohome_client_->set_get_tpm_token_info_not_set_count(6);
-
- TestTPMTokenInfo reported_info;
- tpm_token_info_getter_->Start(
- base::Bind(&RecordGetterResult, &reported_info));
- base::RunLoop().RunUntilIdle();
-
- EXPECT_FALSE(reported_info.IsReady());
- cryptohome_client_->SetTPMTokenInfo("TOKEN_1", "2222", 1);
-
- EXPECT_TRUE(reported_info.IsReady());
- EXPECT_TRUE(reported_info.enabled);
- EXPECT_EQ("TOKEN_1", reported_info.name);
- EXPECT_EQ("2222", reported_info.pin);
- EXPECT_EQ(1, reported_info.slot_id);
-
- int64 kExpectedDelays[] = {
- 100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600, 51200, 102400, 204800,
- 300000, 300000, 300000
- };
- ASSERT_EQ(
- std::vector<int64>(kExpectedDelays,
- kExpectedDelays + arraysize(kExpectedDelays)),
- delays_);
-}
-
-TEST_F(UserTPMTokenInfoGetterTest, BasicFlow) {
- TestTPMTokenInfo reported_info;
- tpm_token_info_getter_->Start(
- base::Bind(&RecordGetterResult, &reported_info));
- base::RunLoop().RunUntilIdle();
-
- EXPECT_FALSE(reported_info.IsReady());
- cryptohome_client_->SetTPMTokenInfo("TOKEN_1", "2222", 1);
-
- EXPECT_TRUE(reported_info.IsReady());
- EXPECT_TRUE(reported_info.enabled);
- EXPECT_EQ("TOKEN_1", reported_info.name);
- EXPECT_EQ("2222", reported_info.pin);
- EXPECT_EQ(1, reported_info.slot_id);
-
- EXPECT_EQ(std::vector<int64>(), delays_);
-}
-
-TEST_F(UserTPMTokenInfoGetterTest, GetTpmTokenInfoInitiallyFails) {
- cryptohome_client_->set_get_tpm_token_info_failure_count(1);
-
- TestTPMTokenInfo reported_info;
- tpm_token_info_getter_->Start(
- base::Bind(&RecordGetterResult, &reported_info));
- base::RunLoop().RunUntilIdle();
-
- EXPECT_FALSE(reported_info.IsReady());
- cryptohome_client_->SetTPMTokenInfo("TOKEN_1", "2222", 1);
-
- EXPECT_TRUE(reported_info.IsReady());
- EXPECT_TRUE(reported_info.enabled);
- EXPECT_EQ("TOKEN_1", reported_info.name);
- EXPECT_EQ("2222", reported_info.pin);
- EXPECT_EQ(1, reported_info.slot_id);
-
- const int64 kExpectedDelays[] = {100};
- EXPECT_EQ(std::vector<int64>(kExpectedDelays,
- kExpectedDelays + arraysize(kExpectedDelays)),
- delays_);
-}
-
-TEST_F(UserTPMTokenInfoGetterTest, GetTpmTokenInfoInitiallyNotReady) {
- cryptohome_client_->set_get_tpm_token_info_not_set_count(1);
-
- TestTPMTokenInfo reported_info;
- tpm_token_info_getter_->Start(
- base::Bind(&RecordGetterResult, &reported_info));
- base::RunLoop().RunUntilIdle();
-
- EXPECT_FALSE(reported_info.IsReady());
- cryptohome_client_->SetTPMTokenInfo("TOKEN_1", "2222", 1);
-
- EXPECT_TRUE(reported_info.IsReady());
- EXPECT_TRUE(reported_info.enabled);
- EXPECT_EQ("TOKEN_1", reported_info.name);
- EXPECT_EQ("2222", reported_info.pin);
- EXPECT_EQ(1, reported_info.slot_id);
-
- const int64 kExpectedDelays[] = {100};
- EXPECT_EQ(std::vector<int64>(kExpectedDelays,
- kExpectedDelays + arraysize(kExpectedDelays)),
- delays_);
-}
-
-} // namespace
-
« no previous file with comments | « chromeos/tpm_token_info_getter.cc ('k') | chromeos/tpm_token_loader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698