torrent-gateway/test/README.md
enki b3204ea07a
Some checks are pending
CI Pipeline / Run Tests (push) Waiting to run
CI Pipeline / Lint Code (push) Waiting to run
CI Pipeline / Security Scan (push) Waiting to run
CI Pipeline / Build Docker Images (push) Blocked by required conditions
CI Pipeline / E2E Tests (push) Blocked by required conditions
first commit
2025-08-18 00:40:15 -07:00

446 lines
11 KiB
Markdown

# Blossom-BitTorrent Gateway Testing Suite
Comprehensive testing suite for validating the Blossom-BitTorrent Gateway in real-world scenarios.
## Overview
This testing suite provides multiple layers of validation:
1. **Integration Tests**: End-to-end testing with real Blossom servers
2. **Load Tests**: Performance testing under concurrent load
3. **Compatibility Tests**: Protocol compliance and format support
4. **Docker Environment**: Isolated test environment with all dependencies
## Quick Start
### Prerequisites
- Docker and Docker Compose
- Go 1.21+ (for local testing)
- curl, jq, bc (for shell scripts)
### Run All Tests
```bash
# Start the complete test environment
cd test
docker-compose --profile orchestrate up --build
# Or run specific test suites
docker-compose --profile test up --build # Integration tests
docker-compose --profile load up --build # Load tests
docker-compose --profile compatibility up --build # Compatibility tests
```
### Quick Smoke Test
```bash
# Start core services
docker-compose up -d gateway blossom-server
# Run quick validation
./integration_test.sh
```
## Test Suites
### 1. Integration Tests (`integration_test.sh`)
Tests the complete workflow with various file sizes and formats.
**Features:**
- Real Blossom server integration
- File upload/download integrity verification
- BitTorrent torrent generation
- WebSeed (BEP-19) functionality
- HLS streaming for video files
- Nostr NIP-35 event compliance
**Usage:**
```bash
# Local execution
GATEWAY_URL=http://localhost:9876 ./integration_test.sh
# With custom Blossom server
BLOSSOM_SERVER=https://blossom.example.com ./integration_test.sh
# Docker execution
docker-compose --profile test run integration-test
```
**Test Files Generated:**
- Small file (1KB) - Basic functionality
- Medium file (10MB) - Chunk handling
- Large file (100MB) - Performance validation
- Video files (.mp4, .mkv, .avi, .mov, .webm) - HLS streaming
**Expected Output:**
```
🚀 Blossom-BitTorrent Gateway Integration Tests
=============================================
=== Creating Test Files ===
✅ Test files created successfully
=== Checking Services ===
✅ PASS: Gateway Health Check (1s)
✅ PASS: Blossom Server Check (2s)
=== File Upload and Validation Tests ===
✅ PASS: Upload small_file.txt (3s) - Hash: abc123..., Speed: 0.33MB/s
✅ PASS: Download small_file.txt (1s) - Integrity verified, Speed: 1.00MB/s
✅ PASS: Torrent small_file.txt (2s) - Generated torrent file (456 bytes)
✅ PASS: WebSeed small_file.txt (1s) - Full file access successful
...
```
### 2. Load Tests (`load_test.go`)
Stress testing with configurable concurrent users and duration.
**Features:**
- Concurrent file uploads
- Performance metrics collection
- Response time percentiles (P95, P99)
- Throughput measurement
- Resource usage monitoring
- Bottleneck identification
**Usage:**
```bash
# Local execution
go run load_test.go
# With custom parameters
GATEWAY_URL=http://localhost:9876 \
CONCURRENT_USERS=50 \
TEST_DURATION=10m \
FILE_SIZE=5242880 \
go run load_test.go
# Docker execution
docker-compose --profile load run load-test
```
**Configuration:**
- `GATEWAY_URL`: Target gateway URL
- `CONCURRENT_USERS`: Number of concurrent connections (default: 10)
- `TEST_DURATION`: Test duration (default: 2m)
- `FILE_SIZE`: Upload file size in bytes (default: 1MB)
**Expected Output:**
```
🚀 Starting Load Test
=====================
Gateway URL: http://localhost:9876
Concurrent Users: 10
Test Duration: 2m0s
File Size: 1.00 MB
📊 Load Test Report (Elapsed: 2m0s)
====================================
Total Requests: 245
Successful: 243 (99.2%)
Failed: 2 (0.8%)
Requests/sec: 2.04
Data Uploaded: 243.00 MB
Upload Speed: 2.03 MB/s
Response Times:
Average: 4.2s
Min: 1.1s
Max: 12.3s
95th percentile: 8.7s
99th percentile: 11.2s
```
### 3. Compatibility Tests (`compatibility_test.go`)
Validates protocol compliance and format support.
**Features:**
- Blossom server compatibility
- BitTorrent protocol validation
- Video format support (MP4, MKV, AVI, MOV, WebM, etc.)
- Nostr NIP-35 compliance
- Error handling verification
- Magnet link validation
- HLS streaming compatibility
**Usage:**
```bash
# Local execution
go run compatibility_test.go
# With custom servers
GATEWAY_URL=http://localhost:9876 \
BLOSSOM_SERVERS=http://server1:3000,http://server2:3001 \
go run compatibility_test.go
# Docker execution
docker-compose --profile compatibility run compatibility-test
```
**Test Categories:**
- **Blossom Compatibility**: Server connectivity and protocol compliance
- **BitTorrent Compatibility**: Torrent generation, WebSeed, magnet links
- **Video Format Support**: HLS streaming for various video formats
- **Nostr Compliance**: NIP-35 event structure validation
- **Error Handling**: Proper HTTP status codes and JSON responses
### 4. Docker Test Environment
Complete isolated testing environment with all dependencies.
**Services:**
- `gateway`: The Blossom-BitTorrent Gateway
- `blossom-server`: Real Blossom server (hzrd149/blossom-server)
- `nostr-relay`: Nostr relay for testing (scsibug/nostr-rs-relay)
- `test-file-generator`: Creates test files of various sizes
- `prometheus`: Metrics collection (optional)
- `grafana`: Metrics visualization (optional)
**Profiles:**
- `setup`: Generate test files
- `test`: Run integration tests
- `load`: Run load tests
- `compatibility`: Run compatibility tests
- `monitoring`: Start monitoring stack
- `orchestrate`: Run comprehensive test orchestration
## Test Orchestration
The test orchestrator (`test-orchestrator.sh`) coordinates multiple test suites:
```bash
# Run all test suites
TEST_SUITE=all docker-compose --profile orchestrate up
# Run specific suite
TEST_SUITE=integration docker-compose --profile orchestrate up
TEST_SUITE=load docker-compose --profile orchestrate up
TEST_SUITE=compatibility docker-compose --profile orchestrate up
# Quick smoke tests
TEST_SUITE=quick docker-compose --profile orchestrate up
```
## Configuration
### Environment Variables
| Variable | Description | Default |
|----------|-------------|---------|
| `GATEWAY_URL` | Gateway base URL | `http://localhost:9876` |
| `BLOSSOM_SERVER` | Blossom server URL | `http://localhost:3000` |
| `NOSTR_RELAYS` | Comma-separated Nostr relays | `wss://relay.damus.io` |
| `CONCURRENT_USERS` | Load test concurrent users | `10` |
| `TEST_DURATION` | Load test duration | `2m` |
| `FILE_SIZE` | Test file size in bytes | `1048576` (1MB) |
| `PARALLEL_TESTS` | Run tests in parallel | `true` |
### Service Configuration
#### Blossom Server (`blossom-config.json`)
```json
{
"port": 3000,
"storage": {
"type": "filesystem",
"path": "/data/blobs"
},
"limits": {
"max_blob_size": 104857600,
"max_total_size": 10737418240
}
}
```
#### Nostr Relay (`nostr-relay-config.toml`)
```toml
[network]
port = 7777
address = "0.0.0.0"
[limits]
messages_per_sec = 100
max_message_length = 128000
max_subscriptions = 20
```
## Monitoring
Optional monitoring stack with Prometheus and Grafana:
```bash
# Start monitoring
docker-compose --profile monitoring up -d
# Access interfaces
open http://localhost:9090 # Prometheus
open http://localhost:3001 # Grafana (admin/admin123)
```
**Metrics Collected:**
- Request rates and response times
- Upload/download throughput
- Error rates and status codes
- Resource utilization (CPU, memory)
- Active connections and goroutines
## Test Results
All tests generate detailed JSON results and logs:
**File Locations:**
- Integration: `./test_results/integration_test_results_YYYYMMDD_HHMMSS.json`
- Load: `./test_results/load_test_results_YYYYMMDD_HHMMSS.json`
- Compatibility: `./test_results/compatibility_test_results_YYYYMMDD_HHMMSS.json`
- Orchestrator: `./test_results/test_orchestrator_report.json`
**Result Structure:**
```json
{
"test_run": {
"timestamp": "2024-01-15T10:30:00Z",
"gateway_url": "http://localhost:9876",
"environment": {...}
},
"results": {
"total": 45,
"passed": 43,
"failed": 2,
"success_rate": 95.6
},
"performance_metrics": {...}
}
```
## Troubleshooting
### Common Issues
1. **Port Conflicts**
```bash
# Check for conflicting processes
lsof -i :9876 -i :3000 -i :7777
# Use different ports
docker-compose -f docker-compose.yml -f docker-compose.override.yml up
```
2. **Service Startup Failures**
```bash
# Check service logs
docker-compose logs gateway
docker-compose logs blossom-server
# Restart specific service
docker-compose restart gateway
```
3. **Test File Generation Issues**
```bash
# Generate test files manually
docker-compose --profile setup run test-file-generator
# Check disk space
df -h
```
4. **Network Connectivity**
```bash
# Test internal connectivity
docker-compose exec gateway ping blossom-server
# Check exposed ports
docker-compose ps
```
### Debug Mode
Enable verbose logging:
```bash
# Docker Compose with debug logs
docker-compose --verbose up
# Individual service logs
docker-compose logs -f gateway
# Test script debug
DEBUG=1 ./integration_test.sh
```
### Performance Tuning
For large-scale testing:
```bash
# Increase resource limits
echo '{"default-ulimits": {"nofile": {"soft": 65536, "hard": 65536}}}' > /etc/docker/daemon.json
sudo systemctl restart docker
# Use faster storage
docker-compose -f docker-compose.yml -f docker-compose.fast-storage.yml up
```
## Continuous Integration
### GitHub Actions Integration
```yaml
name: Gateway Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run Tests
run: |
cd test
docker-compose --profile orchestrate up --abort-on-container-exit
```
### Custom CI Pipeline
```bash
#!/bin/bash
set -e
# Start test environment
docker-compose up -d
# Wait for services
./wait-for-services.sh
# Run test suites
./integration_test.sh
go run load_test.go
go run compatibility_test.go
# Collect results
tar -czf test_results_$(date +%Y%m%d_%H%M%S).tar.gz test_results/
```
## Contributing
### Adding New Tests
1. **Integration Tests**: Add test cases to `integration_test.sh`
2. **Load Tests**: Modify parameters in `load_test.go`
3. **Compatibility Tests**: Add format support in `compatibility_test.go`
4. **Docker Services**: Update `docker-compose.yml`
### Test Development Guidelines
- Include clear pass/fail criteria
- Provide detailed error messages
- Generate structured JSON results
- Add comprehensive logging
- Validate cleanup procedures
## License
This testing suite follows the same license as the main Blossom-BitTorrent Gateway project.