diff --git a/crates/orchestrator/src/network/node.rs b/crates/orchestrator/src/network/node.rs index 5c4a4cd1ce2c9147a8456887946d08d730b7db60..ca84186443423282d8e6a1c429a9ef48ee7d8be7 100644 --- a/crates/orchestrator/src/network/node.rs +++ b/crates/orchestrator/src/network/node.rs @@ -148,17 +148,27 @@ impl NetworkNode { &self, metric_name: impl Into<String>, value: impl Into<f64>, + ) -> Result<bool, anyhow::Error> { + let value: f64 = value.into(); + self.assert_with(metric_name, |v| v == value).await + } + + /// Assert on a metric value using a given predicate. + /// See [`assert`] description for details. + pub async fn assert_with( + &self, + metric_name: impl Into<String>, + predicate: impl Fn(f64) -> bool, ) -> Result<bool, anyhow::Error> { let metric_name = metric_name.into(); - let value = value.into(); let val = self.metric(&metric_name).await?; - if val == value { + if predicate(val) { Ok(true) } else { // reload metrics self.fetch_metrics().await?; let val = self.metric(&metric_name).await?; - Ok(val == value) + Ok(predicate(val)) } }