Retire the admission-cap Docker suite; the inbound gate is proven in-process

The inbound max_peers early-gate in handle_msg1 (silent-drop a Msg1 from
a net-new identity at saturation, send no Msg2, admit no peer) is
unit-tested over a real UDP socket by
handle_msg1_silent_drops_at_cap_for_new_peer in src/node/tests/unit.rs:
it saturates a node, sends a Msg1 from a fresh identity, and polls the
sender socket to assert no Msg2 comes back — the same wire-observable
discriminator the Docker suite's tcpdump used — with a sibling test for
the existing-peer bypass. That is a deterministic superset of the Docker
packet-capture assertion.

Drop it from both runners in lockstep (its *_SUITES array, run function,
default-flow loop, --only dispatch arm, and the GitHub matrix leg with
its steps) so the parity guard stays green, and record the retirement in
the deliberately-not-run block with a pointer to the standalone runner.
The admission-cap-test.sh script stays on disk and runs by hand.
This commit is contained in:
Johnathan Corgan
2026-07-24 02:31:43 +00:00
parent 41ce64ba82
commit 9846e85705
2 changed files with 11 additions and 81 deletions
-40
View File
@@ -382,10 +382,6 @@ jobs:
- suite: rekey-outbound-only - suite: rekey-outbound-only
type: rekey-outbound-only type: rekey-outbound-only
topology: rekey-outbound-only topology: rekey-outbound-only
# ── Inbound max_peers admission-cap test ───────────────────────
- suite: admission-cap
type: admission-cap
topology: mesh
# ── Firewall baseline (fips0 nftables default-deny) ──────────── # ── Firewall baseline (fips0 nftables default-deny) ────────────
- suite: firewall - suite: firewall
type: firewall type: firewall
@@ -754,42 +750,6 @@ jobs:
docker compose -f testing/static/docker-compose.yml \ docker compose -f testing/static/docker-compose.yml \
--profile gateway down --volumes --remove-orphans --profile gateway down --volumes --remove-orphans
# ── Inbound max_peers admission-cap integration test ────────────────
# Lowers node.max_peers on one mesh node and asserts the inbound cap
# holds under sustained retry pressure: denied peers keep retrying but
# are never promoted to an active session. The admission-cap-test.sh
# assertions are tailored per link-layer handshake variant; the leg
# itself is uniform. Static-style harness on the shared mesh profile.
- name: Generate configs (admission-cap)
if: matrix.type == 'admission-cap'
run: bash testing/static/scripts/generate-configs.sh mesh
- name: Inject admission-cap config (admission-cap)
if: matrix.type == 'admission-cap'
run: bash testing/static/scripts/admission-cap-test.sh inject-config
- name: Start containers (admission-cap)
if: matrix.type == 'admission-cap'
run: |
docker compose -f testing/static/docker-compose.yml \
--profile mesh up -d
- name: Run admission-cap test
if: matrix.type == 'admission-cap'
run: bash testing/static/scripts/admission-cap-test.sh
- name: Collect logs on failure (admission-cap)
if: matrix.type == 'admission-cap' && failure()
run: |
docker compose -f testing/static/docker-compose.yml \
--profile mesh logs --no-color | tail -300
- name: Stop containers (admission-cap)
if: matrix.type == 'admission-cap' && always()
run: |
docker compose -f testing/static/docker-compose.yml \
--profile mesh down --volumes --remove-orphans
# ── Real-deb install integration ──────────────────────────────────── # ── Real-deb install integration ────────────────────────────────────
# The deb-install harness builds its own .deb from source in a # The deb-install harness builds its own .deb from source in a
# cargo-deb builder image; the pre-built Linux binary from the # cargo-deb builder image; the pre-built Linux binary from the
+11 -41
View File
@@ -28,7 +28,7 @@
# Integration suites (default coverage): # Integration suites (default coverage):
# static-mesh, static-chain, rekey, rekey-accept-off, # static-mesh, static-chain, rekey, rekey-accept-off,
# rekey-outbound-only, gateway, # rekey-outbound-only, gateway,
# admission-cap, firewall, nat-cone, nat-symmetric, # firewall, nat-cone, nat-symmetric,
# nat-lan, nostr-publish-consume, stun-faults, # nat-lan, nostr-publish-consume, stun-faults,
# 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,
@@ -64,6 +64,16 @@
# coverage was real-UDP admission, exercised by every other # coverage was real-UDP admission, exercised by every other
# real-transport suite. Still runnable by hand: # real-transport suite. Still runnable by hand:
# bash testing/acl-allowlist/test.sh # bash testing/acl-allowlist/test.sh
# admission-cap Retired from CI 2026-07-24 as redundant, not unrunnable.
# The inbound max_peers early-gate in handle_msg1 is unit-
# tested over a real UDP socket by
# handle_msg1_silent_drops_at_cap_for_new_peer in
# src/node/tests/unit.rs: it sends a Msg1 from a fresh
# identity at saturation and polls the sender socket to
# assert no Msg2 returns — the same wire-observable
# discriminator the Docker tcpdump used — plus a sibling
# test for the existing-peer bypass. Still runnable by hand:
# bash testing/static/scripts/admission-cap-test.sh
# ecn-ab-on, ecn-ab-off, maelstrom, maelstrom-sparse # ecn-ab-on, ecn-ab-off, maelstrom, maelstrom-sparse
# Chaos scenarios excluded from CHAOS_SUITES. The two # Chaos scenarios excluded from CHAOS_SUITES. The two
# ecn-ab ones are halves of the manual comparison above. # ecn-ab ones are halves of the manual comparison above.
@@ -124,7 +134,6 @@ ONLY_SUITE=""
# All integration suites matching ci.yml # All integration suites matching ci.yml
STATIC_SUITES=(static-mesh static-chain) STATIC_SUITES=(static-mesh static-chain)
REKEY_SUITES=(rekey rekey-accept-off rekey-outbound-only) REKEY_SUITES=(rekey rekey-accept-off rekey-outbound-only)
ADMISSION_SUITES=(admission-cap)
# Each entry: "display-name scenario [--flag value ...]" # Each entry: "display-name scenario [--flag value ...]"
CHAOS_SUITES=( CHAOS_SUITES=(
"churn-mixed-10 churn-mixed --nodes 10 --duration 120" "churn-mixed-10 churn-mixed --nodes 10 --duration 120"
@@ -192,9 +201,6 @@ list_suites() {
echo " Rekey:" echo " Rekey:"
for s in "${REKEY_SUITES[@]}"; do echo " $s"; done for s in "${REKEY_SUITES[@]}"; do echo " $s"; done
echo "" echo ""
echo " Admission cap:"
for s in "${ADMISSION_SUITES[@]}"; do echo " $s"; done
echo ""
echo " Gateway:" echo " Gateway:"
for s in "${GATEWAY_SUITES[@]}"; do echo " $s"; done for s in "${GATEWAY_SUITES[@]}"; do echo " $s"; done
echo "" echo ""
@@ -568,35 +574,6 @@ run_rekey() {
record "rekey" $rc record "rekey" $rc
} }
# Run the admission-cap integration test
# Verifies the inbound max_peers early-gate silent-drops at scale by
# lowering node.max_peers on one mesh node and asserting via tcpdump
# that no Msg2 responses go to the sustained-retrying denied peers.
run_admission_cap() {
local compose="testing/static/docker-compose.yml"
local rc=0
export COMPOSE_PROJECT_NAME="$(ci_project static)"
info "[admission-cap] Generating configs"
bash testing/static/scripts/generate-configs.sh mesh || { record "admission-cap" 1; return; }
bash testing/static/scripts/admission-cap-test.sh inject-config || { record "admission-cap" 1; return; }
info "[admission-cap] Starting containers (mesh profile)"
docker compose -f "$compose" --profile mesh up -d || { record "admission-cap" 1; return; }
info "[admission-cap] Running admission-cap test"
if bash testing/static/scripts/admission-cap-test.sh; then
rc=0
else
rc=1
info "[admission-cap] Collecting failure logs"
docker compose -f "$compose" --profile mesh logs --no-color 2>&1 | tail -100
fi
docker compose -f "$compose" --profile mesh down --volumes --remove-orphans 2>/dev/null
record "admission-cap" $rc
}
# Run a chaos scenario # Run a chaos scenario
run_chaos() { run_chaos() {
local name="$1" local name="$1"
@@ -925,11 +902,6 @@ run_integration() {
run_rekey_accept_off run_rekey_accept_off
run_rekey_outbound_only run_rekey_outbound_only
# Admission cap (mesh profile, max_peers=1 on one node)
for _suite in "${ADMISSION_SUITES[@]}"; do
run_admission_cap
done
# Gateway # Gateway
run_gateway run_gateway
@@ -1043,8 +1015,6 @@ run_suite() {
run_rekey_accept_off ;; run_rekey_accept_off ;;
rekey-outbound-only) rekey-outbound-only)
run_rekey_outbound_only ;; run_rekey_outbound_only ;;
admission-cap)
run_admission_cap ;;
gateway) gateway)
run_gateway ;; run_gateway ;;
firewall) firewall)