aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-07-25 00:39:52 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-07-25 00:39:52 +0200
commitdda6499eb6b718631034a274bba83053e1db8725 (patch)
tree37b0e43004624cbe13a3b67a43b98a548ca7aedd
parent906510c90750b09d5b05914f03f190c14460e03e (diff)
downloadkernel-dda6499eb6b718631034a274bba83053e1db8725.tar.xz
kernel-dda6499eb6b718631034a274bba83053e1db8725.zip
kapi: add two missing test cases
-rw-r--r--kernel/kapi/devices/driver_registry.tests.cpp57
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