Initialize repository snapshot
This commit is contained in:
85
vaultmesh-observability/tests/smoketest.rs
Normal file
85
vaultmesh-observability/tests/smoketest.rs
Normal file
@@ -0,0 +1,85 @@
|
||||
//! 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"
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user