test code v1
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
# Test Case: Superblock CRC32C Validation
|
||||
|
||||
**Test ID**: TC002-superblock-crc32c
|
||||
**Category**: Filesystem Metadata
|
||||
**Priority**: Critical
|
||||
|
||||
## Objective
|
||||
|
||||
Verify the real EROFS superblock checksum field and both equivalent checksum
|
||||
ranges, then prove that a valid image mounts while an equal-length image with
|
||||
one covered byte changed and no checksum update is rejected.
|
||||
|
||||
## Fixture Qualification
|
||||
|
||||
Run from the repo22 root with erofs-utils 1.8.6:
|
||||
|
||||
```sh
|
||||
work=$(mktemp -d /tmp/repo22-tc002.XXXXXX)
|
||||
tests/prepare_error_fixtures.sh "$work/fixtures"
|
||||
python3 tests/erofs_fixture.py inspect "$work/fixtures/valid-plain.erofs"
|
||||
python3 tests/erofs_fixture.py inspect "$work/fixtures/bad-super-crc.erofs"
|
||||
grep '^bad-super-crc ' "$work/fixtures/fixture-evidence.txt"
|
||||
(cd "$work/fixtures" && sha256 -c SHA256SUMS)
|
||||
```
|
||||
|
||||
For a 4096-byte block, the canonical calculation clears the little-endian
|
||||
checksum at absolute byte 1028 and calculates CRC32C over bytes `[1024,4096)`
|
||||
with initial value `0xffffffff`. The production verifier uses seed
|
||||
`0x5045b54a` over `[1032,4096)`. The helper must print identical canonical and
|
||||
kernel values, `equivalent=True`, and `valid=True` for the control. The bad
|
||||
image changes byte 1088, preserves provider length, does not recompute CRC, and
|
||||
must print `valid=False`.
|
||||
|
||||
## FreeBSD Procedure
|
||||
|
||||
```sh
|
||||
mkdir "$work/mnt"
|
||||
unit=$(mdconfig -a -t vnode -f "$work/fixtures/valid-plain.erofs")
|
||||
mount -t erofs -o ro "/dev/$unit" "$work/mnt"
|
||||
cmp "$work/fixtures/source/control.txt" "$work/mnt/control.txt"
|
||||
umount "$work/mnt"
|
||||
mdconfig -d -u "${unit#md}"
|
||||
|
||||
unit=$(mdconfig -a -t vnode -f "$work/fixtures/bad-super-crc.erofs")
|
||||
set +e
|
||||
mount -t erofs -o ro "/dev/$unit" "$work/mnt" \
|
||||
>"$work/bad-mount.out" 2>"$work/bad-mount.err"
|
||||
mount_status=$?
|
||||
set -e
|
||||
printf 'mount_status=%s\n' "$mount_status"
|
||||
test "$mount_status" -ne 0
|
||||
set +e
|
||||
truss -o "$work/bad-mount.truss" mount -t erofs -o ro "/dev/$unit" \
|
||||
"$work/mnt" >/dev/null 2>&1
|
||||
set -e
|
||||
grep -E 'nmount.*ERR#97' "$work/bad-mount.truss"
|
||||
! mount -p | awk -v path="$work/mnt" '$2 == path { found=1 }
|
||||
END { exit found ? 0 : 1 }'
|
||||
mdconfig -d -u "${unit#md}"
|
||||
```
|
||||
|
||||
## Expected Results
|
||||
|
||||
The control mounts and reads exactly. The bad image fails with FreeBSD errno
|
||||
97 (`EINTEGRITY`) and no mount remains. Record both image hashes, provider
|
||||
lengths, checksum values/ranges, command status, new dmesg lines, and cleanup.
|
||||
Reference in New Issue
Block a user