#!/usr/bin/env bash # RPC-driven P2P peer churn on the target (same mix as fdbug/p2p/rpcchurn.sh): # disconnectnode / addnode onetry / setban+clearbanned / kill -9 + restart of helper2. # usage: rpcchurn.sh source "$REPRO/common.sh" OUT=$1; DUR=${2:-300} DD_T=$OUT/target; DD_H1=$OUT/helper1; DD_H2=$OUT/helper2 end=$(( $(date +%s) + DUR )); i=0; restarts=0 while [ "$(date +%s)" -lt "$end" ] && [ ! -e "$OUT/STOP" ]; do i=$((i+1)) case $(( i % 5 )) in 0) clin "$DD_T" "$RPC_T" disconnectnode "127.0.0.1:$P2P_H1" >/dev/null 2>&1 ;; 1) clin "$DD_T" "$RPC_T" addnode "127.0.0.1:$P2P_H1" onetry >/dev/null 2>&1 ;; 2) clin "$DD_T" "$RPC_T" setban "127.0.0.1" add 1 >/dev/null 2>&1; sleep 0.3 clin "$DD_T" "$RPC_T" clearbanned >/dev/null 2>&1 clin "$DD_H2" "$RPC_H2" addnode "127.0.0.1:$P2P_T" onetry >/dev/null 2>&1 ;; 3) pid=$(cat "$DD_H2/regtest/hushd.pid" 2>/dev/null) if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then kill -9 "$pid" 2>/dev/null for _ in $(seq 1 20); do kill -0 "$pid" 2>/dev/null || break; sleep 0.5; done start_helper "$DD_H2" "$P2P_H2" "$RPC_H2" "$OUT/logs/helper2.txt" waitrpc "$DD_H2" "$RPC_H2" 120 >/dev/null 2>&1 restarts=$((restarts+1)) fi ;; 4) clin "$DD_T" "$RPC_T" addnode "127.0.0.1:$P2P_H2" onetry >/dev/null 2>&1 ;; esac sleep 0.7 done echo "rpcchurn: $i cycles, $restarts helper2 restarts"