You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Options Test Plan
Possible integration and unit tests for options listed in mkdocs/docs/config/options.md.
Legend:
- Integration: mount-level behavior test (black-box, syscall parity / side effects)
- Unit: focused parser/config/logic test (white-box or low-level component)
Core mount and branch options
| Option |
Integration tests |
Unit tests |
config |
Load same settings via CLI vs config file and compare behavior |
Parse comments, key, key=val, unknown keys, duplicate keys ordering |
branches |
Multi-branch create/search/action behavior; glob expansion; dynamic branch updates |
Branch string parser ops (+, +<, +>, -, ->, -<, =), mode parse, minfreespace parse |
mountpoint |
Verify mount succeeds/fails with valid/invalid mountpoint |
Config validation for mountpoint path |
branches-mount-timeout |
Delayed branch mount appears before timeout -> starts; after timeout -> continue/fail based on flag |
Timeout arithmetic and mount-detection helper logic |
branches-mount-timeout-fail |
Timeout expiration returns non-zero when true |
Boolean parse and gating of startup continuation |
minfreespace |
Create policy excludes near-full branches |
Size parser (B/K/M/G/T, overflow, bad suffix) |
moveonenospc |
ENOSPC write triggers move+retry and preserves metadata |
Policy dispatch and error mapping (ENOSPC/EDQUOT) |
inodecalc |
Stable inode expectations per mode on files/dirs/hardlinks |
Hash function determinism and 32-bit/64-bit variants |
IO behavior options
| Option |
Integration tests |
Unit tests |
dropcacheonclose |
Close after write/read and confirm no correctness regression |
posix_fadvise call path invoked only when enabled |
direct-io-allow-mmap |
O_DIRECT + mmap behavior on supported kernels |
Feature flag gating by kernel capability |
nullrw |
Writes report success but data unchanged; reads become no-op behavior |
Read/write null path selection |
readahead |
Sequential read throughput/request size changes with non-zero setting |
Parser and branch-level readahead setter behavior |
async-read |
Concurrent read ordering/parallelism differs when toggled |
FUSE config flag toggling |
fuse-msg-size |
Large IO request chunking and throughput with different values |
Pagesize conversion parser and min/max clamping |
flush-on-close |
never/always/opened-for-write close semantics |
Mode enum parse and branching logic |
proxy-ioprio |
Different caller ioprio reflected in IO scheduling side-effects |
ioprio fetch/apply path and fallback behavior |
parallel-direct-writes |
Parallel non-extending writes behavior with/without option |
Kernel capability gating |
passthrough.io |
off/ro/wo/rw path selection for reads/writes and incompatibility checks |
Enum parse, compatibility checks (cache.writeback, nullrw, etc.) |
passthrough.max-stack-depth |
Stacked FS scenarios with depth 1 vs 2 |
Range validation and config propagation |
Path transformation and cross-device options
| Option |
Integration tests |
Unit tests |
symlinkify |
Old non-writable files appear as symlinks after timeout |
Eligibility predicate (mode, age, type) |
symlinkify-timeout |
Boundary test around exact timeout second |
Timeout comparison helper |
ignorepponrename |
Rename behavior with and without path preservation |
Rename policy selection logic |
follow-symlinks |
never/directory/regular/all on symlink to file/dir/broken link |
Enum parse and target-type dispatch |
link-exdev |
EXDEV hardlink fallback modes: passthrough/rel/abs-base/abs-pool |
Strategy selection and symlink target synthesis |
rename-exdev |
EXDEV rename fallback modes: passthrough/rel/abs |
Fallback path generation and state machine |
link-cow |
Hardlinked file opened for write breaks link and writes private copy |
Link-count check and copy-on-write trigger logic |
Permission and metadata options
| Option |
Integration tests |
Unit tests |
export-support |
NFS-export style behavior sanity and mount flags exposure |
Init-time flag propagation |
kernel-permissions-check |
Access/permission checks handled by kernel vs userspace path |
Mount option mapping (default_permissions) |
security-capability |
security.capability xattr returns ENOATTR when disabled |
Name filter helper |
xattr |
passthrough/noattr/nosys behavior for set/get/list/remove xattr |
Enum parse and short-circuit return paths |
statfs |
base vs full branch inclusion by path |
Mode parse and branch-filter helper |
statfs-ignore |
none/ro/nc effect on available space accounting |
Ignore predicate and accumulator logic |
nfsopenhack |
File create/open mode behavior under NFS-like patterns |
Enum parse and hook decision logic |
posix-acl |
ACL xattr roundtrip and chmod/chown interaction when enabled |
Mount/init flag propagation |
Threading and scheduling options
| Option |
Integration tests |
Unit tests |
read-thread-count |
Throughput/latency and correctness under different values |
Value normalization (0, negatives, min=1) |
process-thread-count |
Separation of read/process pools and queue pressure behavior |
Pool enable/disable logic |
process-thread-queue-depth |
Backpressure behavior with depth changes |
Queue sizing and timeout/try-enqueue semantics |
pin-threads |
Thread CPU affinity placement for each strategy |
Strategy parser and CPU selection algorithm |
scheduling-priority |
Process nice value set at startup and effective scheduling |
Range validation and setpriority wrapper |
Function/category policy options
| Option |
Integration tests |
Unit tests |
func.FUNC |
Override a single function policy and verify only that op changes |
Parser mapping from key to policy holder |
func.readdir |
seq/cosr/cor ordering, latency, duplicate suppression, thread count parsing |
Mode parser (cosr:N:M, cor:N:M) |
category.action |
Bulk action policy changes for chmod/chown/rename/unlink |
Category-to-function propagation |
category.create |
Create policy effects on create/mkdir/mknod/link/symlink |
Category propagation and precedence |
category.search |
Search policy effects on getattr/open/readlink/getxattr |
Category propagation and precedence |
| Option ordering note |
Later options override earlier (func.* then category.* etc.) |
Deterministic application order test |
Cache options
| Option |
Integration tests |
Unit tests |
cache.statfs |
Repeated statfs calls use cache within timeout |
Timeout cache invalidation behavior |
cache.attr |
Repeated getattr freshness across timeout boundaries |
Attr cache key and expiry logic |
cache.entry |
Name lookup caching for existing entries |
Entry cache insertion/expiry |
cache.negative-entry |
Missing entry lookup caching and stale-negative behavior |
Negative cache behavior |
cache.files |
off/partial/full/auto-full/per-process correctness and coherence |
Enum parse and mode decision helper |
cache.files.process-names |
Per-process cache activation by comm name |
List parser and matcher |
cache.writeback |
Coalesced write behavior; incompatibility handling with passthrough |
Flag validation and FUSE config setup |
cache.symlinks |
Readlink repeated calls reflect cache policy |
Feature gating by kernel support |
cache.readdir |
Readdir repeated calls and invalidation behavior |
Feature gating and config wiring |
Misc options
| Option |
Integration tests |
Unit tests |
lazy-umount-mountpoint |
Live-upgrade remount scenario with stale previous mount |
Startup control flow and error handling |
remember-nodes |
NFS-like lookup stability over configured retention interval |
Node cache retention/expiry logic |
noforget |
No node expiry over extended period |
Infinite retention mode mapping |
allow-idmap |
UID/GID mapping behavior in idmapped mounts |
Init flag propagation and compatibility checks |
debug |
FUSE trace generation enabled/disabled |
Debug option parse and logger toggling |
log.file |
Trace output to stderr vs file path |
Path parser and file sink setup |
fsname |
Filesystem name shown in mount/df matches config |
fsname default derivation and override |
Prioritized backlog (recommended first)
xattr mode tests (passthrough/noattr/nosys) + regression for current xattr mismatch
statfs / statfs-ignore mode matrix
- EXDEV fallbacks (
link-exdev, rename-exdev)
follow-symlinks + symlinkify behavior matrix
- Policy precedence (
func.*, category.*, ordering)
- Cache timeout behavior (
cache.attr, cache.entry, cache.negative-entry, cache.statfs)