From bf60a4c89130c5344b705367d7ab824a414a8521 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 23 Jul 2026 09:24:41 +0200 Subject: kapi: add device registry tests --- kernel/kapi/devices.tests.cpp | 76 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 kernel/kapi/devices.tests.cpp diff --git a/kernel/kapi/devices.tests.cpp b/kernel/kapi/devices.tests.cpp new file mode 100644 index 00000000..236a812d --- /dev/null +++ b/kernel/kapi/devices.tests.cpp @@ -0,0 +1,76 @@ +#include + +#include + +#include + +namespace +{ + + struct test_bus final : kapi::devices::bus + { + using kapi::devices::bus::bus; + }; + + struct test_device final : kapi::devices::device + { + using kapi::devices::device::device; + + auto init() -> bool override + { + return true; + } + }; + +} // namespace + +SCENARIO("the device registry holds devices weakly and prunes stale entries lazily", "[devices][registry]") +{ + GIVEN("a device attached to a bus, and therefore registered") + { + auto owner = kstd::make_shared("registry_test_owner"); + owner->add_child(kstd::make_shared("registry_test_device")); + + THEN("it is discoverable via find_devices") + { + auto found = kapi::devices::find_device("registry_test_device"); + REQUIRE(found); + REQUIRE(found->name() == "registry_test_device"); + } + + THEN("find_device reports no match for an uknown name") + { + REQUIRE_FALSE(kapi::devices::find_device("does_not_exist")); + } + + WHEN("every strong reference to the device is dropped") + { + owner.reset(); + + THEN("find_device no longer resolves it") + { + REQUIRE_FALSE(kapi::devices::find_device("registry_test_device")); + } + } + } + + GIVEN("a device name whose previous registration has since expired") + { + { + auto owner = kstd::make_shared("registry_reuse_owner_1"); + owner->add_child(kstd::make_shared("registry_reuse_device")); + } + + WHEN("a new device is registered under the very same name") + { + auto new_device = kstd::make_shared("registry_reuse_device"); + auto registered = kapi::devices::register_device(new_device); + + THEN("registration succeeds") + { + REQUIRE(registered); + REQUIRE(kapi::devices::find_device("registry_reuse_device") == new_device); + } + } + } +} -- cgit v1.2.3