Files
hfsutils/test/README.md
T
Pablo Lezaeta Reyes 02d1f76a83 Fix HFS/HFS+ specification conformance and reorganize project
## Specification Conformance Fixes

### Alternate Header Location (Critical Bug Fix)
- Fixed alternate MDB/VH location for both HFS and HFS+
- Changed from (total_sectors - 1) * sector_size to device_size - 1024
- Conforms to Apple TN1150: '1024 bytes before the end of the volume'
- Files: src/mkfs/mkfs_hfs_format.c

### HFS+ Volume Header Field Alignment
- Added missing rsrcClumpSize field (offset +56, 4 bytes)
- Added missing dataClumpSize field (offset +60, 4 bytes)
- Fixed nextCatalogID placement (now correctly at offset +64)
- Set nextCatalogID initial value to 16 (kHFSFirstUserCatalogNodeID)
- Files: src/mkfs/mkfs_hfs_format.c

### HFS+ Volume Attributes
- Set kHFSVolumeUnmountedBit (0x0100) in attributes field
- Changed from 0x00000000 to 0x00000100 per TN1150 spec
- Files: src/mkfs/mkfs_hfs_format.c

## Documentation

### New Technical Documentation (./doc/)
- TN1150_HFS_PLUS_VOLUME_FORMAT.md: Apple official HFS+ spec
- HFS_CLASSIC_SPECIFICATION.md: Complete HFS Classic spec
- WIKIPEDIA_HFS_PLUS.md: Wikipedia HFS+ reference
- HFS_IMPLEMENTATION_NOTES.md: Practical implementation guide
- DEVELOPMENT_HISTORY.md: Project evolution and lessons learned
- README.md: Documentation index with quick reference

Total: 6 technical documents, 65.9 KB offline reference

## Project Reorganization

### Consolidated Documentation
- Removed 9 scattered summary .md files from root
- Consolidated into doc/DEVELOPMENT_HISTORY.md
- Files removed: BUILD_SYSTEM_SUMMARY.md, DEPENDENCY_RESOLUTION_SUMMARY.md,
  EMBEDDED_REORGANIZATION_SUMMARY.md, HFS_PLUS_IMPLEMENTATION_SUMMARY.md,
  TASK_3.4_COMPLETION_SUMMARY.md, MKFS_TEST_RESULTS.md, CORRECCION.md,
  ENTREGABLES.md, RESUMEN_FINAL.md

### Organized Test Scripts
- Moved 7 test scripts from root to test/
- Scripts: test_fsck_enhanced.sh, test_hcopy_manual*.sh,
  test_hfs_integrity.sh, test_hfs_spec_validation.sh,
  test_recursive_integrity.sh, test_spec_conformance.sh

### Updated .gitignore
- Added temporary log files (build_output.log, test_output.txt, etc.)
- Added generated configuration files (Makefiles, config.h, os.c)
- Added IDE directories (.vs/)
- Added consolidated documentation patterns (*_SUMMARY.md)

## Updated Files
- README.md: Links to new documentation, updated limitations
- TODO: Current status (November 2025), recent achievements
- PROJECT_STRUCTURE.md: Updated directory structure documentation
- test/README.md: Updated test organization

## Impact
- Specification-compliant HFS/HFS+ volume creation
- Clean, navigable project structure (24 root files vs ~40)
- Comprehensive offline technical documentation
- All tests organized in test/ directory

Resolves: Specification conformance issues
Related: Apple TN1150, HFS/HFS+ standards compliance
2025-11-11 01:59:09 -03:00

144 lines
4.8 KiB
Markdown

