# SeaweedFS FUSE Integration Testing Framework ## Overview This directory contains a comprehensive integration testing framework for SeaweedFS FUSE operations. The current SeaweedFS FUSE tests are primarily performance-focused (using FIO) but lack comprehensive functional testing. This framework addresses those gaps. ## ⚠️ Current Status **Note**: Due to Go module conflicts between this test framework and the parent SeaweedFS module, the full test suite currently requires manual setup. The framework files are provided as a foundation for comprehensive FUSE testing once the module structure is resolved. ### Working Components - ✅ Framework design and architecture (`framework.go`) - ✅ Individual test file structure and compilation - ✅ Test methodology and comprehensive coverage - ✅ Documentation and usage examples - ⚠️ Full test suite execution (requires Go module isolation) ### Verified Working Test ```bash cd test/fuse_integration go test -v simple_test.go ``` ## Current Testing Gaps Addressed ### 1. **Limited Functional Coverage** - **Current**: Only basic FIO performance tests - **New**: Comprehensive testing of all FUSE operations (create, read, write, delete, mkdir, rmdir, permissions, etc.) ### 2. **No Concurrency Testing** - **Current**: Single-threaded performance tests - **New**: Extensive concurrent operation tests, race condition detection, thread safety validation ### 3. **Insufficient Error Handling** - **Current**: Basic error scenarios - **New**: Comprehensive error condition testing, edge cases, failure recovery ### 4. **Missing Edge Cases** - **Current**: Simple file operations - **New**: Large files, sparse files, deep directory nesting, many small files, permission variations ## Framework Architecture ### Core Components 1. **`framework.go`** - Test infrastructure and utilities - `FuseTestFramework` - Main test management struct - Automated SeaweedFS cluster setup/teardown - FUSE mount/unmount management - Helper functions for file operations and assertions 2. **`basic_operations_test.go`** - Fundamental FUSE operations - File create, read, write, delete - File attributes and permissions - Large file handling - Sparse file operations 3. **`directory_operations_test.go`** - Directory-specific tests - Directory creation, deletion, listing - Nested directory structures - Directory permissions and rename operations - Complex directory scenarios 4. **`concurrent_operations_test.go`** - Concurrency and stress testing - Concurrent file and directory operations - Race condition detection - High-frequency operations - Stress testing scenarios ## Key Features ### Automated Test Environment ```go framework := NewFuseTestFramework(t, DefaultTestConfig()) defer framework.Cleanup() require.NoError(t, framework.Setup(DefaultTestConfig())) ``` - **Automatic cluster setup**: Master, Volume, Filer servers - **FUSE mounting**: Proper mount point management - **Cleanup**: Automatic teardown of all resources ### Configurable Test Parameters ```go config := &TestConfig{ Collection: "test", Replication: "001", ChunkSizeMB: 8, CacheSizeMB: 200, NumVolumes: 5, EnableDebug: true, MountOptions: []string{"-allowOthers"}, } ``` ### Rich Assertion Helpers ```go framework.AssertFileExists("path/to/file") framework.AssertFileContent("file.txt", expectedContent) framework.AssertFileMode("script.sh", 0755) framework.CreateTestFile("test.txt", []byte("content")) ``` ## Test Categories ### 1. Basic File Operations - **Create/Read/Write/Delete**: Fundamental file operations - **File Attributes**: Size, timestamps, permissions - **Append Operations**: File appending behavior - **Large Files**: Files exceeding chunk size limits - **Sparse Files**: Non-contiguous file data ### 2. Directory Operations - **Directory Lifecycle**: Create, list, remove directories - **Nested Structures**: Deep directory hierarchies - **Directory Permissions**: Access control testing - **Directory Rename**: Move operations - **Complex Scenarios**: Many files, deep nesting ### 3. Concurrent Operations - **Multi-threaded Access**: Simultaneous file operations - **Race Condition Detection**: Concurrent read/write scenarios - **Directory Concurrency**: Parallel directory operations - **Stress Testing**: High-frequency operations ### 4. Error Handling & Edge Cases - **Permission Denied**: Access control violations - **Disk Full**: Storage limit scenarios - **Network Issues**: Filer/Volume server failures - **Invalid Operations**: Malformed requests - **Recovery Testing**: Error recovery scenarios ## Usage Examples ### Basic Test Run ```bash # Build SeaweedFS binary make # Run all FUSE tests cd test/fuse_integration go test -v # Run specific test category go test -v -run TestBasicFileOperations go test -v -run TestConcurrentFileOperations ``` ### Custom Configuration ```go func TestCustomFUSE(t *testing.T) { config := &TestConfig{ ChunkSizeMB: 16, // Larger chunks CacheSizeMB: 500, // More cache EnableDebug: true, // Debug output SkipCleanup: true, // Keep files for inspection } framework := NewFuseTestFramework(t, config) defer framework.Cleanup() require.NoError(t, framework.Setup(config)) // Your tests here... } ``` ### Debugging Failed Tests ```go config := &TestConfig{ EnableDebug: true, // Enable verbose logging SkipCleanup: true, // Keep temp files for inspection } ``` ## Advanced Features ### Performance Benchmarking ```go func BenchmarkLargeFileWrite(b *testing.B) { framework := NewFuseTestFramework(t, DefaultTestConfig()) defer framework.Cleanup() require.NoError(t, framework.Setup(DefaultTestConfig())) b.ResetTimer() for i := 0; i < b.N; i++ { // Benchmark file operations } } ``` ### Custom Test Scenarios ```go func TestCustomWorkload(t *testing.T) { framework := NewFuseTestFramework(t, DefaultTestConfig()) defer framework.Cleanup() require.NoError(t, framework.Setup(DefaultTestConfig())) // Simulate specific application workload simulateWebServerWorkload(t, framework) simulateDatabaseWorkload(t, framework) simulateBackupWorkload(t, framework) } ``` ## Integration with CI/CD ### GitHub Actions Example ```yaml name: FUSE Integration Tests on: [push, pull_request] jobs: fuse-tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-go@v3 with: go-version: '1.21' - name: Install FUSE run: sudo apt-get install -y fuse - name: Build SeaweedFS run: make - name: Run FUSE Tests run: | cd test/fuse_integration go test -v -timeout 30m ``` ### Docker Testing ```dockerfile FROM golang:1.21 RUN apt-get update && apt-get install -y fuse COPY . /seaweedfs WORKDIR /seaweedfs RUN make CMD ["go", "test", "-v", "./test/fuse_integration/..."] ``` ## Comparison with Current Testing | Aspect | Current Tests | New Framework | |--------|---------------|---------------| | **Operations Covered** | Basic FIO read/write | All FUSE operations | | **Concurrency** | Single-threaded | Multi-threaded stress tests | | **Error Scenarios** | Limited | Comprehensive error handling | | **File Types** | Regular files only | Large, sparse, many small files | | **Directory Testing** | None | Complete directory operations | | **Setup Complexity** | Manual Docker setup | Automated cluster management | | **Test Isolation** | Shared environment | Isolated per-test environments | | **Debugging** | Limited | Rich debugging and inspection | ## Benefits ### 1. **Comprehensive Coverage** - Tests all FUSE operations supported by SeaweedFS - Covers edge cases and error conditions - Validates behavior under concurrent access ### 2. **Reliable Testing** - Isolated test environments prevent test interference - Automatic cleanup ensures consistent state - Deterministic test execution ### 3. **Easy Maintenance** - Clear test organization and naming - Rich helper functions reduce code duplication - Configurable test parameters for different scenarios ### 4. **Real-world Validation** - Tests actual FUSE filesystem behavior - Validates integration between all SeaweedFS components - Catches issues that unit tests might miss ## Future Enhancements ### 1. **Extended FUSE Features** - Extended attributes (xattr) testing - Symbolic link operations - Hard link behavior - File locking mechanisms ### 2. **Performance Profiling** - Built-in performance measurement - Memory usage tracking - Latency distribution analysis - Throughput benchmarking ### 3. **Fault Injection** - Network partition simulation - Server failure scenarios - Disk full conditions - Memory pressure testing ### 4. **Integration Testing** - Multi-filer configurations - Cross-datacenter replication - S3 API compatibility while mounted - Backup/restore operations ## Getting Started 1. **Prerequisites** ```bash # Install FUSE sudo apt-get install fuse # Ubuntu/Debian brew install macfuse # macOS # Build SeaweedFS make ``` 2. **Run Tests** ```bash cd test/fuse_integration go test -v ``` 3. **View Results** - Test output shows detailed operation results - Failed tests include specific error information - Debug mode provides verbose logging This framework represents a significant improvement in SeaweedFS FUSE testing capabilities, providing comprehensive coverage, real-world validation, and reliable automation that will help ensure the robustness and reliability of the FUSE implementation.