88 lines
2.2 KiB
Markdown
88 lines
2.2 KiB
Markdown
# Test Case: LZ4 Compressed File Read
|
|
|
|
**Test ID**: TC003-lz4-compressed-read
|
|
|
|
**G5 fixture contract**: Use [G5-MANUAL-SETUP.md](G5-MANUAL-SETUP.md).
|
|
Its generated paths, source comparisons, structured corruption offsets, and
|
|
cleanup rules supersede placeholder examples in this file.
|
|
**Category**: Compression
|
|
**Priority**: Critical
|
|
**Regression**: None
|
|
|
|
## Objective
|
|
Verify correct decompression and reading of LZ4-compressed files.
|
|
|
|
## Preconditions
|
|
- EROFS image with LZ4-compressed files: `test-lz4.erofs`
|
|
- Known reference file: `original.txt` (uncompressed source)
|
|
- Compressed file in image: `/compressed/test.txt`
|
|
- Mount point: `/mnt/test`
|
|
|
|
## Test Steps
|
|
1. Mount the LZ4 test image:
|
|
```
|
|
mount -t erofs /dev/md0 /mnt/test
|
|
```
|
|
|
|
2. Verify file exists:
|
|
```
|
|
ls -lh /mnt/test/compressed/test.txt
|
|
```
|
|
|
|
3. Read the entire file:
|
|
```
|
|
cat /mnt/test/compressed/test.txt > /tmp/decompressed.txt
|
|
```
|
|
|
|
4. Calculate checksum:
|
|
```
|
|
sha256 /tmp/decompressed.txt
|
|
sha256 original.txt
|
|
```
|
|
|
|
5. Compare byte-for-byte:
|
|
```
|
|
cmp /tmp/decompressed.txt original.txt
|
|
```
|
|
|
|
6. Test partial read:
|
|
```
|
|
dd if=/mnt/test/compressed/test.txt of=/tmp/partial.txt bs=1024 count=1
|
|
```
|
|
|
|
7. Verify partial read matches:
|
|
```
|
|
cmp -n 1024 /tmp/partial.txt original.txt
|
|
```
|
|
|
|
## Expected Results
|
|
- Step 1: Mount succeeds
|
|
- Step 2: File size matches original uncompressed size
|
|
- Step 4: SHA256 checksums are identical
|
|
- Step 5: `cmp` returns 0 (files identical)
|
|
- Step 7: First 1024 bytes match
|
|
|
|
## Verification Method
|
|
- Exact byte-for-byte match with original file
|
|
- No corruption in decompressed data
|
|
- File attributes (size, timestamps) preserved correctly
|
|
- Check inode compression format:
|
|
```
|
|
# Using custom debug tool if available
|
|
erofs_inspect /dev/md0 /compressed/test.txt
|
|
# Should show: z_algorithmformat[0:2] = Z_EROFS_COMPRESSION_LZ4
|
|
```
|
|
|
|
## Cleanup
|
|
```
|
|
umount /mnt/test
|
|
mdconfig -d -u md0
|
|
rm /tmp/decompressed.txt /tmp/partial.txt
|
|
```
|
|
|
|
## Notes
|
|
- LZ4 is the most common compression algorithm in EROFS
|
|
- Test should cover files of various sizes: small (<4KB), medium (4KB-1MB), large (>1MB)
|
|
- LZ4 pcluster size is typically 4KB or 64KB
|
|
- Related: TC004 (ztailpacking), TC005 (pcluster mapping)
|