test code v1

This commit is contained in:
2026-08-13 10:44:59 +02:00
commit f3b1165f19
301 changed files with 37885 additions and 0 deletions
+63
View File
@@ -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.