diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-07-25 00:39:52 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-07-25 00:39:52 +0200 |
| commit | dda6499eb6b718631034a274bba83053e1db8725 (patch) | |
| tree | 37b0e43004624cbe13a3b67a43b98a548ca7aedd | |
| parent | 906510c90750b09d5b05914f03f190c14460e03e (diff) | |
| download | kernel-dda6499eb6b718631034a274bba83053e1db8725.tar.xz kernel-dda6499eb6b718631034a274bba83053e1db8725.zip | |
kapi: add two missing test cases
| -rw-r--r-- | kernel/kapi/devices/driver_registry.tests.cpp | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/kernel/kapi/devices/driver_registry.tests.cpp b/kernel/kapi/devices/driver_registry.tests.cpp index 662b91bf..e51b706e 100644 --- a/kernel/kapi/devices/driver_registry.tests.cpp +++ b/kernel/kapi/devices/driver_registry.tests.cpp @@ -152,7 +152,7 @@ SCENARIO("Driver registry binds devices and drivers regardless of arrival order" } } -SCENARIO("driver_registry picks the highest-priority match", "[devices][driver_registry]") +SCENARIO("Driver registry picks the highest-priority match", "[devices][driver_registry]") { GIVEN("two drivers with different priorities") { @@ -177,7 +177,7 @@ SCENARIO("driver_registry picks the highest-priority match", "[devices][driver_r } } -SCENARIO("driver_registry breaks ties by registration order", "[devices][driver_registry]") +SCENARIO("Driver registry breaks ties by registration order", "[devices][driver_registry]") { GIVEN("two drivers with equal priority, registered in a specific order") { @@ -200,4 +200,57 @@ SCENARIO("driver_registry breaks ties by registration order", "[devices][driver_ } } } +} + +SCENARIO("Driver registry leaves device in failed state if driver probe fails", "[devices][driver_registry]") +{ + GIVEN("A driver that fails to probe") + { + auto bus = kstd::make_shared<test_bus>("driver_registry_tie_bus"); + auto driver = kstd::make_shared<test_driver>(3u, false); + + kapi::devices::driver_registry::get().add(driver); + + WHEN("the device arrives") + { + bus->add_child(kstd::make_shared<test_device>("driver_probe_failure_device")); + + THEN("the device ends up in failed state") + { + auto dev = kapi::devices::device_registry::get().find("driver_probe_failure_device"); + REQUIRE(dev != nullptr); + REQUIRE(dev->state() == kapi::devices::state::failed); + } + } + } +} + +SCENARIO("Driver registry leaves bound driver bound, even if better driver arrives", "[devices][driver_registry]") +{ + GIVEN("a low priority driver") + { + auto bus = kstd::make_shared<test_bus>("driver_registry_tie_bus"); + auto lower = kstd::make_shared<test_driver>(0, true); + + kapi::devices::driver_registry::get().add(lower); + + WHEN("the device arrives") + { + bus->add_child(kstd::make_shared<test_device>("driver_probe_failure_device")); + + AND_WHEN("a second, higher priority driver arrives") + { + auto higher = kstd::make_shared<test_driver>(0, true); + kapi::devices::driver_registry::get().add(higher); + + THEN("the device is still bound to the lower priority driver") + { + auto dev = kapi::devices::device_registry::get().find("driver_probe_failure_device"); + REQUIRE(dev != nullptr); + REQUIRE(dev->state() == kapi::devices::state::bound); + REQUIRE(dev->bound_driver() == lower.get()); + } + } + } + } }
\ No newline at end of file |
