test code v1
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
# Test Case: Corrupted Superblock Fields
|
||||
|
||||
**Test ID**: TC015-superblock-corrupted
|
||||
**Category**: Error Handling
|
||||
**Priority**: High
|
||||
|
||||
## Objective
|
||||
|
||||
Verify ordered rejection of an unsupported block size, an image-bounds-invalid
|
||||
48-bit root NID, and an unknown incompat feature. Every variant preserves
|
||||
provider length and carries a checksum valid for its encoded fields.
|
||||
|
||||
## Fixture Qualification
|
||||
|
||||
```sh
|
||||
work=$(mktemp -d /tmp/repo22-tc015.XXXXXX)
|
||||
tests/prepare_error_fixtures.sh "$work/fixtures"
|
||||
grep -E '^(bad-block-size|bad-root-nid|unsupported-feature) ' \
|
||||
"$work/fixtures/fixture-evidence.txt"
|
||||
python3 tests/erofs_fixture.py inspect "$work/fixtures/bad-block-size.erofs"
|
||||
python3 tests/erofs_fixture.py inspect "$work/fixtures/bad-root-nid.erofs"
|
||||
python3 tests/erofs_fixture.py inspect "$work/fixtures/unsupported-feature.erofs"
|
||||
(cd "$work/fixtures" && sha256 -c SHA256SUMS)
|
||||
```
|
||||
|
||||
`bad-block-size` changes `blkszbits` at 1036 from 12 to 13 and recomputes the
|
||||
checksum over `[1024,8192)`. `bad-root-nid` selects the 48-bit union form and
|
||||
sets `rootnid_8b` beyond the declared inode area. `unsupported-feature` sets
|
||||
unknown incompat bit `0x80000000`.
|
||||
|
||||
## FreeBSD Procedure
|
||||
|
||||
For each image, attach a dynamic vnode md unit, run mount directly and under
|
||||
`truss`, assert nonzero status and no mount entry, then detach that exact unit.
|
||||
|
||||
```sh
|
||||
mkdir "$work/mnt"
|
||||
for image in bad-block-size.erofs bad-root-nid.erofs unsupported-feature.erofs
|
||||
do
|
||||
unit=$(mdconfig -a -t vnode -f "$work/fixtures/$image")
|
||||
set +e
|
||||
mount -t erofs -o ro "/dev/$unit" "$work/mnt" \
|
||||
>"$work/$image.out" 2>"$work/$image.err"
|
||||
status=$?
|
||||
set -e
|
||||
printf '%s status=%s\n' "$image" "$status"
|
||||
test "$status" -ne 0
|
||||
set +e
|
||||
truss -o "$work/$image.truss" mount -t erofs -o ro "/dev/$unit" \
|
||||
"$work/mnt" >/dev/null 2>&1
|
||||
set -e
|
||||
grep -E 'nmount.*ERR#' "$work/$image.truss"
|
||||
! mount -p | awk -v path="$work/mnt" '$2 == path { found=1 }
|
||||
END { exit found ? 0 : 1 }'
|
||||
mdconfig -d -u "${unit#md}"
|
||||
done
|
||||
```
|
||||
|
||||
## Expected Results
|
||||
|
||||
Bad block size returns `EINVAL`, bad root NID returns `EINTEGRITY`, and the
|
||||
unknown incompat bit returns `EOPNOTSUPP`. Record syscall errno, image hash,
|
||||
provider length, new dmesg lines, and cleanup for all three subcases.
|
||||
Reference in New Issue
Block a user