86 lines
2.7 KiB
Rust
86 lines
2.7 KiB
Rust
//! Smoke test for the observability exporter HTTP server
|
|
|
|
use std::net::SocketAddr;
|
|
use std::sync::Arc;
|
|
use tokio::time::{sleep, Duration};
|
|
use vaultmesh_observability::ObservabilityEngine;
|
|
|
|
#[tokio::test]
|
|
async fn test_metrics_endpoint_returns_200() {
|
|
let engine = Arc::new(ObservabilityEngine::new());
|
|
let addr: SocketAddr = "127.0.0.1:19108".parse().unwrap();
|
|
|
|
// Prometheus only outputs metrics after they've been observed
|
|
engine.observe_emitted("test", 0.01);
|
|
engine.set_anchor_age(1700000000.0);
|
|
|
|
engine.clone().serve(&addr).await.expect("serve failed");
|
|
|
|
// Give the server time to start
|
|
sleep(Duration::from_millis(100)).await;
|
|
|
|
// Request /metrics
|
|
let resp = reqwest::get("http://127.0.0.1:19108/metrics")
|
|
.await
|
|
.expect("request failed");
|
|
|
|
assert!(resp.status().is_success(), "Expected 200 OK");
|
|
|
|
let body = resp.text().await.expect("body read failed");
|
|
assert!(
|
|
body.contains("vaultmesh_receipts_total"),
|
|
"Expected vaultmesh_receipts_total metric"
|
|
);
|
|
assert!(
|
|
body.contains("vaultmesh_anchor_age_seconds"),
|
|
"Expected vaultmesh_anchor_age_seconds metric"
|
|
);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_health_endpoint() {
|
|
let engine = Arc::new(ObservabilityEngine::new());
|
|
let addr: SocketAddr = "127.0.0.1:19109".parse().unwrap();
|
|
|
|
engine.clone().serve(&addr).await.expect("serve failed");
|
|
sleep(Duration::from_millis(100)).await;
|
|
|
|
let resp = reqwest::get("http://127.0.0.1:19109/health")
|
|
.await
|
|
.expect("request failed");
|
|
|
|
assert!(resp.status().is_success());
|
|
let body = resp.text().await.unwrap();
|
|
assert_eq!(body, "ok");
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_metrics_after_observations() {
|
|
let engine = Arc::new(ObservabilityEngine::new());
|
|
let addr: SocketAddr = "127.0.0.1:19110".parse().unwrap();
|
|
|
|
// Record some metrics before starting server
|
|
engine.observe_emitted("guardian", 0.05);
|
|
engine.observe_emitted("treasury", 0.02);
|
|
engine.observe_failed("mesh", "timeout");
|
|
engine.set_anchor_age(1700000000.0);
|
|
|
|
engine.clone().serve(&addr).await.expect("serve failed");
|
|
sleep(Duration::from_millis(100)).await;
|
|
|
|
let resp = reqwest::get("http://127.0.0.1:19110/metrics")
|
|
.await
|
|
.expect("request failed");
|
|
let body = resp.text().await.unwrap();
|
|
|
|
// Check that our recorded metrics appear
|
|
assert!(body.contains("guardian"), "Expected guardian label");
|
|
assert!(body.contains("treasury"), "Expected treasury label");
|
|
assert!(body.contains("mesh"), "Expected mesh label");
|
|
assert!(body.contains("timeout"), "Expected timeout reason");
|
|
assert!(
|
|
body.contains("1.7e+09") || body.contains("1700000000"),
|
|
"Expected anchor age value"
|
|
);
|
|
}
|