| // Copyright 2021 The Chromium OS 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 "libhwsec-foundation/da_reset/da_resetter.h" |
| |
| #include <memory> |
| |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| #include <tpm_manager-client-test/tpm_manager/dbus-proxy-mocks.h> |
| |
| namespace hwsec_foundation { |
| |
| using ::testing::_; |
| using ::testing::DoAll; |
| using ::testing::Return; |
| using ::testing::SetArgPointee; |
| using ::testing::StrictMock; |
| |
| class DAResetterTest : public ::testing::Test { |
| public: |
| DAResetterTest() { |
| auto mock_proxy = std::make_unique<org::chromium::TpmManagerProxyMock>(); |
| mock_proxy_ = mock_proxy.get(); |
| resetter_ = std::make_unique<DAResetter>( |
| std::unique_ptr<org::chromium::TpmManagerProxyInterface>( |
| mock_proxy.release())); |
| } |
| ~DAResetterTest() override = default; |
| |
| protected: |
| org::chromium::TpmManagerProxyMock* mock_proxy_ = nullptr; |
| std::unique_ptr<DAResetter> resetter_; |
| }; |
| |
| TEST_F(DAResetterTest, Success) { |
| tpm_manager::ResetDictionaryAttackLockReply reply; |
| reply.set_status(tpm_manager::STATUS_SUCCESS); |
| EXPECT_CALL(*mock_proxy_, ResetDictionaryAttackLock(_, _, _, _)) |
| .WillOnce(DoAll(SetArgPointee<1>(reply), Return(true))); |
| EXPECT_TRUE(resetter_->ResetDictionaryAttackLock()); |
| } |
| |
| TEST_F(DAResetterTest, Failure) { |
| tpm_manager::ResetDictionaryAttackLockReply reply; |
| reply.set_status(tpm_manager::STATUS_DEVICE_ERROR); |
| EXPECT_CALL(*mock_proxy_, ResetDictionaryAttackLock(_, _, _, _)) |
| .WillOnce(DoAll(SetArgPointee<1>(reply), Return(true))); |
| EXPECT_FALSE(resetter_->ResetDictionaryAttackLock()); |
| } |
| |
| TEST_F(DAResetterTest, DBusError) { |
| tpm_manager::ResetDictionaryAttackLockReply reply; |
| reply.set_status(tpm_manager::STATUS_DEVICE_ERROR); |
| auto fake_function = |
| [](const tpm_manager::ResetDictionaryAttackLockRequest& /*request*/, |
| tpm_manager::ResetDictionaryAttackLockReply* reply, |
| brillo::ErrorPtr* error, int /*timeout_ms*/) -> bool { |
| // We don't care about what are carried in the error. |
| *error = brillo::Error::Create({}, {}, {}, {}); |
| return false; |
| }; |
| EXPECT_CALL(*mock_proxy_, ResetDictionaryAttackLock(_, _, _, _)) |
| .WillOnce(fake_function); |
| EXPECT_FALSE(resetter_->ResetDictionaryAttackLock()); |
| } |
| |
| } // namespace hwsec_foundation |