diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-07-23 09:24:41 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-07-23 09:24:41 +0200 |
| commit | bf60a4c89130c5344b705367d7ab824a414a8521 (patch) | |
| tree | 14862fa6594b6a2de8e6dd297998fcc8c6525d34 /kernel | |
| parent | f37a571da89a21262709694786573df01ce651cc (diff) | |
| download | kernel-bf60a4c89130c5344b705367d7ab824a414a8521.tar.xz kernel-bf60a4c89130c5344b705367d7ab824a414a8521.zip | |
kapi: add device registry tests
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/kapi/devices.tests.cpp | 76 |
1 files changed, 76 insertions, 0 deletions
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 <kapi/devices.hpp> + +#include <kstd/memory.hpp> + +#include <catch2/catch_test_macros.hpp> + +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<test_bus>("registry_test_owner"); + owner->add_child(kstd::make_shared<test_device>("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<test_bus>("registry_reuse_owner_1"); + owner->add_child(kstd::make_shared<test_device>("registry_reuse_device")); + } + + WHEN("a new device is registered under the very same name") + { + auto new_device = kstd::make_shared<test_device>("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); + } + } + } +} |
