From 32b5bee2a7a9ea759eee33e9b8785b1ab0ea7fde Mon Sep 17 00:00:00 2001 From: Reuben Elliott Date: Wed, 15 Jul 2026 18:15:42 +0100 Subject: [PATCH 1/2] Reroute GBx00 and GH200 bios reset Signed-off-by: Reuben Elliott --- src/nvidia_gbx00.rs | 2 +- src/nvidia_gh200.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nvidia_gbx00.rs b/src/nvidia_gbx00.rs index bbd0b8372..d2b4126d5 100644 --- a/src/nvidia_gbx00.rs +++ b/src/nvidia_gbx00.rs @@ -813,7 +813,7 @@ impl Redfish for Bmc { } fn reset_bios<'a>(&'a self) -> crate::RedfishFuture<'a, Result<(), RedfishError>> { - Box::pin(async move { self.s.reset_bios().await }) + Box::pin(async move { self.s.factory_reset_bios().await }) } fn pending<'a>( diff --git a/src/nvidia_gh200.rs b/src/nvidia_gh200.rs index 35f8d883c..536cf2fee 100644 --- a/src/nvidia_gh200.rs +++ b/src/nvidia_gh200.rs @@ -497,7 +497,7 @@ impl Redfish for Bmc { } fn reset_bios<'a>(&'a self) -> crate::RedfishFuture<'a, Result<(), RedfishError>> { - Box::pin(async move { self.s.reset_bios().await }) + Box::pin(async move { self.s.factory_reset_bios().await }) } /// gh200 has no bios attributes From 73ffa7a20f364202ccbc320ccdf49dea0db903f0 Mon Sep 17 00:00:00 2001 From: Reuben Elliott Date: Wed, 15 Jul 2026 18:16:46 +0100 Subject: [PATCH 2/2] Integration coverage for supported vendors Signed-off-by: Reuben Elliott --- src/standard.rs | 4 ++-- tests/integration_test.rs | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/standard.rs b/src/standard.rs index 1926546a1..fe7eadfb6 100644 --- a/src/standard.rs +++ b/src/standard.rs @@ -1513,9 +1513,9 @@ impl RedfishStandard { pub async fn factory_reset_bios(&self) -> Result<(), RedfishError> { let url = format!("Systems/{}/Bios/Actions/Bios.ResetBios", self.system_id()); self.client - .req::<(), ()>(Method::POST, &url, None, None, None, Vec::new()) + .post(&url, HashMap::::new()) .await - .map(|_resp| Ok(()))? + .map(|_| ()) } pub async fn get_account_by_id( diff --git a/tests/integration_test.rs b/tests/integration_test.rs index 7b09b9de2..d1a7c152f 100644 --- a/tests/integration_test.rs +++ b/tests/integration_test.rs @@ -247,6 +247,8 @@ async fn nvidia_dpu_integration_test(redfish: &dyn Redfish) -> Result<(), anyhow .get("CommonName") .is_some_and(|x| x.as_str().unwrap().contains("NVIDIA BlueField"))); + redfish.reset_bios().await?; + Ok(()) } @@ -405,6 +407,21 @@ async fn run_integration_test( assert!(redfish.bios().await?.len() > 8); } + // Exercise vendor-specific BIOS reset dispatch. The mock server validates + // that the target resource or action exists, but does not apply the reset. + if matches!( + vendor_dir, + "dell" + | "dell_multi_dpu" + | "lenovo" + | "supermicro" + | "nvidia_viking" + | "nvidia_gb200" + | "nvidia_gh200" + ) { + redfish.reset_bios().await?; + } + // Delta power shelves expose no `/Systems` resource, so there is no // `ComputerSystem.Reset` action to drive system power control. if vendor_dir != "delta_powershelf" {