diff --git a/external/aos_core_common_cpp b/external/aos_core_common_cpp index 24dc42f..c72bcca 160000 --- a/external/aos_core_common_cpp +++ b/external/aos_core_common_cpp @@ -1 +1 @@ -Subproject commit 24dc42f153256ff6b35db261ac3b18d950233134 +Subproject commit c72bcca606e8c4352cbd150600c07ecca62bad79 diff --git a/src/resourcemanager/resourcemanager.cpp b/src/resourcemanager/resourcemanager.cpp index f6f1c56..5858d82 100644 --- a/src/resourcemanager/resourcemanager.cpp +++ b/src/resourcemanager/resourcemanager.cpp @@ -25,10 +25,6 @@ namespace aos::sm::resourcemanager { Error HostDeviceManager::Init() { try { - for (const auto& entry : std::filesystem::directory_iterator(cDevicesDirectory)) { - mDevices.insert(entry.path().string()); - } - if (auto err = ParseGroups(); !err.IsNone()) { return AOS_ERROR_WRAP(err); } @@ -51,8 +47,10 @@ Error HostDeviceManager::CheckDevice(const String& device) const return AOS_ERROR_WRAP(ErrorEnum::eFailed); } - if (mDevices.find(devices[0].CStr()) == mDevices.end()) { - return AOS_ERROR_WRAP(ErrorEnum::eNotFound); + std::error_code ec; + + if (!std::filesystem::exists(devices[0].CStr(), ec) || ec.value() != 0) { + return AOS_ERROR_WRAP(Error(ErrorEnum::eNotFound, ec.message().c_str())); } return ErrorEnum::eNone; diff --git a/src/resourcemanager/resourcemanager.hpp b/src/resourcemanager/resourcemanager.hpp index 691c8b1..1af0fec 100644 --- a/src/resourcemanager/resourcemanager.hpp +++ b/src/resourcemanager/resourcemanager.hpp @@ -44,12 +44,10 @@ class HostDeviceManager : public sm::resourcemanager::HostDeviceManagerItf { Error CheckGroup(const String& group) const override; private: - static constexpr auto cDevicesDirectory = "/dev/"; - static constexpr auto cGroupsFile = "/etc/group"; + static constexpr auto cGroupsFile = "/etc/group"; Error ParseGroups(); - std::set mDevices; std::set mGroups; }; diff --git a/tests/resourcemanager/resourcemanager_test.cpp b/tests/resourcemanager/resourcemanager_test.cpp index 39ef982..d99f075 100644 --- a/tests/resourcemanager/resourcemanager_test.cpp +++ b/tests/resourcemanager/resourcemanager_test.cpp @@ -4,6 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include + #include #include @@ -17,7 +19,14 @@ namespace aos::sm::resourcemanager { class ResourcemanagerTest : public Test { public: - void SetUp() override { test::InitLog(); } + void SetUp() override + { + test::InitLog(); + + std::filesystem::create_directories("test/dev/dri/card0"); + } + + void TearDown() override { std::filesystem::remove_all("test"); } HostDeviceManager mHostDeviceManager; }; @@ -35,6 +44,9 @@ TEST_F(ResourcemanagerTest, CheckDevice) err = mHostDeviceManager.CheckDevice("/dev/null:/dev/test"); EXPECT_TRUE(err.IsNone()) << test::ErrorToStr(err); + + err = mHostDeviceManager.CheckDevice("test/dev/dri/card0:/dev/dri/card0"); + EXPECT_TRUE(err.IsNone()) << test::ErrorToStr(err); } TEST_F(ResourcemanagerTest, CheckDeviceReturnsNotFound)