use beam::Node;
use std::sync::Arc;
#[tokio::test]
async fn e2e_metrics_starts_at_zero() {
let node = Node::new();
let metrics: Arc<beam::metrics::Metrics> = node.metrics();
let snap = metrics.snapshot();
assert_eq!(snap.dropped_sends, 0, "fresh node must have zero drops");
assert_eq!(
snap.reaped_quorums, 0,
"fresh node must have zero reaped quorums"
);
assert_eq!(snap.put_acks_seen, 0, "fresh node must have zero put acks");
assert_eq!(
snap.put_acks_quorum, 0,
"fresh node must have zero quorum acks"
);
}
#[tokio::test]
async fn e2e_node_and_router_share_metrics_arc() {
let node = Node::new();
let m_via_node_1 = node.metrics();
let m_via_node_2 = node.metrics();
m_via_node_1.record_dropped_send();
assert_eq!(
m_via_node_2.snapshot().dropped_sends,
1,
"two Node::metrics() handles must observe the same atomic counter"
);
m_via_node_2.record_dropped_send();
m_via_node_2.record_dropped_send();
assert_eq!(
m_via_node_1.snapshot().dropped_sends,
3,
"bidirectional visibility across Arc clones"
);
}
#[tokio::test]
async fn e2e_dropped_send_records_in_shared_metrics() {
let node = Node::new();
let observer = node.metrics();
observer.record_dropped_send();
let fresh = node.metrics();
assert_eq!(fresh.snapshot().dropped_sends, 1);
for _ in 0..10 {
observer.record_dropped_send();
}
assert_eq!(node.metrics().snapshot().dropped_sends, 11);
}