diff --git a/src/metrics.rs b/src/metrics.rs index 1490fec..8e2502e 100644 --- a/src/metrics.rs +++ b/src/metrics.rs @@ -219,23 +219,32 @@ mod tests { } #[test] - fn executions_record_one_bounded_outcome() { - let metrics = QueueMetrics::new(); - TaskExecution::start(metrics.clone()).finish(ExecutionOutcome::Completed); - - assert_eq!(metrics.executions(), 1); - assert_eq!(metrics.completed_executions(), 1); - assert_eq!(metrics.unhandled_executions(), 0); - } - - #[test] - fn lease_loss_is_a_bounded_execution_outcome() { - let metrics = QueueMetrics::new(); - TaskExecution::start(metrics.clone()).finish(ExecutionOutcome::LeaseLost); - - assert_eq!(metrics.executions(), 1); - assert_eq!(metrics.lease_lost_executions(), 1); - assert_eq!(metrics.unhandled_executions(), 0); + fn bounded_execution_outcomes_update_exactly_one_outcome_counter() { + let cases = [ + ExecutionOutcome::Completed, + ExecutionOutcome::Failed, + ExecutionOutcome::LeaseLost, + ExecutionOutcome::Cancelled, + ExecutionOutcome::Suspended, + ]; + + for (index, outcome) in cases.into_iter().enumerate() { + let metrics = QueueMetrics::new(); + TaskExecution::start(metrics.clone()).finish(outcome); + + let counters = [ + metrics.completed_executions(), + metrics.failed_executions(), + metrics.lease_lost_executions(), + metrics.cancelled_executions(), + metrics.suspended_executions(), + ]; + + assert_eq!(metrics.executions(), 1); + assert_eq!(metrics.unhandled_executions(), 0); + assert_eq!(counters[index], 1); + assert_eq!(counters.iter().sum::(), 1); + } } #[test]