docs(readme): describe how the concurrency scenarios actually work now
README's Development section stated the repo's methodology for writing concurrency scenarios as "gate the interfering step on observed progress of the step it interferes with, so the window is hit deterministically". That described the progress poll scenario 8 used, which this branch removes — and the property it claims is precisely what issue #3 records as false: observing that a walk has started says nothing about where it will be when the interference lands. Left standing it would tell the next contributor to build the next scenario the way this one had to be rewritten. Replaced with what the suites do: stub, on PATH, a command the code under test calls at a known point, so placement is a fact rather than a scheduling outcome; assert the stub fired; and assert which guard caught the fault where more than one could. Also: the seed suite's table row now names both tear modes, and publish-snapshot-selftest.sh's cross-reference points at 8a and 8b rather than a scenario 8 that no longer exists. (publish-snapshot.sh's similar mislabel predates this branch and is left alone.) The stub directory and the real-cp lookup move up next to seed_with_stub, so 8b no longer depends on setup buried in 8a's block and either scenario can be run or mutated alone.
This commit is contained in:
@@ -85,9 +85,13 @@ make_tree() {
|
||||
|
||||
seed() { bash "$script_dir/seed-target-dir.sh" "$@" > "$scratch/log" 2>&1 || { tail -40 "$scratch/log"; fail "seed-target-dir.sh exited non-zero"; }; }
|
||||
|
||||
# The same script, with the scenario-8 stub directory ahead of the real
|
||||
# coreutils on PATH. Kept separate so no other scenario can pick a stub up by
|
||||
# accident, and so the caller keeps the exit status instead of aborting on it.
|
||||
# The same script, with the stub directory scenarios 8a and 8b write into
|
||||
# ahead of the real coreutils on PATH. Kept separate so no other scenario can
|
||||
# pick a stub up by accident, and so the caller keeps the exit status instead
|
||||
# of aborting on it. Both halves live here rather than in the first scenario
|
||||
# that needs them, so either scenario can be run, moved or mutated alone.
|
||||
mkdir -p "$scratch/bin"
|
||||
real_cp=$(command -v cp)
|
||||
seed_with_stub() { PATH="$scratch/bin:$PATH" bash "$script_dir/seed-target-dir.sh" "$@"; }
|
||||
|
||||
# Always succeeds and always prints a number: a directory that does not exist
|
||||
@@ -256,8 +260,6 @@ gen1_inode=$(stat -c '%i' "$root/snapshot-$BASE_KEY")
|
||||
[ "$gen1_entries" -ne "$(tree_entries "$root/target-$BASE_KEY")" ] \
|
||||
|| fail "both generations have ${gen1_entries} entries — this fixture cannot tell them apart"
|
||||
|
||||
mkdir -p "$scratch/bin"
|
||||
real_cp=$(command -v cp)
|
||||
cat > "$scratch/bin/cp" <<EOF
|
||||
#!/usr/bin/env bash
|
||||
# Fires once, and only on the consumer's own top-level hardlink clone —
|
||||
|
||||
Reference in New Issue
Block a user