Test Coverage Matrix - repo-pre-15
Overview
Test specifications for the implemented FreeBSD EROFS paths. A listed test case
is not proof that every environment has executed it. Historical TC000-TC161
evidence remains under tests/results/manual/; Pre15 bounded runs use immutable
manifests from tests/pre15/.
Coverage Summary
- Specification IDs: TC000-TC161; TC000 is a template
- Executable results: 161 total, 160 PASS, TC146 PARTIAL
- Open kernel failures: none
- Approved gap: positive explicit mapped-payload fixture for TC146
- Pre15 test-only addition: TC162 legacy xattr prefix carrier contract
- No automated coverage percentage is claimed
Feature-to-Test Mapping
1. Mount Operations (Features 1-2)
| Feature |
Test Cases |
Coverage |
| mount / umount |
TC001, TC007, TC008 |
Normal, concurrent, with-errors |
| statfs |
TC009, TC010 |
Basic, 48-bit blocks |
2. Root & VNode (Features 3-4)
| Feature |
Test Cases |
Coverage |
| root vnode lookup |
TC011 |
Normal |
| vget |
TC012, TC013 |
Normal, invalid nid |
3. Superblock (Features 5-7)
| Feature |
Test Cases |
Coverage |
| superblock parsing |
TC014, TC015 |
Normal, corrupted |
| superblock CRC32C verification |
TC002, TC016 |
Valid, invalid |
| 48-bit block count parsing |
TC017, TC018 |
Normal, large FS |
| 48-bit root nid parsing |
TC019 |
Normal |
4. Inode Formats (Features 8-15)
| Feature |
Test Cases |
Coverage |
| compact inode decoding |
TC020, TC021, TC022 |
Basic, flag-based nlink=1, Linux dev decode |
| extended inode decoding |
TC023, TC024 |
Normal, large file |
| compact inode link-count handling |
TC025 |
Flagged single link, explicit hard links, directories |
| dot_omitted handling |
TC026, TC027 |
With/without |
| uncompressed FLAT_PLAIN read |
TC028, TC029, TC030 |
Small, medium, large |
| uncompressed FLAT_INLINE read |
TC031, TC032 |
Normal, zero-length |
| inline tailpacking read |
TC033, TC034, TC147 |
Normal, boundary, metadata-block/image bounds |
5. File Operations (Features 16-18)
| Feature |
Test Cases |
Coverage |
| regular file read |
TC035, TC036, TC037 |
Sequential, random, large |
| symlink read |
TC038, TC039, TC040 |
Short, long, broken |
| directory entry decoding |
TC041, TC042, TC141, TC148 |
Normal, large, shared validator, Linux tail padding |
6. Directory Operations (Features 19-22)
| Feature |
Test Cases |
Coverage |
| lookup |
TC043, TC044, TC045 |
Found, not-found, case |
| readdir |
TC046, TC047, TC048, TC160 |
Basic, large, restart cookies, OFF_MAX corruption |
| . handling |
TC049 |
Dot entry |
| .. handling |
TC050 |
Dotdot entry |
7. VFS Integration (Features 23-28)
| Feature |
Test Cases |
Coverage |
| namecache integration |
TC051, TC052 |
Hit, miss |
| vfs_hash integration |
TC053 |
Normal |
| vn_vget_ino integration |
TC054 |
Normal |
| getattr |
TC055, TC056, TC158 |
Compressed 48-bit allocation, generation, decoded special rdev |
| access |
TC057, TC058 |
Allowed, denied |
| readlink |
TC059 |
Normal |
| pathconf |
TC060 |
All queries |
8. Read-Only (Features 29)
| Feature |
Test Cases |
Coverage |
| read-only setattr rejection |
TC061, TC062, TC063, TC159 |
chmod, chown, write, combined special-vnode attributes |
9. VM Integration (Features 30-31)
| Feature |
Test Cases |
Coverage |
| FreeBSD local vnode pager |
TC064, TC065, TC149 |
Sync/async ABI, real randomized mmap faults |
| explicit vop_bmap unsupported |
TC066, TC149 |
Local pager fallback without strategy assumptions |
10. Extended Attributes - Shared (Features 32-36)
| Feature |
Test Cases |
Coverage |
| shared user.* xattr scan |
TC067, TC068 |
Found, not-found |
| shared user.* xattr list |
TC069 |
Multiple |
| shared trusted.* xattr get |
TC070 |
Normal |
| shared security.* xattr get |
TC071 |
Normal |
| shared system xattr list |
TC072 |
Normal |
11. Extended Attributes - Container (Features 37-40)
| Feature |
Test Cases |
Coverage |
| shared-ea-in-metabox container |
TC073 |
Normal |
| inline user.* xattr |
TC005, TC074 |
Normal, multiple |
| inline trusted.* xattr |
TC075 |
Normal |
| inline security.* xattr |
TC076 |
Normal |
12. Extended Attributes - Advanced (Features 41-46)
| Feature |
Test Cases |
Coverage |
| long-prefix user.* xattr |
TC077 |
Long name |
| long-prefix trusted.* xattr |
TC078 |
Long name |
| packed prefix table |
TC079, TC080 |
Normal, lookup |
| legacy prefix primary fallback |
TC162 |
Checksum-valid legacy/plain/packed/metabox and exact negatives |
| metabox-backed shared xattr |
TC081 |
Normal |
| system namespace xattr subset |
TC082 |
Specific attrs |
| user namespace xattr subset |
TC083 |
Filtering |
13. Compression - LZ4 (Features 47-51)
| Feature |
Test Cases |
Coverage |
| LZ4 compression support |
TC003, TC084, TC085 |
Small, large, corrupt |
| LZ4 compressed data path |
TC086, TC087 |
Full source compare, deterministic offset compares |
| LZ4 compression config handling |
TC088 |
Different configs |
| LZ4 compressed pcluster mapping |
TC089, TC090 |
4KB, 64KB |
| ztailpacking data path |
TC091, TC092 |
Normal, edge |
14. Chunk-Based (Features 52-53)
| Feature |
Test Cases |
Coverage |
| chunk-based inode data path |
TC093, TC094 |
Single-dev, multi-dev |
| chunk index read path |
TC095 |
Normal |
15. Multi-Device (Features 54-57)
| Feature |
Test Cases |
Coverage |
| device table support |
TC096, TC097 |
Parse, invalid |
| fragments support |
TC098 |
Normal |
| multi-device support |
TC006, TC099, TC100 |
2-dev, 4-dev, errors |
| unified address to device mapping |
TC101 |
All devices |
16. Compression - DEFLATE/zstd (Features 58-59)
| Feature |
Test Cases |
Coverage |
| DEFLATE compressed data path |
TC102, TC103, TC104 |
Level 1 full/range compare, levels 6 and 9 |
| zstd compressed data path |
TC105, TC106, TC107 |
Level 1, 15, 22 |
17. Compression - LZMA (Feature 60)
| Feature |
Test Cases |
Coverage |
| LZMA/MicroLZMA compressed data path |
TC004, TC108, TC109, TC110 |
Normal, large, micro, corrupt |
18. Documentation (Feature 61)
| Feature |
Test Cases |
Coverage |
| manual pages |
TC111 |
Accuracy check |
19. Error Handling (Additional Paths)
| Scenario |
Test Cases |
Coverage |
| Invalid superblock magic |
TC112 |
Mount failure |
| Corrupted inode |
TC113 |
Read error |
| Out-of-bounds block |
TC114 |
Access error |
| Unsupported algorithm |
TC115 |
EOPNOTSUPP |
| Targeted compressed-stream corruption |
TC116 |
Equal provider length, proven extent, EIO |
| Invalid xattr format |
TC117 |
Parse error |
| Device not found |
TC118 |
Multi-dev error |
| Uncompressed payload integrity boundary |
TC119 |
No per-file CRC; source hash detects mutation |
20. Boundary & Stress (Additional Paths)
| Scenario |
Test Cases |
Coverage |
| Empty file read |
TC120 |
Zero-length |
| Maximum file size |
TC121 |
16TB limit |
| Deep directory tree |
TC122 |
100+ levels |
| Long filename |
TC123 |
255 chars |
| Many small files |
TC124 |
10000+ files |
| Large directory |
TC125 |
10000+ entries |
| Concurrent reads |
TC126 |
Multi-threaded |
| Memory pressure |
TC127 |
Low memory |
| Sequential throughput |
TC128 |
Performance |
| Random read pattern |
TC129 |
Performance |
| Mixed workload |
TC130 |
Realistic |
Execution Path Coverage
Normal Paths (Green)
The matrix maps implemented paths to manual procedures. See dated reports for
the subset actually executed on a given FreeBSD 15 environment.
Error Paths (Red)
- Mount errors: TC007, TC008, TC112
- Read errors: TC113, TC114, TC116
- Lookup errors: TC044, TC117
- Permission errors: TC061-TC063
- Device errors: TC097, TC118
- Compression errors: TC085, TC104, TC110, TC116
- CRC errors: TC002, TC016
- End-to-end payload authenticity boundary: TC119
Boundary Conditions (Yellow)
- Zero-length: TC032, TC120
- Maximum size: TC018, TC121
- Deep nesting: TC122
- Long names: TC077, TC078, TC123
- Large collections: TC042, TC048, TC124, TC125
- Edge alignments: TC034, TC090, TC092
- Inline metadata block: TC147
- Directory tail padding: TC148
- VM EOF/private mapping: TC149
- 48-bit fallback superblock union: TC150
- Extended inode
OFF_MAX rejection: TC151
- Multi-GiB compressed extent holes: TC152
- Directory block indexes above
INT_MAX: TC153
- Explicit extent global order: TC157
- Extended compressed allocation high bits: TC158
- Combined special-vnode setattr: TC159
- Dot-omitted
OFF_MAX cookie: TC160
- Build-tool failure propagation: TC161
Test Execution Order
- Basic mount (TC001-TC002)
- Core functionality (TC003-TC060)
- Extended features (TC061-TC111)
- Error handling (TC112-TC119)
- Stress and NFS tests (TC120-TC133)
- Metadata/compression completion (TC134-TC149)
- Final correctness findings and build qualification (TC150-TC161)
Coverage Metrics
No line, branch, path, or feature percentage is asserted. The repository does
not contain an instrumented kernel coverage run or CI harness.
The historical TC000-TC161 suite remains procedure-driven.
tests/pre15/run-host.sh, run-build.sh, run-qemu.sh, and run-smoke.sh
provide the bounded Pre15 adapter. They discover exact case files, preserve raw
stdout/stderr and hashes, separate DUT/runner/infrastructure failures, and make
cleanup success part of PASS. This does not claim full-suite automation.
Test Case Status
21. Compression P0 Completion
| Feature |
Test Cases |
Coverage |
| fragment-backed compressed metabox |
TC142 |
Positive, loop, recursive NID, bounds |
| DEFLATE/ZSTD partial reference |
TC143 |
Full, partial, random, corrupt |
| MicroLZMA completion semantics |
TC144 |
Input consumption, partial, corrupt |
| FreeBSD ZSTDIO build gate |
TC145 |
Disabled/enabled build and KLD |
| HEAD2/interlaced/extent mapping |
TC146 |
HEAD2/interlaced PASS; explicit mapped payload PARTIAL |
22. Metadata and VFS Semantics
| Feature |
Test Cases |
Coverage |
| FLAT_INLINE metadata-block and declared bounds |
TC147 |
Positive and checksum-valid cross-block corruption |
| Linux-compatible directory tail padding |
TC141, TC148 |
Cold lookup, readdir, cookies, strict corruptions |
| Real FreeBSD vnode pager faults |
TC064-TC066, TC149 |
Plain/LZ4, random faults, EOF, SIGBUS, private COW |
| Linux special-device decode |
TC022, TC056 |
Compact/extended char, block, FIFO st_rdev |
| Real compressed allocation accounting |
TC055, TC158 |
Algorithms/shapes and extended 48-bit block count |
| Stable per-inode NFS generation |
TC132, TC154 |
Stable metadata; changed inode metadata makes old handles stale |
| NFS background exit and cleanup |
TC133 |
Per-PID waits, fd inheritance guard, client-first cleanup |
23. Final Correctness Findings
| Feature |
Test Cases |
Coverage |
| Linux-compatible 48-bit superblock union fallback |
TC017, TC019, TC150 |
rootnid_8b == 0 selects rootnid_2b and low blocks |
| Extended inode signed-size boundary |
TC151 |
Bit-63 i_size fails before pager setup |
| Bounded compressed extent holes |
TC152 |
5 GiB hole, one-byte pread and one-page mmap |
| 64-bit directory block search |
TC153 |
Multi-TiB Layout 0 provider returned repeated EINTEGRITY |
24. Review Fixes
| Feature |
Test Cases |
Coverage |
| Per-inode NFS replacement detection |
TC154 |
Same superblock, UUID, NID and content; changed raw inode |
| Explicit extent physical-address checked add |
TC155 |
Four-byte records with pa + plen overflow |
| Inode timestamp range validation |
TC156 |
Compact epoch overflow, signed time_t, compact/extended nanoseconds |
25. Independent Final Review
| Feature |
Test Cases |
Coverage |
| Explicit table global ordering |
TC157 |
16/32-byte descending, duplicate, cross-branch rejection |
Extended compressed blocks_hi |
TC158 |
Direct/file-handle allocation and FBT va_bytes |
| Special-vnode setattr combinations |
TC159 |
Size-only no-op and combined mutation rejection |
Dot-omitted OFF_MAX cookie |
TC160 |
Both initial offsets return EINTEGRITY without advancement |
Fatal nm failure |
TC161 |
Publication preservation, temp cleanup, post-shim rebuild |
26. Pre15 Test Foundation
| Feature |
Test Cases |
Coverage |
| G3 stable fixture migration |
B01-g3-equivalence |
Archived hash, canonical inventory, byte hash, expectation, repeat generation |
| Runner failure separation |
B01-runner-selftest |
Good, DUT mismatch, pre-target failure, SSH, QEMU exit, timeout, cleanup |
| Legacy xattr prefix fallback |
TC162 |
Primary legacy, explicit plain, packed, metabox, exact EINTEGRITY negatives |
Latest final-review results are recorded in
tests/results/manual/2026-08-09T1804Z-final-review-independent/manual-test-report.md.
TC010, TC060, and TC153 are resolved historical issues. The only approved
remaining gap is TC146's positive explicit mapped-payload fixture.