From f8a65cbfd1c8d233a76caebcb64a231cb63e7ba9 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Fri, 24 Jul 2026 08:39:40 +0200 Subject: kernel: fix device number registry tests --- .../filesystem/device_number_registry.tests.cpp | 48 ++++++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) (limited to 'kernel') diff --git a/kernel/kernel/filesystem/device_number_registry.tests.cpp b/kernel/kernel/filesystem/device_number_registry.tests.cpp index 67e09831..d6c6e261 100644 --- a/kernel/kernel/filesystem/device_number_registry.tests.cpp +++ b/kernel/kernel/filesystem/device_number_registry.tests.cpp @@ -6,17 +6,59 @@ #include #include +#include #include #include +#include +#include +#include + using namespace kstd::units_literals; +namespace +{ + struct test_driver final : kapi::devices::driver + { + explicit test_driver(std::optional major) + : m_major{major} + {} + + [[nodiscard]] auto probe(kapi::devices::device &) -> kstd::result override + { + return kstd::success(); + } + + auto unbind(kapi::devices::device &) -> void override {} + + [[nodiscard]] auto claimed_major() const -> std::optional override + { + return m_major; + } + + private: + std::optional m_major; + }; + + auto make_bound_block_device(kapi::devices::interface_registry & interfaces, kstd::string const & name, + kstd::units::bytes block_size, kstd::shared_ptr const & driver) + -> kstd::shared_ptr + { + auto device = kstd::make_shared(name, block_size); + device->bind_driver(driver); + device->set_state(kapi::devices::state::bound); + std::ignore = interfaces.publish(device, name); + return device; + } +} // namespace + SCENARIO("Device number registry resolves and numbers published block devices", "[kernel][filesystem][device_number_registry]") { auto interfaces = kapi::devices::interface_registry{}; auto registry = kernel::filesystem::device_number_registry{interfaces}; + auto ram_disk_driver = kstd::make_shared(std::uint8_t{1}); GIVEN("No devices have been published") { @@ -28,8 +70,7 @@ SCENARIO("Device number registry resolves and numbers published block devices", GIVEN("A single block device has been published") { - auto device = kstd::make_shared("ram0", 512_B); - CHECK(interfaces.publish(device, "ram0")); + auto device = make_bound_block_device(interfaces, "ram0", 512_B, ram_disk_driver); THEN("all() returns a vector with one element") { @@ -73,8 +114,7 @@ SCENARIO("Device number registry resolves and numbers published block devices", GIVEN("A device was published") { - auto device = kstd::make_shared("ram0", 512_B); - CHECK(interfaces.publish(device, "ram0")); + auto device = make_bound_block_device(interfaces, "ram0", 512_B, ram_disk_driver); auto number = registry.number_of(*device); WHEN("destroying it with no further owner") -- cgit v1.2.3