diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index df4751a..15d65f3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -414,9 +414,6 @@ jobs: - suite: static-chain type: static topology: chain - # ── Mixed-profile node-role integration test ───────────────── - - suite: mixed-profile - type: mixed-profile # ── Firewall baseline (fips0 nftables default-deny) ──────────── - suite: firewall type: firewall @@ -556,35 +553,6 @@ jobs: docker compose -f testing/static/docker-compose.yml \ --profile ${{ matrix.topology }} down --volumes --remove-orphans - # ── Mixed-profile node-role integration test ─────────────────────────── - - name: Generate and inject configs (mixed-profile) - if: matrix.type == 'mixed-profile' - run: | - bash testing/static/scripts/generate-configs.sh mixed-profile - bash testing/static/scripts/mixed-profile-test.sh inject-config - - - name: Start containers (mixed-profile) - if: matrix.type == 'mixed-profile' - run: | - docker compose -f testing/static/docker-compose.yml \ - --profile mixed-profile up -d - - - name: Run mixed-profile test - if: matrix.type == 'mixed-profile' - run: bash testing/static/scripts/mixed-profile-test.sh - - - name: Collect logs on failure (mixed-profile) - if: matrix.type == 'mixed-profile' && failure() - run: | - docker compose -f testing/static/docker-compose.yml \ - --profile mixed-profile logs --no-color | tail -300 - - - name: Stop containers (mixed-profile) - if: matrix.type == 'mixed-profile' && always() - run: | - docker compose -f testing/static/docker-compose.yml \ - --profile mixed-profile down --volumes --remove-orphans - # ── Firewall baseline integration test ───────────────────────────────── - name: Run firewall baseline integration test if: matrix.type == 'firewall' diff --git a/testing/ci-local.sh b/testing/ci-local.sh index 60bd86b..145e1b6 100755 --- a/testing/ci-local.sh +++ b/testing/ci-local.sh @@ -26,7 +26,7 @@ # -h, --help Show this help # # Integration suites (default coverage): -# static-mesh, static-chain, mixed-profile, gateway, +# static-mesh, static-chain, gateway, # firewall, nat-cone, nat-symmetric, # nat-lan, nostr-publish-consume, stun-faults, # chaos-churn-mixed-10, chaos-ethernet-mesh, @@ -88,6 +88,19 @@ # establish_outbound decision tests (src/proto/fmp/tests/core.rs, # src/peer/machine.rs). Still runnable by hand: # bash testing/static/scripts/rekey-test.sh +# mixed-profile Retired from CI 2026-07-25 as redundant, not unrunnable. +# Mixed Full/NonRouting/Leaf convergence, peer degrees and +# every reachability pair it asserted, including the +# Leaf-to-Full multi-hop pair through the Full node between +# them, are covered in-process over loopback by +# mixed_profile_nodes_converge_and_forward +# (src/node/tests/session.rs). The in-process test covers a +# superset: it asserts the multi-hop path in BOTH directions +# where this suite covered one. Retired only after the +# multi-hop assertion was shown to discriminate — reverting +# the leaf root-election gate reds it in roughly a third of +# runs — rather than on a green run alone. Still runnable by +# hand: bash testing/static/scripts/mixed-profile-test.sh # ecn-ab-on, ecn-ab-off, maelstrom, maelstrom-sparse # Chaos scenarios excluded from CHAOS_SUITES. The two # ecn-ab ones are halves of the manual comparison above. @@ -147,7 +160,6 @@ ONLY_SUITE="" # All integration suites matching ci.yml STATIC_SUITES=(static-mesh static-chain) -MIXED_PROFILE_SUITES=(mixed-profile) # Each entry: "display-name scenario [--flag value ...]" CHAOS_SUITES=( "churn-mixed-10 churn-mixed --nodes 10 --duration 120" @@ -211,9 +223,6 @@ list_suites() { echo " Static topologies:" for s in "${STATIC_SUITES[@]}"; do echo " $s"; done echo "" - echo " Mixed profile:" - for s in "${MIXED_PROFILE_SUITES[@]}"; do echo " $s"; done - echo "" echo " Gateway:" for s in "${GATEWAY_SUITES[@]}"; do echo " $s"; done echo "" @@ -561,31 +570,6 @@ run_static() { record "static-$topology" $rc } -# Run the mixed-profile integration test (Full + NonRouting + Leaf) -run_mixed_profile() { - local compose="testing/static/docker-compose.yml" - local rc=0 - - info "[mixed-profile] Generating configs" - bash testing/static/scripts/generate-configs.sh mixed-profile || { record "mixed-profile" 1; return; } - bash testing/static/scripts/mixed-profile-test.sh inject-config || { record "mixed-profile" 1; return; } - - info "[mixed-profile] Starting containers" - docker compose -f "$compose" --profile mixed-profile up -d || { record "mixed-profile" 1; return; } - - info "[mixed-profile] Running mixed-profile test" - if bash testing/static/scripts/mixed-profile-test.sh; then - rc=0 - else - rc=1 - info "[mixed-profile] Collecting failure logs" - docker compose -f "$compose" --profile mixed-profile logs --no-color 2>&1 | tail -100 - fi - - docker compose -f "$compose" --profile mixed-profile down --volumes --remove-orphans 2>/dev/null - record "mixed-profile" $rc -} - # Run a chaos scenario run_chaos() { local name="$1" @@ -842,11 +826,6 @@ run_integration() { run_static "$topology" done - # Mixed-profile (Full + NonRouting + Leaf) - for _suite in "${MIXED_PROFILE_SUITES[@]}"; do - run_mixed_profile - done - # Gateway run_gateway @@ -954,8 +933,6 @@ run_suite() { case "$suite" in static-mesh|static-chain) run_static "${suite#static-}" ;; - mixed-profile) - run_mixed_profile ;; gateway) run_gateway ;; firewall)