Test Coverage Matrix - repo22
Overview
Manual test specifications for the implemented FreeBSD EROFS paths. A listed
test case is a procedure, not proof that every environment has executed it;
dated reports under tests/results/manual/ contain execution evidence.
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
- 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 |
| 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 suite is manual-only. tests/erofs_fixture.py,
tests/prepare_error_fixtures.sh, tests/prepare_directory_fixtures.sh,
tests/read_probe.c, and tests/readdir_probe.c prepare or observe explicit
assertions; none is a TC runner. The former wrapper generators, integration
runner, partial image preparer, environment PASS printer, and result collector
were removed because their success output was not acceptance evidence.
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 |
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.