77 lines
2.3 KiB
Rust
77 lines
2.3 KiB
Rust
//! Integration test: Mesh operations update observability metrics
|
|
//!
|
|
//! Run with:
|
|
//! cargo test -p vaultmesh-mesh --features metrics --test metrics_integration
|
|
//!
|
|
#![cfg(feature = "metrics")]
|
|
|
|
use std::collections::HashMap;
|
|
use std::net::TcpListener;
|
|
use std::sync::Arc;
|
|
use std::time::Duration;
|
|
|
|
use tempfile::TempDir;
|
|
use tokio::time::sleep;
|
|
|
|
use vaultmesh_mesh::{MeshEngine, NodeType};
|
|
use vaultmesh_observability::ObservabilityEngine;
|
|
|
|
#[tokio::test]
|
|
async fn test_mesh_operations_update_observability_metrics() {
|
|
// Temporary dir for mesh persistence
|
|
let tmp = TempDir::new().expect("tempdir");
|
|
|
|
// Dynamic port allocation - bind to port 0 to get an available port
|
|
let listener = TcpListener::bind("127.0.0.1:0").expect("bind to port 0");
|
|
let addr = listener.local_addr().expect("get local addr");
|
|
drop(listener); // Release so ObservabilityEngine can bind
|
|
|
|
// Start observability engine on the dynamically assigned port
|
|
let obs = Arc::new(ObservabilityEngine::new());
|
|
obs.clone()
|
|
.serve(&addr)
|
|
.await
|
|
.expect("observability serve failed");
|
|
|
|
// Small delay to allow server to bind and be ready
|
|
sleep(Duration::from_millis(100)).await;
|
|
|
|
// Create MeshEngine and attach observability
|
|
let mut mesh = MeshEngine::new(tmp.path())
|
|
.with_observability(obs.clone());
|
|
|
|
// Perform a basic operation that emits a receipt
|
|
mesh.node_join(
|
|
"did:vm:node:test",
|
|
"Test Node",
|
|
NodeType::Infrastructure,
|
|
HashMap::new(),
|
|
"admin",
|
|
)
|
|
.expect("node_join");
|
|
|
|
// Wait a little to allow the receipt emission and metric recording
|
|
sleep(Duration::from_millis(100)).await;
|
|
|
|
// Fetch metrics from observability server using dynamic address
|
|
let metrics_url = format!("http://{}/metrics", addr);
|
|
let resp = reqwest::get(&metrics_url)
|
|
.await
|
|
.expect("request failed");
|
|
assert!(resp.status().is_success(), "metrics endpoint must return 200");
|
|
|
|
let body = resp.text().await.expect("read body");
|
|
|
|
// Basic asserts: receipts counter exists and mesh module is present
|
|
assert!(
|
|
body.contains("vaultmesh_receipts_total"),
|
|
"metrics should expose receipts counter"
|
|
);
|
|
|
|
// Assert mesh module appears in metrics
|
|
assert!(
|
|
body.contains("mesh"),
|
|
"mesh module should appear in metrics"
|
|
);
|
|
}
|