From 40323393a53eacc6942c92aa8ebc40e36b8cb048 Mon Sep 17 00:00:00 2001 From: marshmallow Date: Fri, 24 Oct 2025 10:21:05 +1100 Subject: [PATCH] add test for Target --- wire/lib/src/hive/node.rs | 48 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/wire/lib/src/hive/node.rs b/wire/lib/src/hive/node.rs index 6700336..d740e17 100644 --- a/wire/lib/src/hive/node.rs +++ b/wire/lib/src/hive/node.rs @@ -453,7 +453,7 @@ mod tests { hive::{Hive, get_hive_location}, location, }; - use std::path::PathBuf; + use std::{assert_matches::assert_matches, path::PathBuf}; use std::{collections::HashMap, env}; fn get_steps(goal_executor: GoalExecutor) -> std::vec::Vec { @@ -629,4 +629,50 @@ mod tests { ] ); } + + #[test] + fn target_fails_increments() { + let mut target = Target::from_host("localhost"); + + assert_eq!(target.current_host, 0); + + for i in 0..100 { + target.host_failed(); + assert_eq!(target.current_host, i + 1); + } + } + + #[test] + fn get_preferred_host_fails() { + let mut target = Target { + hosts: vec![ + "un.reachable.1".into(), + "un.reachable.2".into(), + "un.reachable.3".into(), + "un.reachable.4".into(), + "un.reachable.5".into(), + ], + ..Default::default() + }; + + assert_ne!( + target.get_preferred_host().unwrap().to_string(), + "un.reachable.5" + ); + + for i in 1..=5 { + assert_eq!( + target.get_preferred_host().unwrap().to_string(), + format!("un.reachable.{i}") + ); + target.host_failed(); + } + + for _ in 0..5 { + assert_matches!( + target.get_preferred_host(), + Err(HiveLibError::NetworkError(NetworkError::HostsExhausted)) + ); + } + } } -- 2.51.2