mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-07-30 23:36:21 -04:00
testsuite/abdiff.py runs the same benign transfer with two rsync binaries (A = build under test, B = a baseline) and compares the OUTCOME -- exit code, stderr, --stats "Literal data", the destination tree (content + full metadata), the --itemize list, and (with --cost) peak process-group RSS. For benign input the two must be indistinguishable; any divergence is a regression candidate. It is a developer tool, NOT a runtests.py test (does not end in _test.py). Capabilities: - Scenario sweeps over options / path shapes / file types / sizes / modes / selection / placement / wire / transports, plus domain-knowledge pairwise + combo sweeps and a stochastic fuzzer/role matrix. - Transport lanes: local, ssh split (lsh.sh), stdio-pipe daemon, a REAL TCP daemon (bound port + greeting/handshake/auth challenge-response), and the restricted rrsync wrapper (support/rrsh.sh; each binary paired with its own version's rrsync via --rrsync-a/--rrsync-b, since rrsync ships in the script). - Stability gate: each binary is run N times and escalated on a candidate diff; nondeterministic scenarios are quarantined FLAKY, never reported as regressions. - Parallel (-j, default 20) with a per-run findings log; --loop runs until --timelimit (or Ctrl-C), feeding the pool a half-random / half-systematic stream of new combinations. As root an "all" run also folds in the root-only sweeps (priv, daemonchroot). - General coverage levers: a cost oracle (--cost, peak RSS over the whole process group), transport lifted as an orthogonal axis, a resume/redo sweep, and type-transition / nanosecond-mtime / scale (--scale N) fixtures. Documented in testsuite/README.md.
22 lines
812 B
Bash
Executable File
22 lines
812 B
Bash
Executable File
#!/bin/sh
|
|
# abdiff helper: a "remote shell" that emulates an sshd forced-command of
|
|
# `rrsync DIR`. rsync invokes a remote shell as:
|
|
# <shell-words...> [ssh-opts] <host> <rsync --server ...>
|
|
# so when used as -e "sh rrsh.sh <RRSYNC> <DIR>" rsync calls us as:
|
|
# sh rrsh.sh <RRSYNC> <DIR> [opts] lh rsync --server ...
|
|
# We hand the server command to rrsync via SSH_ORIGINAL_COMMAND (exactly as
|
|
# sshd would) and exec the restricted wrapper, so abdiff can A/B the rrsync
|
|
# path itself. Only the pretend hosts "lh"/"localhost" are accepted.
|
|
RRSYNC="$1"; DIR="$2"; shift 2
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-l) shift 2 ;;
|
|
lh|localhost) shift; break ;;
|
|
-*) shift ;;
|
|
*) break ;;
|
|
esac
|
|
done
|
|
SSH_ORIGINAL_COMMAND="$*"
|
|
export SSH_ORIGINAL_COMMAND
|
|
exec "$RRSYNC" "$DIR"
|