aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-07-24 08:39:40 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-07-24 08:39:40 +0200
commitf8a65cbfd1c8d233a76caebcb64a231cb63e7ba9 (patch)
tree7130392a8455a25869bb3f189174f2337ae00893 /kernel
parentd09ba3e7d1fa8c61b7437027d38ac53c68148188 (diff)
downloadkernel-f8a65cbfd1c8d233a76caebcb64a231cb63e7ba9.tar.xz
kernel-f8a65cbfd1c8d233a76caebcb64a231cb63e7ba9.zip
kernel: fix device number registry tests
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel/filesystem/device_number_registry.tests.cpp48
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")