| // Copyright 2022 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "rmad/udev/udev_device.h" |
| |
| #include <memory> |
| #include <utility> |
| |
| #include <brillo/udev/mock_udev_device.h> |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| |
| using testing::ByMove; |
| using testing::Return; |
| using testing::StrEq; |
| using testing::StrictMock; |
| |
| namespace rmad { |
| |
| class UdevDeviceTest : public testing::Test { |
| public: |
| UdevDeviceTest() = default; |
| ~UdevDeviceTest() override = default; |
| }; |
| |
| TEST_F(UdevDeviceTest, IsRemovable) { |
| auto dev = std::make_unique<StrictMock<brillo::MockUdevDevice>>(); |
| EXPECT_CALL(*dev, GetSysAttributeValue(StrEq("removable"))) |
| .WillOnce(Return("1")); |
| |
| auto udev_device = std::make_unique<UdevDeviceImpl>(std::move(dev)); |
| EXPECT_TRUE(udev_device->IsRemovable()); |
| } |
| |
| TEST_F(UdevDeviceTest, IsNotRemovable) { |
| auto dev = std::make_unique<StrictMock<brillo::MockUdevDevice>>(); |
| EXPECT_CALL(*dev, GetSysAttributeValue(StrEq("removable"))) |
| .WillOnce(Return("0")); |
| EXPECT_CALL(*dev, GetParent()).WillOnce(Return(ByMove(nullptr))); |
| |
| auto udev_device = std::make_unique<UdevDeviceImpl>(std::move(dev)); |
| EXPECT_FALSE(udev_device->IsRemovable()); |
| } |
| |
| TEST_F(UdevDeviceTest, IsRemovable_MultiLayer) { |
| auto parent_dev = std::make_unique<StrictMock<brillo::MockUdevDevice>>(); |
| EXPECT_CALL(*parent_dev, GetSysAttributeValue(StrEq("removable"))) |
| .WillOnce(Return("1")); |
| |
| auto dev = std::make_unique<StrictMock<brillo::MockUdevDevice>>(); |
| EXPECT_CALL(*dev, GetSysAttributeValue(StrEq("removable"))) |
| .WillOnce(Return("0")); |
| EXPECT_CALL(*dev, GetParent()) |
| .WillOnce(Return(ByMove(std::move(parent_dev)))); |
| |
| auto udev_device = std::make_unique<UdevDeviceImpl>(std::move(dev)); |
| EXPECT_TRUE(udev_device->IsRemovable()); |
| } |
| |
| TEST_F(UdevDeviceTest, GetSysPath) { |
| auto dev = std::make_unique<StrictMock<brillo::MockUdevDevice>>(); |
| EXPECT_CALL(*dev, GetSysPath()).WillOnce(Return("/sys/path")); |
| |
| auto udev_device = std::make_unique<UdevDeviceImpl>(std::move(dev)); |
| EXPECT_EQ("/sys/path", udev_device->GetSysPath()); |
| } |
| |
| TEST_F(UdevDeviceTest, GetDeviceNode) { |
| auto dev = std::make_unique<StrictMock<brillo::MockUdevDevice>>(); |
| EXPECT_CALL(*dev, GetDeviceNode()).WillOnce(Return("/dev/path")); |
| |
| auto udev_device = std::make_unique<UdevDeviceImpl>(std::move(dev)); |
| EXPECT_EQ("/dev/path", udev_device->GetDeviceNode()); |
| } |
| |
| } // namespace rmad |