diff options
| author | tv <tv@krebsco.de> | 2026-11-06 05:33:42 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-06 05:33:42 +0100 |
| commit | 003207f94830fed0def25b49a7e6fc61655ec934 (patch) | |
| tree | 32a1ea6ff8333d3e8fcb9aa2515654abdb21ad81 /src/swarm/topology/tests.rs | |
| parent | 7f2d5be7a5cd4204fe0ec933fe4d99134607e1b3 (diff) | |
trees over working links
Diffstat (limited to 'src/swarm/topology/tests.rs')
| -rw-r--r-- | src/swarm/topology/tests.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/swarm/topology/tests.rs b/src/swarm/topology/tests.rs index 1b9c75d..ede3b6b 100644 --- a/src/swarm/topology/tests.rs +++ b/src/swarm/topology/tests.rs @@ -489,3 +489,54 @@ fn the_swarms_neighbours_count() { } assert!(affects_neighbours(&neighbours_path())); } + +/// The links members recorded: one either end recorded as unreached is out of the +/// graph, both ways, even where the other end recorded it as reached; one recorded as +/// reached is in, between members the graph has; the rest stays. +#[test] +fn recorded_links_change_the_graph() { + use crate::swarm::members::RecordedLinks; + let name = |n: &str| n.to_owned(); + let set = |names: &[&str]| names.iter().map(|n| name(n)).collect::<BTreeSet<String>>(); + let ring: BTreeMap<String, BTreeSet<String>> = [ + ("a", set(&["b", "d"])), + ("b", set(&["a", "c"])), + ("c", set(&["b", "d"])), + ("d", set(&["c", "a"])), + ] + .into_iter() + .map(|(member, neighbours)| (name(member), neighbours)) + .collect(); + let recorded: BTreeMap<String, RecordedLinks> = [ + ( + name("a"), + RecordedLinks { + unreached: set(&["b"]), + reached: set(&["c", "stranger"]), + }, + ), + ( + name("b"), + RecordedLinks { + unreached: BTreeSet::new(), + reached: set(&["d"]), + }, + ), + ( + name("d"), + RecordedLinks { + unreached: set(&["b"]), + reached: BTreeSet::new(), + }, + ), + ] + .into_iter() + .collect(); + let changed = with_recorded(&ring, &recorded); + assert_eq!(changed[&name("a")], set(&["c", "d"])); + assert_eq!(changed[&name("b")], set(&["c"])); + assert_eq!(changed[&name("c")], set(&["a", "b", "d"])); + assert_eq!(changed[&name("d")], set(&["a", "c"])); + assert!(!changed.contains_key("stranger")); + assert_eq!(with_recorded(&ring, &BTreeMap::new()), ring); +} |
