diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a78cd65..2010736 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -396,9 +396,6 @@ jobs: type: gateway topology: gateway # ── Chaos / stochastic scenarios ─────────────────────────────────── - - suite: chaos-smoke-10 - type: chaos - scenario: smoke-10 - suite: churn-mixed-10 type: chaos scenario: churn-mixed diff --git a/testing/chaos/README.md b/testing/chaos/README.md index d280972..1733a9b 100644 --- a/testing/chaos/README.md +++ b/testing/chaos/README.md @@ -18,7 +18,7 @@ Ethernet). Logs are collected and analyzed automatically. ```bash ./testing/chaos/scripts/build.sh -./testing/chaos/scripts/chaos.sh smoke-10 +./testing/chaos/scripts/chaos.sh churn-mixed ``` ## Available Scenarios @@ -29,12 +29,10 @@ Random topologies with increasing stressor intensity. | 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 | -- | -- | | churn-10 | 10 | random_geometric | 600s | 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 down, 10-30s), and iperf traffic (max 3 concurrent). Netem mutates 30% of links every 15-30s between normal and degraded policies. diff --git a/testing/chaos/scenarios/smoke-10.yaml b/testing/chaos/scenarios/smoke-10.yaml deleted file mode 100644 index 452e9b5..0000000 --- a/testing/chaos/scenarios/smoke-10.yaml +++ /dev/null @@ -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" diff --git a/testing/ci-local.sh b/testing/ci-local.sh index 962e16c..36d571a 100755 --- a/testing/ci-local.sh +++ b/testing/ci-local.sh @@ -30,7 +30,7 @@ # rekey-outbound-only, gateway, # acl-allowlist, admission-cap, firewall, nat-cone, nat-symmetric, # 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-bloom-storm, # sidecar, dns-resolver, deb-install @@ -117,7 +117,6 @@ REKEY_SUITES=(rekey rekey-accept-off rekey-outbound-only) ADMISSION_SUITES=(admission-cap) # Each entry: "display-name scenario [--flag value ...]" CHAOS_SUITES=( - "smoke-10 smoke-10" "churn-mixed-10 churn-mixed --nodes 10 --duration 120" "ethernet-mesh ethernet-mesh" "ethernet-only ethernet-only" @@ -137,6 +136,15 @@ CHAOS_SUITES=( # detection logic is now unit-tested in src/node/tests/unit.rs. # congestion-stress stays: it exercises the ECN/MMP congestion signals, # 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) SIDECAR_SUITES=(sidecar) ACL_SUITES=(acl-allowlist)