Files
erofs-freebsd-out-tree/tests/TC121-maximum-file-size.md
T
2026-08-18 09:20:44 +02:00

65 lines
2.2 KiB
Markdown

# Test Case: Sparse 64-bit File Boundary
**Test ID**: TC121-maximum-file-size
**Category**: Boundary & Stress
**Priority**: High
**Regression**: None
## Objective
Verify a reproducible sparse file across 2 GiB and 4 GiB offset boundaries,
including exact 64-bit size, hole bytes, marker bytes, and EOF behavior.
## Preconditions
- Complete `G7-MANUAL-SETUP.md` and its fixture self-check.
- The source is exactly 4294971393 bytes and consumes less than 1 MiB of host
blocks; this is a practical sparse boundary, not a fabricated 16 TiB run.
## Manual Steps
```sh
G7=/root/repo22-g7
FIX=$G7/fixtures
SRC=$FIX/sources/boundaries/maximum/sparse-boundary.bin
IMAGE=$FIX/images/boundaries.erofs
MNT=/mnt/repo22-g7-tc121
E=$G7/evidence/TC121
mkdir -p "$MNT" "$E"
stat -f 'source_size=%z source_blocks=%b blocksize=%k' "$SRC" \
| tee "$E/source-stat.txt"
test "$(stat -f %z "$SRC")" -eq 4294971393
test "$(stat -f %b "$SRC")" -lt 2048
unit=$(mdconfig -a -t vnode -f "$IMAGE")
mount -t erofs -o ro "/dev/$unit" "$MNT"
TARGET=$MNT/maximum/sparse-boundary.bin
stat -f 'target_size=%z target_blocks=%b blocksize=%k' "$TARGET" \
| tee "$E/target-stat.txt"
test "$(stat -f %z "$TARGET")" -eq 4294971393
: > "$E/ranges.txt"
while IFS="$(printf '\t')" read -r label offset length; do
"$G7/g7_probe" range "$SRC" "$TARGET" "$offset" "$length" \
> "$E/range-$label.txt"
rc=$?
printf 'label=%s rc=%s\n' "$label" "$rc" | tee -a "$E/ranges.txt"
cat "$E/range-$label.txt" | tee -a "$E/ranges.txt"
test "$rc" -eq 0 || exit 1
done < "$FIX/SPARSE-RANGES.tsv"
"$G7/g7_probe" eof "$TARGET" 4294971393 | tee "$E/eof.txt"
umount "$MNT"
mdconfig -d -u "${unit#md}"
test -z "$(mount -p | awk -v m="$MNT" '$2 == m { print }')"
test -z "$(mdconfig -l | tr ' ' '\n' | grep -x "$unit")"
```
## PASS Gate
- Source and mounted sizes are exactly 4294971393.
- Every listed range exits 0 with `mismatches=0`; the list covers a pure hole,
block edge, 2 GiB edge, 4 GiB edge, and final 64 bytes.
- A read at exact EOF returns 0 bytes with errno 0.
- The guest remains responsive and cleanup removes the exact mount/provider.
A range mismatch, overflow errno, panic, trap, or hang is KFAIL. Do not change
kernel source during this regression group.