| // Copyright 2023 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <memory> |
| #include <utility> |
| |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| |
| #include "brillo/udev/mock_udev_device.h" |
| #include "brillo/udev/utils.h" |
| |
| namespace brillo { |
| |
| using ::testing::_; |
| using ::testing::DoAll; |
| using ::testing::NiceMock; |
| using ::testing::Return; |
| using ::testing::StrEq; |
| using ::testing::StrictMock; |
| |
| TEST(UtilsTest, SimpleDeviceRemovableTest) { |
| auto non_removable_device = std::make_unique<NiceMock<MockUdevDevice>>(); |
| EXPECT_CALL(*non_removable_device, GetSysAttributeValue(_)) |
| .WillOnce(DoAll(Return("0"))); |
| |
| // Non removable device returns false since it also has no removable |
| // parents. |
| EXPECT_FALSE(IsRemovable(*non_removable_device)); |
| auto removable_device = std::make_unique<StrictMock<MockUdevDevice>>(); |
| EXPECT_CALL(*removable_device, GetSysAttributeValue(StrEq("removable"))) |
| .WillOnce(Return("1")); |
| // Removable device returns success without needing to check parents. |
| EXPECT_TRUE(IsRemovable(*removable_device)); |
| } |
| |
| TEST(UtilsTest, ParentRemovableTest) { |
| auto non_removable_device = std::make_unique<StrictMock<MockUdevDevice>>(); |
| auto removable_device = std::make_unique<StrictMock<MockUdevDevice>>(); |
| EXPECT_CALL(*non_removable_device, GetSysAttributeValue(_)) |
| .WillOnce(Return("0")); |
| EXPECT_CALL(*removable_device, GetSysAttributeValue(_)).WillOnce(Return("1")); |
| EXPECT_CALL(*non_removable_device, GetParent()) |
| .WillOnce(Return(std::move(removable_device))); |
| |
| // Expect removable since the parent device is removable. |
| EXPECT_TRUE(IsRemovable(*non_removable_device)); |
| } |
| |
| } // namespace brillo |