# 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)