# HFS Utilities Test Suite
Comprehensive testing framework for Apple Silicon HFS utilities.
## Quick Start
```bash
# Generate test data (HFS images and sample files)
./generate_test_data.sh
# Run all tests
./run_tests.sh
# Run specific test categories
./run_tests.sh basic # Basic functionality tests
./run_tests.sh integration # Integration workflow tests
./run_tests.sh errors # Error handling tests
# Run feature-specific tests
./test_hcopy_directory.sh # Test hcopy recursive directory copying
# Simple integration demonstration
./simple_integration_test.sh
```
## Test Structure
### 1. Test Data Generator (`generate_test_data.sh`)
Creates various HFS and HFS+ images and sample files for testing:
- **Small images** (1.44MB): Basic testing with simple file structure (HFS and HFS+)
- **Medium images** (10MB): More complex directory hierarchies (HFS and HFS+)
- **Large images** (50MB): Stress testing with many files (HFS and HFS+)
- **Empty images**: Testing empty volume operations (HFS and HFS+)
- **Corrupted image**: Error handling tests
### 2. Main Test Runner (`run_tests.sh`)
Comprehensive test harness with multiple test categories:
#### Basic Functionality Tests
- Utility existence checks
- Help/version output
- Mount/unmount operations
- Directory listing and navigation
- File operations (copy, delete, rename)
- Directory operations (create, remove)
- Volume information display
#### Integration Workflow Tests
- **Backup/Restore**: Complete backup and restoration workflow
- **Archive Creation**: Organizing files by type
- **Volume Migration**: Moving data between volumes
- **File Management**: Complex directory structures
- **Data Recovery**: Simulated recovery scenarios
#### Error Handling Tests
- Operations without mounted volumes
- Non-existent file/directory access
- Invalid operations (e.g., deleting directories with hdel)
- Edge cases (special characters, empty files, deep paths)
#### HFS+ Specific Tests
- HFS+ volume formatting with hformat -t hfs+ and mkfs.hfs+
- Filesystem type detection (HFS vs HFS+)
- Program name detection (mkfs.hfs, mkfs.hfs+, fsck.hfs+)
- HFS+ volume information and validation
- Mixed HFS/HFS+ operations and compatibility
### 3. Simple Integration Test (`simple_integration_test.sh`)
A straightforward demonstration that:
1. Creates and formats an HFS volume
2. Creates directory structure
3. Copies files to/from the volume
4. Tests navigation and file operations
5. Verifies all utilities work together
### 4. Feature-Specific Tests (`test_hcopy_directory.sh`)
Comprehensive test suite for the hcopy recursive directory copying feature:
- Tests recursive copying of directory structures with `-r` flag
- Validates nested directories and file preservation
- Tests edge cases (empty directories, special characters)
- Includes real-world recovery scenarios
- Can be run independently or integrated into main test suite
## Test Options
```bash
./run_tests.sh [OPTIONS] [TEST_PATTERN]
Options:
-v, --verbose Enable verbose output
-q, --quick Skip stress tests
-k, --keep Keep test files for inspection
-h, --help Show help message
Test patterns:
all Run all tests (default)
basic Basic functionality only
integration Integration workflows only
errors Error handling only
hfsplus HFS+ specific tests only
```
## Test Results
The test suite validates:
- ✅ All utilities compile and run on Apple Silicon
- ✅ Basic HFS operations (mount, copy, delete, rename)
- ✅ HFS+ volume creation and formatting
- ✅ Filesystem type detection and program name recognition
- ✅ Directory navigation and management
- ✅ Inter-utility workflows and data pipelines
- ✅ Error handling and edge cases
- ✅ Volume information and management
- ✅ Mixed HFS/HFS+ environment compatibility
- ✅ Recursive directory copying with hcopy (when implemented)
## Known Issues
1. **MacBinary Detection**: Binary files may trigger MacBinary format detection
2. **Path Navigation**: `hcd` changes affect relative paths in subsequent commands
3. **Test Isolation**: Some tests may leave mounted volumes on failure
## Future Enhancements
- [ ] Performance benchmarking
- [ ] Stress testing with large file counts
- [ ] Concurrent operation testing
- [ ] Extended attribute preservation tests
- [ ] Cross-volume operation tests
## Contributing
When adding new tests:
1. Add test data generation to `generate_test_data.sh` if needed
2. Implement test function in `run_tests.sh` for main suite integration
3. Update appropriate test category in the case statement
4. For feature-specific tests, create separate `test_feature_name.sh` files
5. Document any new test patterns in this README
## Requirements
- Bash 3.2+
- Standard Unix utilities (dd, grep, etc.)
- Compiled HFS utilities in parent directory