test: deepen and complete project-wide test coverage (#297)
* test: deepen coverage for health doctor provider and tunnels * test: add broad trait and module re-export coverage
This commit is contained in:
parent
79a6f180a8
commit
49fcc7a2c4
21 changed files with 1156 additions and 0 deletions
|
|
@ -58,3 +58,72 @@ pub trait Observer: Send + Sync + 'static {
|
|||
self
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use std::sync::Mutex;
|
||||
use std::time::Duration;
|
||||
|
||||
#[derive(Default)]
|
||||
struct DummyObserver {
|
||||
events: Mutex<u64>,
|
||||
metrics: Mutex<u64>,
|
||||
}
|
||||
|
||||
impl Observer for DummyObserver {
|
||||
fn record_event(&self, _event: &ObserverEvent) {
|
||||
let mut guard = self.events.lock().unwrap();
|
||||
*guard += 1;
|
||||
}
|
||||
|
||||
fn record_metric(&self, _metric: &ObserverMetric) {
|
||||
let mut guard = self.metrics.lock().unwrap();
|
||||
*guard += 1;
|
||||
}
|
||||
|
||||
fn name(&self) -> &str {
|
||||
"dummy-observer"
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn observer_records_events_and_metrics() {
|
||||
let observer = DummyObserver::default();
|
||||
|
||||
observer.record_event(&ObserverEvent::HeartbeatTick);
|
||||
observer.record_event(&ObserverEvent::Error {
|
||||
component: "test".into(),
|
||||
message: "boom".into(),
|
||||
});
|
||||
observer.record_metric(&ObserverMetric::TokensUsed(42));
|
||||
|
||||
assert_eq!(*observer.events.lock().unwrap(), 2);
|
||||
assert_eq!(*observer.metrics.lock().unwrap(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn observer_default_flush_and_as_any_work() {
|
||||
let observer = DummyObserver::default();
|
||||
|
||||
observer.flush();
|
||||
assert_eq!(observer.name(), "dummy-observer");
|
||||
assert!(observer.as_any().downcast_ref::<DummyObserver>().is_some());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn observer_event_and_metric_are_cloneable() {
|
||||
let event = ObserverEvent::ToolCall {
|
||||
tool: "shell".into(),
|
||||
duration: Duration::from_millis(10),
|
||||
success: true,
|
||||
};
|
||||
let metric = ObserverMetric::RequestLatency(Duration::from_millis(8));
|
||||
|
||||
let cloned_event = event.clone();
|
||||
let cloned_metric = metric.clone();
|
||||
|
||||
assert!(matches!(cloned_event, ObserverEvent::ToolCall { .. }));
|
||||
assert!(matches!(cloned_metric, ObserverMetric::RequestLatency(_)));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue