mirror of
https://github.com/jmcorgan/fips.git
synced 2026-07-30 19:46:15 +00:00
Retire the smoke-10 chaos scenario; convergence is covered in-process
smoke-10 was a no-stressor 10-node tree-convergence sanity check (netem off, no ping). Its subject, spanning-tree convergence and root election, is now covered in-process, faster and deterministically, by the loopback spanning-tree harness (src/node/tests/spanning_tree.rs: ring, star, chain, 100-node and disconnected-component convergence) plus end-to-end datagram delivery (src/node/tests/forwarding.rs). Real-UDP convergence smoke still runs via static-mesh and the other scenarios' baseline assertions, so no Docker coverage is lost. Drop it from both runners in lockstep (the CHAOS_SUITES list and the GitHub chaos matrix) so the parity guard stays green, delete the scenario YAML, and update the chaos README.
This commit is contained in:
@@ -396,9 +396,6 @@ jobs:
|
|||||||
type: gateway
|
type: gateway
|
||||||
topology: gateway
|
topology: gateway
|
||||||
# ── Chaos / stochastic scenarios ───────────────────────────────────
|
# ── Chaos / stochastic scenarios ───────────────────────────────────
|
||||||
- suite: chaos-smoke-10
|
|
||||||
type: chaos
|
|
||||||
scenario: smoke-10
|
|
||||||
- suite: churn-mixed-10
|
- suite: churn-mixed-10
|
||||||
type: chaos
|
type: chaos
|
||||||
scenario: churn-mixed
|
scenario: churn-mixed
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ Ethernet). Logs are collected and analyzed automatically.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
./testing/chaos/scripts/build.sh
|
./testing/chaos/scripts/build.sh
|
||||||
./testing/chaos/scripts/chaos.sh smoke-10
|
./testing/chaos/scripts/chaos.sh churn-mixed
|
||||||
```
|
```
|
||||||
|
|
||||||
## Available Scenarios
|
## Available Scenarios
|
||||||
@@ -29,12 +29,10 @@ Random topologies with increasing stressor intensity.
|
|||||||
|
|
||||||
| Scenario | Nodes | Topology | Duration | Netem | Link Flaps | Traffic | Node Churn | Bandwidth |
|
| Scenario | Nodes | Topology | Duration | Netem | Link Flaps | Traffic | Node Churn | Bandwidth |
|
||||||
| -------- | ----- | ---------------- | -------- | ----- | ---------- | ------- | ---------- | --------- |
|
| -------- | ----- | ---------------- | -------- | ----- | ---------- | ------- | ---------- | --------- |
|
||||||
| smoke-10 | 10 | random_geometric | 60s | -- | -- | -- | -- | -- |
|
|
||||||
| chaos-10 | 10 | random_geometric | 120s | yes | yes | yes | -- | -- |
|
| chaos-10 | 10 | random_geometric | 120s | yes | yes | yes | -- | -- |
|
||||||
| churn-10 | 10 | random_geometric | 600s | yes | yes | yes | yes | -- |
|
| churn-10 | 10 | random_geometric | 600s | yes | yes | yes | yes | -- |
|
||||||
| churn-20 | 20 | erdos_renyi | 600s | yes | yes | yes | yes | yes |
|
| churn-20 | 20 | erdos_renyi | 600s | yes | yes | yes | yes | yes |
|
||||||
|
|
||||||
- **smoke-10**: Baseline sanity check. No stressors, just verify tree convergence.
|
|
||||||
- **chaos-10**: Network degradation (5-50ms delay, 0-2% loss), link flaps (max 2
|
- **chaos-10**: Network degradation (5-50ms delay, 0-2% loss), link flaps (max 2
|
||||||
down, 10-30s), and iperf traffic (max 3 concurrent). Netem mutates 30% of
|
down, 10-30s), and iperf traffic (max 3 concurrent). Netem mutates 30% of
|
||||||
links every 15-30s between normal and degraded policies.
|
links every 15-30s between normal and degraded policies.
|
||||||
|
|||||||
@@ -1,51 +0,0 @@
|
|||||||
scenario:
|
|
||||||
name: "smoke-10"
|
|
||||||
seed: 42
|
|
||||||
duration_secs: 30
|
|
||||||
|
|
||||||
topology:
|
|
||||||
num_nodes: 10
|
|
||||||
algorithm: random_geometric
|
|
||||||
params:
|
|
||||||
radius: 0.5
|
|
||||||
ensure_connected: true
|
|
||||||
subnet: "172.20.0.0/24"
|
|
||||||
ip_start: 10
|
|
||||||
# The one scenario that deliberately does NOT pin the root. Every other
|
|
||||||
# scenario assigns identities in NodeAddr order so that n01 is root and its
|
|
||||||
# diagram describes the tree that actually forms. That is right for them,
|
|
||||||
# because they test parent selection and were silently testing it under a
|
|
||||||
# root they did not intend, but applying it everywhere would leave root
|
|
||||||
# election itself exercised nowhere. This is the generic 10-node convergence
|
|
||||||
# baseline and its `baseline` assertion is root-agnostic, so it is the
|
|
||||||
# cheapest place to keep election under test.
|
|
||||||
# Do not "fix" this to true for consistency with the others.
|
|
||||||
pin_root: false
|
|
||||||
|
|
||||||
# Phase 2+ features (disabled for MVP)
|
|
||||||
netem:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
link_flaps:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
traffic:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
# Baseline: the mesh came up, agreed on a root, and took parents. This
|
|
||||||
# asserts nothing about any particular subsystem; it exists so that a
|
|
||||||
# run in which the mesh never formed cannot report success, which until
|
|
||||||
# now it could, because this scenario carried no assertions at all.
|
|
||||||
#
|
|
||||||
# Ten nodes, one root, nine parented in all six provably-completed
|
|
||||||
# archived runs. As the smoke test this is the scenario whose silent
|
|
||||||
# success was least defensible.
|
|
||||||
assertions:
|
|
||||||
baseline:
|
|
||||||
min_nodes_reporting: 10
|
|
||||||
max_roots: 1
|
|
||||||
min_nodes_parented: 9
|
|
||||||
|
|
||||||
logging:
|
|
||||||
rust_log: "info"
|
|
||||||
output_dir: "./sim-results"
|
|
||||||
+10
-2
@@ -30,7 +30,7 @@
|
|||||||
# rekey-outbound-only, gateway,
|
# rekey-outbound-only, gateway,
|
||||||
# acl-allowlist, admission-cap, firewall, nat-cone, nat-symmetric,
|
# acl-allowlist, admission-cap, firewall, nat-cone, nat-symmetric,
|
||||||
# nat-lan, nostr-publish-consume, stun-faults,
|
# nat-lan, nostr-publish-consume, stun-faults,
|
||||||
# chaos-smoke-10, chaos-churn-mixed-10, chaos-ethernet-mesh,
|
# chaos-churn-mixed-10, chaos-ethernet-mesh,
|
||||||
# chaos-ethernet-only, chaos-tcp-mesh, chaos-congestion-stress,
|
# chaos-ethernet-only, chaos-tcp-mesh, chaos-congestion-stress,
|
||||||
# chaos-bloom-storm,
|
# chaos-bloom-storm,
|
||||||
# sidecar, dns-resolver, deb-install
|
# sidecar, dns-resolver, deb-install
|
||||||
@@ -117,7 +117,6 @@ REKEY_SUITES=(rekey rekey-accept-off rekey-outbound-only)
|
|||||||
ADMISSION_SUITES=(admission-cap)
|
ADMISSION_SUITES=(admission-cap)
|
||||||
# Each entry: "display-name scenario [--flag value ...]"
|
# Each entry: "display-name scenario [--flag value ...]"
|
||||||
CHAOS_SUITES=(
|
CHAOS_SUITES=(
|
||||||
"smoke-10 smoke-10"
|
|
||||||
"churn-mixed-10 churn-mixed --nodes 10 --duration 120"
|
"churn-mixed-10 churn-mixed --nodes 10 --duration 120"
|
||||||
"ethernet-mesh ethernet-mesh"
|
"ethernet-mesh ethernet-mesh"
|
||||||
"ethernet-only ethernet-only"
|
"ethernet-only ethernet-only"
|
||||||
@@ -137,6 +136,15 @@ CHAOS_SUITES=(
|
|||||||
# detection logic is now unit-tested in src/node/tests/unit.rs.
|
# detection logic is now unit-tested in src/node/tests/unit.rs.
|
||||||
# congestion-stress stays: it exercises the ECN/MMP congestion signals,
|
# congestion-stress stays: it exercises the ECN/MMP congestion signals,
|
||||||
# which do need the real shaped bottleneck queue.
|
# which do need the real shaped bottleneck queue.
|
||||||
|
#
|
||||||
|
# Retired 2026-07-24 for a different reason — redundant, not unreliable:
|
||||||
|
# - smoke-10: a no-stressor 10-node tree-convergence sanity check (netem
|
||||||
|
# off, no ping). The convergence logic it exercised is covered in-process,
|
||||||
|
# faster and deterministically, by the loopback spanning-tree harness
|
||||||
|
# (src/node/tests/spanning_tree.rs: ring/star/chain/100-node/disconnected)
|
||||||
|
# plus end-to-end datagram delivery (src/node/tests/forwarding.rs). Real-
|
||||||
|
# UDP convergence smoke still runs via static-mesh and the other chaos
|
||||||
|
# scenarios' baseline assertions, so no Docker coverage is lost.
|
||||||
GATEWAY_SUITES=(gateway)
|
GATEWAY_SUITES=(gateway)
|
||||||
SIDECAR_SUITES=(sidecar)
|
SIDECAR_SUITES=(sidecar)
|
||||||
ACL_SUITES=(acl-allowlist)
|
ACL_SUITES=(acl-allowlist)
|
||||||
|
|||||||
Reference in New Issue
Block a user