65 lines
2.2 KiB
Markdown
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.
|