77 lines
2.7 KiB
Rust
77 lines
2.7 KiB
Rust
use std::net::IpAddr;
|
|
|
|
use wakey::{broadcast_wake_targets, get_interface_summaries, inventory, resolve_query};
|
|
use wakey_core::{InventoryQuery, Query};
|
|
|
|
#[tokio::test]
|
|
#[ignore = "runs against live router data; use on-device or via scripts/test_remote.ps1"]
|
|
async fn interfaces_real_router_prints_interface_summaries() -> anyhow::Result<()> {
|
|
let interfaces = get_interface_summaries().await?;
|
|
assert!(
|
|
!interfaces.is_empty(),
|
|
"expected at least one non-loopback interface summary"
|
|
);
|
|
println!("{}", serde_json::to_string_pretty(&interfaces)?);
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[ignore = "runs against live router data; use on-device or via scripts/test_remote.ps1"]
|
|
async fn inventory_real_router_default_query_returns_rows_or_empty_cleanly() -> anyhow::Result<()> {
|
|
let inv = inventory(InventoryQuery::default()).await?;
|
|
println!("{}", serde_json::to_string_pretty(&inv)?);
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[ignore = "runs against live router data; use on-device or via scripts/test_remote.ps1"]
|
|
async fn inventory_real_router_for_interface_filter_succeeds() -> anyhow::Result<()> {
|
|
let interfaces = get_interface_summaries().await?;
|
|
let first = interfaces
|
|
.first()
|
|
.map(|iface| iface.ifname.clone())
|
|
.expect("expected at least one interface");
|
|
|
|
let inv = inventory(vec![Query::Interface(first.clone())]).await?;
|
|
|
|
println!("filtered dev: {first}");
|
|
println!("{}", serde_json::to_string_pretty(&inv)?);
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[ignore = "runs against live router data; use on-device or via scripts/test_remote.ps1"]
|
|
async fn inventory_real_router_string_input_for_interface_succeeds() -> anyhow::Result<()> {
|
|
let interfaces = get_interface_summaries().await?;
|
|
let first = interfaces
|
|
.first()
|
|
.map(|iface| iface.ifname.clone())
|
|
.expect("expected at least one interface");
|
|
|
|
let inv = inventory(resolve_query(first.clone()).await?).await?;
|
|
println!("selector: {first}");
|
|
println!("{}", serde_json::to_string_pretty(&inv)?);
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[ignore = "runs against live router data; use on-device or via scripts/test_remote.ps1"]
|
|
async fn broadcast_wake_targets_real_router_resolve_from_interfaces() -> anyhow::Result<()> {
|
|
let mac: macaddr::MacAddr = "aa:bb:cc:dd:ee:ff".parse()?;
|
|
let targets = broadcast_wake_targets(mac).await?;
|
|
|
|
assert!(
|
|
targets.iter().all(|target| target.mac == Some(mac)),
|
|
"all broadcast targets should preserve the requested MAC"
|
|
);
|
|
assert!(
|
|
targets
|
|
.iter()
|
|
.all(|target| matches!(target.ip, Some(IpAddr::V4(_)))),
|
|
"broadcast targets should be IPv4 broadcast destinations"
|
|
);
|
|
|
|
println!("{}", serde_json::to_string_pretty(&targets)?);
|
|
Ok(())
|
|
}
|