2.9 KiB
2.9 KiB
Test Case: LZMA Compressed File Read
Test ID: TC004-lzma-compressed-read
G5 fixture contract: Use G5-MANUAL-SETUP.md.
Its generated paths, source comparisons, structured corruption offsets, and
cleanup rules supersede placeholder examples in this file.
Category: Compression
Priority: High
Regression: None
Objective
Verify correct decompression and reading of LZMA/MicroLZMA-compressed files (newly implemented in repo18 iteration 1).
Preconditions
- EROFS image with LZMA-compressed files:
test-lzma.erofs - Known reference file:
original-large.txt(uncompressed source) - Compressed file in image:
/compressed/large.txt - Mount point:
/mnt/test
Test Steps
-
Mount the LZMA test image:
unit=$(mdconfig -a -t vnode -f test-lzma.erofs) mount -t erofs -o ro /dev/${unit} /mnt/test -
Verify file exists and check size:
ls -lh /mnt/test/compressed/large.txt stat -f "Size: %z bytes" /mnt/test/compressed/large.txt -
Read entire compressed file:
cat /mnt/test/compressed/large.txt > /tmp/lzma-decompressed.txt -
Verify decompression correctness:
sha256 /tmp/lzma-decompressed.txt sha256 original-large.txt -
Compare byte-for-byte:
cmp /tmp/lzma-decompressed.txt original-large.txt echo $? -
Test random access read:
dd if=/mnt/test/compressed/large.txt of=/tmp/lzma-middle.txt bs=1k skip=100 count=10 dd if=original-large.txt of=/tmp/orig-middle.txt bs=1k skip=100 count=10 cmp /tmp/lzma-middle.txt /tmp/orig-middle.txt -
Test end-of-file read:
tail -c 1000 /mnt/test/compressed/large.txt > /tmp/lzma-tail.txt tail -c 1000 original-large.txt > /tmp/orig-tail.txt cmp /tmp/lzma-tail.txt /tmp/orig-tail.txt
Expected Results
- Step 1: Mount succeeds
- Step 2: File size matches original uncompressed size exactly
- Step 4: SHA256 checksums are identical
- Step 5: Exit code 0 (files identical)
- Step 6: Middle section matches (random access works)
- Step 7: Tail matches (EOF handling correct)
Verification Method
- Complete data integrity check via SHA256
- Partial read correctness (random access)
- No memory corruption or crashes during decompression
- Verify LZMA decoder internal state:
- 1846 probability models initialized
- Range decoder normalization correct
- Dictionary buffer within bounds
Cleanup
umount /mnt/test
mdconfig -d -u "${unit}"
rm /tmp/lzma-*.txt /tmp/orig-*.txt
Notes
- NEW in repo18: This is the first iteration with LZMA support
- LZMA provides maximum compression ratio (~30-50% smaller than LZ4)
- MicroLZMA is a variant without header, commonly used in EROFS
- Self-contained implementation in
src/decompressor_lzma.c - Reference implementation: XZ Embedded minimal decoder
- Critical test for repo18 iteration 1 validation
- Regression marker: First LZMA implementation, high priority for validation