1
0
Fork 0
mirror of https://github.com/chrislusf/seaweedfs synced 2025-07-25 21:12:47 +02:00
seaweedfs/test/fuse_integration/README.md
Chris Lu 9982f91b4c
Add more fuse tests (#6992)
* add more tests

* move to new package

* add github action

* Update fuse-integration.yml

* Update fuse-integration.yml

* Update test/fuse_integration/README.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update test/fuse_integration/README.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update test/fuse_integration/framework.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update test/fuse_integration/README.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update test/fuse_integration/README.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix

* Update test/fuse_integration/concurrent_operations_test.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-16 12:43:08 -07:00

327 lines
No EOL
9.5 KiB
Markdown

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