305 lines
14 KiB
Markdown
305 lines
14 KiB
Markdown
# 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
|
|
1. Basic mount (TC001-TC002)
|
|
2. Core functionality (TC003-TC060)
|
|
3. Extended features (TC061-TC111)
|
|
4. Error handling (TC112-TC119)
|
|
5. Stress and NFS tests (TC120-TC133)
|
|
6. Metadata/compression completion (TC134-TC149)
|
|
7. 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
|
|
|
|
- [x] Specifications TC000-TC161 are present exactly once.
|
|
- [x] Execution checklist and result templates are present.
|
|
- [x] Dated manual reports record qualified runs and real limitations.
|
|
- [x] TC150-TC152 have final-module FreeBSD 15 evidence.
|
|
- [x] TC153 has exact-source sparse-provider FreeBSD 15 evidence.
|
|
- [x] TC154-TC156 have final-module FreeBSD 15 evidence.
|
|
- [x] TC157-TC161 have independent final-source FreeBSD 15 evidence.
|
|
- [x] Final result is 160 PASS and TC146 PARTIAL.
|
|
- [ ] Automated kernel regression/coverage infrastructure is not implemented.
|
|
- [x] Pre15 B01 runner controls and TC162 host contract are implemented.
|
|
|
|
### 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.
|