diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-07-24 08:39:40 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-07-24 08:39:40 +0200 |
| commit | f8a65cbfd1c8d233a76caebcb64a231cb63e7ba9 (patch) | |
| tree | 7130392a8455a25869bb3f189174f2337ae00893 | |
| parent | d09ba3e7d1fa8c61b7437027d38ac53c68148188 (diff) | |
| download | kernel-f8a65cbfd1c8d233a76caebcb64a231cb63e7ba9.tar.xz kernel-f8a65cbfd1c8d233a76caebcb64a231cb63e7ba9.zip | |
kernel: fix device number registry tests
| -rw-r--r-- | kernel/kernel/filesystem/device_number_registry.tests.cpp | 48 |
1 files changed, 44 insertions, 4 deletions
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 <kapi/devices.hpp> #include <kstd/memory.hpp> +#include <kstd/result.hpp> #include <kstd/units.hpp> #include <catch2/catch_test_macros.hpp> +#include <cstdint> +#include <optional> +#include <tuple> + using namespace kstd::units_literals; +namespace +{ + struct test_driver final : kapi::devices::driver + { + explicit test_driver(std::optional<std::uint8_t> major) + : m_major{major} + {} + + [[nodiscard]] auto probe(kapi::devices::device &) -> kstd::result<void> override + { + return kstd::success(); + } + + auto unbind(kapi::devices::device &) -> void override {} + + [[nodiscard]] auto claimed_major() const -> std::optional<std::uint8_t> override + { + return m_major; + } + + private: + std::optional<std::uint8_t> m_major; + }; + + auto make_bound_block_device(kapi::devices::interface_registry & interfaces, kstd::string const & name, + kstd::units::bytes block_size, kstd::shared_ptr<kapi::devices::driver> const & driver) + -> kstd::shared_ptr<kernel::tests::devices::block_device> + { + auto device = kstd::make_shared<kernel::tests::devices::block_device>(name, block_size); + device->bind_driver(driver); + device->set_state(kapi::devices::state::bound); + std::ignore = interfaces.publish<kapi::devices::block_device>(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<test_driver>(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<kernel::tests::devices::block_device>("ram0", 512_B); - CHECK(interfaces.publish<kapi::devices::block_device>(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<kernel::tests::devices::block_device>("ram0", 512_B); - CHECK(interfaces.publish<kapi::devices::block_device>(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") |
