fix(devices): derive presence from endpoints and align inventory ordering

This commit is contained in:
lda committed 2026-10-10 19:01:42 +07:00 Verified
1 parent 7caba52e57
commit f91186a7b1
6 files changed
+121 -6

No files matched your search

+21 -2
View File
@@ -189,11 +189,13 @@ pub fn local_observation_to_fact(
}
const fn presence_rank(presence: Presence) -> u8 {
// Match the core signal order: Unknown has no verdict, while Offline
// carries concrete evidence and belongs above it in the inventory list.
match presence {
Presence::Online => 3,
Presence::LikelyOnline => 2,
Presence::Unknown => 1,
Presence::Offline => 0,
Presence::Offline => 1,
Presence::Unknown => 0,
}
}
@@ -224,6 +226,23 @@ mod tests {
}]
}
#[test]
fn inventory_sorts_offline_before_unknown() {
let neighbors = [NeighborState::Incomplete, NeighborState::Failed]
.into_iter()
.enumerate()
.map(|(index, state)| NeighborEntry {
ip: IpAddr::V4(Ipv4Addr::new(192, 168, 1, index as u8 + 10)),
dev: None,
mac: None,
state,
})
.collect();
let devices = merge_devices(neighbors, Vec::new(), &InventoryQueryBuilder::new().build());
assert_eq!(devices[0].presence, Presence::Offline);
assert_eq!(devices[1].presence, Presence::Unknown);
}
#[test]
fn merge_devices_applies_and_across_categories() {
let query = InventoryQueryBuilder::new()