65 lines
2.1 KiB
Markdown
65 lines
2.1 KiB
Markdown
# Test Case: Large Directory
|
|
|
|
**Test ID**: TC125-large-directory
|
|
**Category**: Boundary & Stress
|
|
**Priority**: High
|
|
**Regression**: None
|
|
|
|
## Objective
|
|
|
|
Verify exact readdir and lookup behavior for one directory containing 12,000
|
|
direct child files. Record scan timing without a cross-machine time gate.
|
|
|
|
## Preconditions
|
|
|
|
- Complete `G7-MANUAL-SETUP.md` and verify the source inventory.
|
|
|
|
## Manual Steps
|
|
|
|
```sh
|
|
G7=/root/repo22-g7
|
|
FIX=$G7/fixtures
|
|
SRCROOT=$FIX/sources/boundaries
|
|
IMAGE=$FIX/images/boundaries.erofs
|
|
MNT=/mnt/repo22-g7-tc125
|
|
E=$G7/evidence/TC125
|
|
mkdir -p "$MNT" "$E"
|
|
unit=$(mdconfig -a -t vnode -f "$IMAGE")
|
|
mount -t erofs -o ro "/dev/$unit" "$MNT"
|
|
(cd "$SRCROOT" && find large-dir -type f -print | sort) > "$E/source.names"
|
|
/usr/bin/time -p sh -c \
|
|
'cd "$1" && find large-dir -type f -print | sort > "$2"' \
|
|
sh "$MNT" "$E/target.names" 2> "$E/readdir.time"
|
|
cat "$E/readdir.time"
|
|
source_count=$(wc -l < "$E/source.names" | tr -d ' ')
|
|
target_count=$(wc -l < "$E/target.names" | tr -d ' ')
|
|
printf 'source_count=%s\ntarget_count=%s\n' "$source_count" "$target_count" \
|
|
| tee "$E/counts.txt"
|
|
test "$source_count" -eq 12000
|
|
test "$target_count" -eq 12000
|
|
cmp "$E/source.names" "$E/target.names"
|
|
for name in entry-00000.txt entry-00001.txt entry-05999.txt \
|
|
entry-11998.txt entry-11999.txt; do
|
|
cmp "$SRCROOT/large-dir/$name" "$MNT/large-dir/$name"
|
|
printf '%s source=%s target=%s\n' "$name" \
|
|
"$(sha256 -q "$SRCROOT/large-dir/$name")" \
|
|
"$(sha256 -q "$MNT/large-dir/$name")"
|
|
done | tee "$E/lookups.txt"
|
|
(cd "$SRCROOT" && find large-dir -type f -exec sha256sum {} + | sort) \
|
|
> "$E/source.hashes"
|
|
(cd "$MNT" && find large-dir -type f -exec sha256sum {} + | sort) \
|
|
> "$E/target.hashes"
|
|
cmp "$E/source.hashes" "$E/target.hashes"
|
|
umount "$MNT"
|
|
mdconfig -d -u "${unit#md}"
|
|
test -z "$(mount -p | awk -v m="$MNT" '$2 == m { print }')"
|
|
test -z "$(mdconfig -l | tr ' ' '\n' | grep -x "$unit")"
|
|
```
|
|
|
|
## PASS Gate
|
|
|
|
- Exact sorted names and all 12,000 source/mount hashes match.
|
|
- The five boundary/middle lookups match their sources.
|
|
- Readdir timing is recorded but has no fixed TCG or cross-machine limit.
|
|
- No readdir error, panic, hang, or cleanup leak occurs.
|