use std::sync::Arc;
use cc_lb_runtime_wasmtime::{WasmtimeRuntime, WasmtimeRuntimeError};
use metrics_exporter_prometheus::PrometheusBuilder;
#[test]
fn pool_saturated_variant_is_part_of_error_surface() {
let err = WasmtimeRuntimeError::PoolSaturated { resource: "pool" };
assert!(matches!(
&err,
WasmtimeRuntimeError::PoolSaturated { resource: "pool" }
));
let msg = err.to_string();
assert!(msg.contains("pool"), "Display should name resource: {msg}");
}
#[test]
fn pool_utilization_gauges_are_emitted() {
let recorder = PrometheusBuilder::new().build_recorder();
let handle = recorder.handle();
metrics::with_local_recorder(&recorder, || {
let rt = Arc::new(WasmtimeRuntime::with_defaults().expect("engine"));
rt.publish_pool_metrics();
});
let rendered = handle.render();
assert!(
rendered.contains("cc_lb_plugin_pool_memories_utilization_ratio"),
"memories utilization gauge must be emitted; rendered=\n{rendered}",
);
assert!(
rendered.contains("cc_lb_plugin_pool_core_instances_utilization_ratio"),
"core-instances utilization gauge must be emitted; rendered=\n{rendered}",
);
assert!(
rendered.contains("cc_lb_plugin_pool_memories_total"),
"memories total gauge must be emitted; rendered=\n{rendered}",
);
assert!(
rendered.contains("cc_lb_plugin_memory_reservation_bytes"),
"reservation gauge must be emitted; rendered=\n{rendered}",
);
assert!(
rendered.contains("cc_lb_plugin_pool_virtual_reservation_bytes"),
"virtual reservation gauge must be emitted; rendered=\n{rendered}",
);
}