92a11c3c72
Прогон cargo fmt (гейт lint): многострочное форматирование match-веток FSM, PowerMock/PowerService-литералов, integration-вызовов. Без изменений логики. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Alexander <akotenev2003@gmail.com>
104 lines
3.3 KiB
Rust
104 lines
3.3 KiB
Rust
//! Интеграция `Power1` + dev-mock на session-шине. `#[ignore]` — запуск: `just test-integration`.
|
|
//! Проверяет state по шине и fake-ACC: `dev.PowerMock1.SetAcc` → сигнал `Power1.AccChanged`.
|
|
|
|
use futures_util::StreamExt;
|
|
use shturman_ipc::{names, types::PowerState};
|
|
use shturman_power::PowerService;
|
|
use shturman_sdk::PowerClient;
|
|
|
|
#[tokio::test]
|
|
#[ignore = "нужна session-шина: just test-integration"]
|
|
async fn power_state_and_fake_acc() {
|
|
let svc = PowerService::new();
|
|
let mock = svc.mock();
|
|
|
|
// сервер: Power1 + dev.PowerMock1 на одном пути (владеет ru.shturman.Power)
|
|
let server = zbus::Connection::session().await.unwrap();
|
|
server
|
|
.object_server()
|
|
.at(names::power::PATH, svc)
|
|
.await
|
|
.unwrap();
|
|
server
|
|
.object_server()
|
|
.at(names::power::PATH, mock)
|
|
.await
|
|
.unwrap();
|
|
server.request_name(names::power::NAME).await.unwrap();
|
|
|
|
let client_conn = zbus::Connection::session().await.unwrap();
|
|
let power = PowerClient::new(&client_conn).await.unwrap();
|
|
assert_eq!(power.power_state().await.unwrap(), PowerState::Running);
|
|
|
|
// подписка на AccChanged
|
|
let mut acc = power.proxy().receive_acc_changed().await.unwrap();
|
|
|
|
// dev.PowerMock1.SetAcc(false) сырым D-Bus-вызовом
|
|
client_conn
|
|
.call_method(
|
|
Some(names::power::NAME),
|
|
names::power::PATH,
|
|
Some(names::power::MOCK_IFACE),
|
|
"SetAcc",
|
|
&(false,),
|
|
)
|
|
.await
|
|
.unwrap();
|
|
|
|
let sig = acc.next().await.unwrap();
|
|
assert!(!sig.args().unwrap().on());
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[ignore = "нужна session-шина: just test-integration"]
|
|
async fn shutdown_imminent_then_abort() {
|
|
let svc = PowerService::new();
|
|
let mock = svc.mock();
|
|
let server = zbus::Connection::session().await.unwrap();
|
|
server
|
|
.object_server()
|
|
.at(names::power::PATH, svc)
|
|
.await
|
|
.unwrap();
|
|
server
|
|
.object_server()
|
|
.at(names::power::PATH, mock)
|
|
.await
|
|
.unwrap();
|
|
server.request_name(names::power::NAME).await.unwrap();
|
|
|
|
let client = zbus::Connection::session().await.unwrap();
|
|
let power = PowerClient::new(&client).await.unwrap();
|
|
let mut imminent = power.proxy().receive_shutdown_imminent().await.unwrap();
|
|
let mut aborted = power.proxy().receive_shutdown_aborted().await.unwrap();
|
|
|
|
// ACC-off → ShutdownImminent(acc_off), состояние shutting_down
|
|
client
|
|
.call_method(
|
|
Some(names::power::NAME),
|
|
names::power::PATH,
|
|
Some(names::power::MOCK_IFACE),
|
|
"SetAcc",
|
|
&(false,),
|
|
)
|
|
.await
|
|
.unwrap();
|
|
let sig = imminent.next().await.unwrap();
|
|
assert_eq!(sig.args().unwrap().reason(), "acc_off");
|
|
assert_eq!(power.power_state().await.unwrap(), PowerState::ShuttingDown);
|
|
|
|
// re-power до grace → ShutdownAborted + running
|
|
client
|
|
.call_method(
|
|
Some(names::power::NAME),
|
|
names::power::PATH,
|
|
Some(names::power::MOCK_IFACE),
|
|
"SetAcc",
|
|
&(true,),
|
|
)
|
|
.await
|
|
.unwrap();
|
|
aborted.next().await.unwrap();
|
|
assert_eq!(power.power_state().await.unwrap(), PowerState::Running);
|
|
}
|