mirror of
https://gitlab.steamos.cloud/holo/steamos-manager.git
synced 2025-07-13 09:52:00 -04:00
hardware: Add tests for FanControl
This commit is contained in:
parent
f6fce8d84a
commit
d503712f29
1 changed files with 67 additions and 0 deletions
|
@ -167,7 +167,12 @@ impl FanControl {
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::{enum_roundtrip, testing};
|
use crate::{enum_roundtrip, testing};
|
||||||
|
use crate::error::to_zbus_fdo_error;
|
||||||
|
use std::time::Duration;
|
||||||
use tokio::fs::{create_dir_all, write};
|
use tokio::fs::{create_dir_all, write};
|
||||||
|
use tokio::time::sleep;
|
||||||
|
use zbus::fdo;
|
||||||
|
use zbus::zvariant::{ObjectPath, OwnedObjectPath};
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn board_lookup() {
|
async fn board_lookup() {
|
||||||
|
@ -238,4 +243,66 @@ mod test {
|
||||||
assert!(FanControlState::try_from(2).is_err());
|
assert!(FanControlState::try_from(2).is_err());
|
||||||
assert!(FanControlState::from_str("on").is_err());
|
assert!(FanControlState::from_str("on").is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
struct MockUnit {
|
||||||
|
active: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[zbus::interface(name = "org.freedesktop.systemd1.Unit")]
|
||||||
|
impl MockUnit {
|
||||||
|
#[zbus(property)]
|
||||||
|
fn active_state(&self) -> fdo::Result<String> {
|
||||||
|
if self.active {
|
||||||
|
Ok(String::from("active"))
|
||||||
|
} else {
|
||||||
|
Ok(String::from("inactive"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn start(&mut self, mode: &str) -> fdo::Result<OwnedObjectPath> {
|
||||||
|
if mode != "fail" {
|
||||||
|
return Err(to_zbus_fdo_error("Invalid mode"));
|
||||||
|
}
|
||||||
|
self.active = true;
|
||||||
|
let path = ObjectPath::try_from("/start/0")
|
||||||
|
.map_err(to_zbus_fdo_error)?;
|
||||||
|
Ok(path.into())
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn stop(&mut self, mode: &str) -> fdo::Result<OwnedObjectPath> {
|
||||||
|
if mode != "fail" {
|
||||||
|
return Err(to_zbus_fdo_error("Invalid mode"));
|
||||||
|
}
|
||||||
|
self.active = false;
|
||||||
|
let path = ObjectPath::try_from("/stop/0")
|
||||||
|
.map_err(to_zbus_fdo_error)?;
|
||||||
|
Ok(path.into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_fan_control() {
|
||||||
|
let mut h = testing::start();
|
||||||
|
let unit = MockUnit::default();
|
||||||
|
let connection = h.new_dbus().await.expect("dbus");
|
||||||
|
connection
|
||||||
|
.request_name("org.freedesktop.systemd1")
|
||||||
|
.await
|
||||||
|
.expect("request_name");
|
||||||
|
connection
|
||||||
|
.object_server()
|
||||||
|
.at("/org/freedesktop/systemd1/unit/jupiter_2dfan_2dcontrol_2eservice", unit)
|
||||||
|
.await
|
||||||
|
.expect("at");
|
||||||
|
|
||||||
|
sleep(Duration::from_millis(10)).await;
|
||||||
|
|
||||||
|
let fan_control = FanControl::new(connection);
|
||||||
|
assert_eq!(fan_control.get_state().await.unwrap(), FanControlState::Bios);
|
||||||
|
assert!(fan_control.set_state(FanControlState::Os).await.is_ok());
|
||||||
|
assert_eq!(fan_control.get_state().await.unwrap(), FanControlState::Os);
|
||||||
|
assert!(fan_control.set_state(FanControlState::Bios).await.is_ok());
|
||||||
|
assert_eq!(fan_control.get_state().await.unwrap(), FanControlState::Bios);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue