mirror of
https://github.com/jmcorgan/fips.git
synced 2026-07-30 19:46:15 +00:00
Four scenarios exist to test cost-based parent selection and each named its expected outcome in a comment that nothing read. Add a tree_parents assertion mapping a node to the parent it must have in the final tree snapshot, and encode it for the two scenarios whose stated outcome the implementation meets: cost-avoidance (n04 takes the fiber n03) and bottleneck-parent (n06 takes the fiber n03, n09 keeps its only parent n05). Both hold in all six provably-completed archived runs. The other two are left unasserted on purpose, and each for a different reason worth keeping distinct. mixed-technology says n06 and n08 should both pick the fiber parent n03. They do not. Across the five completed archived runs n06 picks n10 three times and n08 picks n04 four times. Encoding the criterion as written would red the scenario most runs, and encoding the observed behaviour would bless something nobody specified, so the disagreement is recorded at the site as an open question. n06 preferring n10 may well be correct and the comment stale, since n10 reaches it by fiber too. depth-vs-cost is different: its validation line does not name an outcome at all, saying only that the choice "reflects the actual cost tradeoff", which either answer satisfies. The corpus shows both occurring under one seed, three runs to two. That scenario needs a protocol decision about which parent is correct before it can have an assertion. Compare parents by address resolved from the snapshot's own my_node_addr, and fail rather than skip when a node is absent from the snapshot or still claims to be its own root. Those two states are the common ones in the older corpus and both produce the same "no match" a wrong parent does, so only separating them keeps a harness problem from reading as a routing verdict.
108 lines
2.5 KiB
YAML
108 lines
2.5 KiB
YAML
# Bottleneck Parent: 10-node focused Bluetooth bottleneck test
|
|
#
|
|
# Explicit topology with two Bluetooth (L2CAP) links that create
|
|
# bottleneck parent candidates. Tests that nodes avoid choosing
|
|
# Bluetooth parents when fiber alternatives exist at the same or
|
|
# slightly greater depth.
|
|
#
|
|
# Topology:
|
|
#
|
|
# n01 (root)
|
|
# / | \ \
|
|
# f f f f
|
|
# / | \ \
|
|
# n02 n03 n04 n05
|
|
# | / | \ |
|
|
# BT f f BT
|
|
# | / | \ |
|
|
# n06 n07 n08 n09
|
|
# |
|
|
# f
|
|
# |
|
|
# n10
|
|
#
|
|
# Edges and link types:
|
|
# Fiber: n01-n02, n01-n03, n01-n04, n01-n05,
|
|
# n03-n06, n03-n07, n04-n08, n08-n10
|
|
# Bluetooth: n02-n06, n05-n09
|
|
#
|
|
# Cross-links: n03-n08 (fiber) — gives n08 a fiber alternative to n04
|
|
#
|
|
# Test subjects:
|
|
# - n06 has Bluetooth (n02) and fiber (n03) at depth 1 — should pick n03
|
|
# - n09 has only Bluetooth (n05) — no alternative, stuck with BT parent
|
|
|
|
scenario:
|
|
name: "bottleneck-parent"
|
|
seed: 42
|
|
duration_secs: 60
|
|
|
|
topology:
|
|
algorithm: explicit
|
|
num_nodes: 10
|
|
params:
|
|
adjacency:
|
|
- [n01, n02]
|
|
- [n01, n03]
|
|
- [n01, n04]
|
|
- [n01, n05]
|
|
- [n02, n06]
|
|
- [n03, n06]
|
|
- [n03, n07]
|
|
- [n03, n08]
|
|
- [n04, n08]
|
|
- [n05, n09]
|
|
- [n08, n10]
|
|
subnet: "172.20.0.0/24"
|
|
ip_start: 10
|
|
|
|
netem:
|
|
enabled: true
|
|
default_policy:
|
|
delay_ms: [1, 5]
|
|
jitter_ms: [0, 1]
|
|
loss_pct: [0, 0.5]
|
|
link_policies:
|
|
# Bluetooth (L2CAP) links
|
|
- edges: ["n02-n06", "n05-n09"]
|
|
policy:
|
|
delay_ms: [15, 40]
|
|
jitter_ms: [5, 15]
|
|
loss_pct: [2, 8]
|
|
mutation:
|
|
interval_secs: {min: 30, max: 60}
|
|
fraction: 0.2
|
|
policies:
|
|
normal:
|
|
delay_ms: [1, 5]
|
|
loss_pct: [0, 0.5]
|
|
|
|
link_flaps:
|
|
enabled: false
|
|
|
|
traffic:
|
|
enabled: true
|
|
max_concurrent: 2
|
|
interval_secs: {min: 15, max: 30}
|
|
duration_secs: {min: 5, max: 10}
|
|
parallel_streams: 2
|
|
|
|
# The two test subjects named at the top of this file, encoded. Both
|
|
# existed only as comments and were checked by nothing.
|
|
#
|
|
# n06 has a Bluetooth parent (n02) and a fiber one (n03) at the same depth
|
|
# and should take the fiber. n09 has only Bluetooth, so asserting it keeps
|
|
# n05 is asserting that the absence of an alternative is handled without
|
|
# thrashing, not that Bluetooth was preferred.
|
|
#
|
|
# From the archived corpus: across the six provably-completed runs, n06's
|
|
# parent is n03 in all six and n09's is n05 in all six.
|
|
assertions:
|
|
tree_parents:
|
|
n06: n03
|
|
n09: n05
|
|
|
|
logging:
|
|
rust_log: "info"
|
|
output_dir: "./sim-results"
|