refactor: move all remaining files to orig/ directory
Completed clean root directory structure: - Root now contains only: .git, .env, docs/, orig/ - Moved all remaining files and directories to orig/: - Config files (.claude, .dockerignore, .drone.yml, etc.) - All .env variants (except active .env) - Git config (.gitconfig, .github, .gitignore, etc.) - Tool configs (.golangci.yml, .revive.toml, etc.) - Documentation (*.md files, @prompts) - Build files (Dockerfiles, Makefile, go.mod, go.sum) - Docker compose files - All source directories (scripts, tests, tools, etc.) - Runtime directories (logs, monitoring, reports) - Dependency files (node_modules, lib, cache) - Special files (--delete) - Removed empty runtime directories (bin/, data/) V2 structure is now clean: - docs/planning/ - V2 planning documents - orig/ - Complete V1 codebase preserved - .env - Active environment config (not in git) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
316
orig/test/README.md
Normal file
316
orig/test/README.md
Normal file
@@ -0,0 +1,316 @@
|
||||
# MEV Bot Parser Test Suite
|
||||
|
||||
This directory contains comprehensive test suites for validating the MEV bot's Arbitrum transaction parser. The test suite ensures that ALL values are parsed correctly from real-world transactions, which is critical for production MEV operations.
|
||||
|
||||
## 🏗️ Test Suite Architecture
|
||||
|
||||
```
|
||||
test/
|
||||
├── fixtures/
|
||||
│ ├── real_arbitrum_transactions.json # Real-world transaction test data
|
||||
│ └── golden/ # Golden file test outputs
|
||||
├── parser_validation_comprehensive_test.go # Main validation tests
|
||||
├── golden_file_test.go # Golden file testing framework
|
||||
├── performance_benchmarks_test.go # Performance and stress tests
|
||||
├── integration_arbitrum_test.go # Live Arbitrum integration tests
|
||||
├── fuzzing_robustness_test.go # Fuzzing and robustness tests
|
||||
└── README.md # This file
|
||||
```
|
||||
|
||||
## 🎯 Test Categories
|
||||
|
||||
### 1. Comprehensive Parser Validation
|
||||
**File:** `parser_validation_comprehensive_test.go`
|
||||
|
||||
Tests complete value parsing validation with real-world Arbitrum transactions:
|
||||
|
||||
- **High-Value Swaps**: Validates parsing of swaps >$10k, >$100k, >$1M
|
||||
- **Complex Multi-Hop**: Tests Uniswap V3 multi-hop paths and routing
|
||||
- **Failed Transactions**: Ensures graceful handling of reverted swaps
|
||||
- **Edge Cases**: Tests overflow protection, zero values, unknown tokens
|
||||
- **MEV Transactions**: Validates sandwich attacks, arbitrage, liquidations
|
||||
- **Protocol-Specific**: Tests Curve, Balancer, GMX, and other protocols
|
||||
|
||||
### 2. Golden File Testing
|
||||
**File:** `golden_file_test.go`
|
||||
|
||||
Provides regression testing with known-good outputs:
|
||||
|
||||
- **Consistent Validation**: Compares parser output against golden files
|
||||
- **Regression Prevention**: Detects changes in parsing behavior
|
||||
- **Complete Field Validation**: Tests every field in parsed structures
|
||||
- **Mathematical Precision**: Validates wei-level precision in amounts
|
||||
|
||||
### 3. Performance Benchmarks
|
||||
**File:** `performance_benchmarks_test.go`
|
||||
|
||||
Ensures parser meets production performance requirements:
|
||||
|
||||
- **Throughput Testing**: >1000 transactions/second minimum
|
||||
- **Memory Efficiency**: <500MB memory usage validation
|
||||
- **Concurrent Processing**: Multi-worker performance validation
|
||||
- **Stress Testing**: Sustained load and burst testing
|
||||
- **Protocol-Specific Performance**: Per-DEX performance metrics
|
||||
|
||||
### 4. Live Integration Tests
|
||||
**File:** `integration_arbitrum_test.go`
|
||||
|
||||
Tests against live Arbitrum blockchain data:
|
||||
|
||||
- **Real-Time Validation**: Tests with current blockchain state
|
||||
- **Network Resilience**: Handles RPC failures and rate limits
|
||||
- **Accuracy Verification**: Compares parsed data with on-chain reality
|
||||
- **High-Value Transaction Validation**: Tests known valuable swaps
|
||||
- **MEV Pattern Detection**: Validates MEV opportunity identification
|
||||
|
||||
### 5. Fuzzing & Robustness Tests
|
||||
**File:** `fuzzing_robustness_test.go`
|
||||
|
||||
Ensures parser robustness against malicious or malformed data:
|
||||
|
||||
- **Transaction Data Fuzzing**: Random transaction input generation
|
||||
- **Function Selector Fuzzing**: Tests unknown/malformed selectors
|
||||
- **Amount Value Fuzzing**: Tests extreme values and overflow conditions
|
||||
- **Concurrent Access Fuzzing**: Multi-threaded robustness testing
|
||||
- **Memory Exhaustion Testing**: Large input handling validation
|
||||
|
||||
## 📊 Test Fixtures
|
||||
|
||||
### Real Transaction Data
|
||||
The `fixtures/real_arbitrum_transactions.json` file contains carefully curated real-world transactions:
|
||||
|
||||
```json
|
||||
{
|
||||
"high_value_swaps": [
|
||||
{
|
||||
"name": "uniswap_v3_usdc_weth_1m",
|
||||
"description": "Uniswap V3 USDC/WETH swap - $1M+ transaction",
|
||||
"tx_hash": "0xc6962004f452be9203591991d15f6b388e09e8d0",
|
||||
"protocol": "UniswapV3",
|
||||
"amount_in": "1000000000000",
|
||||
"expected_events": [...],
|
||||
"validation_criteria": {...}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 🚀 Running Tests
|
||||
|
||||
### Quick Test Suite
|
||||
```bash
|
||||
# Run all parser validation tests
|
||||
go test ./test/ -v
|
||||
|
||||
# Run specific test category
|
||||
go test ./test/ -run TestComprehensiveParserValidation -v
|
||||
```
|
||||
|
||||
### Performance Benchmarks
|
||||
```bash
|
||||
# Run all benchmarks
|
||||
go test ./test/ -bench=. -benchmem
|
||||
|
||||
# Run specific performance tests
|
||||
go test ./test/ -run TestParserPerformance -v
|
||||
```
|
||||
|
||||
### Golden File Testing
|
||||
```bash
|
||||
# Validate against golden files
|
||||
go test ./test/ -run TestGoldenFiles -v
|
||||
|
||||
# Regenerate golden files (if needed)
|
||||
REGENERATE_GOLDEN=true go test ./test/ -run TestGoldenFiles -v
|
||||
```
|
||||
|
||||
### Live Integration Testing
|
||||
```bash
|
||||
# Enable live testing with real Arbitrum data
|
||||
ENABLE_LIVE_TESTING=true go test ./test/ -run TestArbitrumIntegration -v
|
||||
|
||||
# With custom RPC endpoint
|
||||
ARBITRUM_RPC_ENDPOINT="your-rpc-url" ENABLE_LIVE_TESTING=true go test ./test/ -run TestArbitrumIntegration -v
|
||||
```
|
||||
|
||||
### Fuzzing Tests
|
||||
```bash
|
||||
# Run fuzzing tests
|
||||
go test ./test/ -run TestFuzzingRobustness -v
|
||||
|
||||
# Run with native Go fuzzing
|
||||
go test -fuzz=FuzzParserRobustness ./test/
|
||||
```
|
||||
|
||||
## ✅ Validation Criteria
|
||||
|
||||
### Critical Requirements
|
||||
- **100% Accuracy**: All amounts parsed with wei-precision
|
||||
- **Complete Metadata**: All addresses, fees, and parameters extracted
|
||||
- **Performance**: >1000 transactions/second throughput
|
||||
- **Memory Efficiency**: <500MB memory usage
|
||||
- **Error Handling**: Graceful handling of malformed data
|
||||
- **Security**: No crashes or panics with any input
|
||||
|
||||
### Protocol Coverage
|
||||
- ✅ Uniswap V2 (all swap functions)
|
||||
- ✅ Uniswap V3 (exactInput, exactOutput, multicall)
|
||||
- ✅ SushiSwap V2 (all variants)
|
||||
- ✅ 1inch Aggregator (swap routing)
|
||||
- ✅ Curve (stable swaps)
|
||||
- ✅ Balancer V2 (batch swaps)
|
||||
- ✅ Camelot DEX (Arbitrum native)
|
||||
- ✅ GMX (perpetuals)
|
||||
- ✅ TraderJoe (AMM + LB pairs)
|
||||
|
||||
### MEV Pattern Detection
|
||||
- ✅ Sandwich attacks (frontrun/backrun detection)
|
||||
- ✅ Arbitrage opportunities (cross-DEX price differences)
|
||||
- ✅ Liquidation transactions (lending protocol liquidations)
|
||||
- ✅ Flash loan transactions
|
||||
- ✅ Gas price analysis (MEV bot identification)
|
||||
|
||||
## 🔧 Configuration
|
||||
|
||||
### Environment Variables
|
||||
```bash
|
||||
# Enable live testing
|
||||
export ENABLE_LIVE_TESTING=true
|
||||
|
||||
# Arbitrum RPC endpoints
|
||||
export ARBITRUM_RPC_ENDPOINT="wss://arbitrum-mainnet.core.chainstack.com/your-key"
|
||||
export ARBITRUM_WS_ENDPOINT="wss://arbitrum-mainnet.core.chainstack.com/your-key"
|
||||
|
||||
# Test configuration
|
||||
export TEST_TIMEOUT="30m"
|
||||
export REGENERATE_GOLDEN=true
|
||||
export LOG_LEVEL="debug"
|
||||
```
|
||||
|
||||
### Performance Thresholds
|
||||
```go
|
||||
// Performance requirements (configurable)
|
||||
const (
|
||||
MinThroughputTxPerS = 1000 // Minimum transaction throughput
|
||||
MaxParsingTimeMs = 100 // Maximum time per transaction
|
||||
MaxMemoryUsageMB = 500 // Maximum memory usage
|
||||
MaxErrorRatePercent = 5 // Maximum acceptable error rate
|
||||
)
|
||||
```
|
||||
|
||||
## 📈 Continuous Integration
|
||||
|
||||
The test suite integrates with GitHub Actions for automated validation:
|
||||
|
||||
### Workflow Triggers
|
||||
- **Push/PR**: Runs core validation tests
|
||||
- **Daily Schedule**: Runs full suite including live tests
|
||||
- **Manual Dispatch**: Allows custom test configuration
|
||||
|
||||
### Test Matrix
|
||||
```yaml
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: ['1.21', '1.20']
|
||||
test-suite: ['unit', 'integration', 'performance', 'fuzzing']
|
||||
```
|
||||
|
||||
## 🛠️ Adding New Tests
|
||||
|
||||
### 1. Real Transaction Tests
|
||||
Add new transaction data to `fixtures/real_arbitrum_transactions.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"your_category": [
|
||||
{
|
||||
"name": "descriptive_test_name",
|
||||
"description": "What this test validates",
|
||||
"tx_hash": "0x...",
|
||||
"protocol": "ProtocolName",
|
||||
"expected_values": {
|
||||
"amount_in": "exact_wei_amount",
|
||||
"token_addresses": ["0x...", "0x..."],
|
||||
"pool_fee": 500
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Performance Tests
|
||||
Add benchmarks to `performance_benchmarks_test.go`:
|
||||
|
||||
```go
|
||||
func BenchmarkYourNewFeature(b *testing.B) {
|
||||
suite := NewPerformanceTestSuite(&testing.T{})
|
||||
defer suite.l2Parser.Close()
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
// Your benchmark code
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Golden File Tests
|
||||
Add test cases to `golden_file_test.go`:
|
||||
|
||||
```go
|
||||
func (suite *GoldenFileTestSuite) createYourNewTest() GoldenFileTest {
|
||||
return GoldenFileTest{
|
||||
Name: "your_test_name",
|
||||
Description: "What this validates",
|
||||
Input: GoldenFileInput{
|
||||
// Input data
|
||||
},
|
||||
// Expected output will be auto-generated
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🐛 Debugging Test Failures
|
||||
|
||||
### Common Issues
|
||||
1. **Parsing Failures**: Check ABI encoding in test data
|
||||
2. **Performance Issues**: Profile with `go tool pprof`
|
||||
3. **Memory Leaks**: Run with `-race` flag
|
||||
4. **Golden File Mismatches**: Regenerate with `REGENERATE_GOLDEN=true`
|
||||
|
||||
### Debug Commands
|
||||
```bash
|
||||
# Run with verbose output and race detection
|
||||
go test ./test/ -v -race -run TestSpecificTest
|
||||
|
||||
# Profile memory usage
|
||||
go test ./test/ -memprofile=mem.prof -run TestMemoryUsage
|
||||
go tool pprof mem.prof
|
||||
|
||||
# Generate CPU profile
|
||||
go test ./test/ -cpuprofile=cpu.prof -run TestPerformance
|
||||
go tool pprof cpu.prof
|
||||
```
|
||||
|
||||
## 📚 Related Documentation
|
||||
|
||||
- [Parser Architecture](../pkg/arbitrum/README.md)
|
||||
- [Performance Tuning Guide](../docs/performance.md)
|
||||
- [MEV Strategy Documentation](../docs/mev-strategies.md)
|
||||
- [Contributing Guidelines](../CONTRIBUTING.md)
|
||||
|
||||
## ⚠️ Important Notes
|
||||
|
||||
### Production Considerations
|
||||
- **Never commit real private keys or API keys to test fixtures**
|
||||
- **Use mock data for sensitive operations in automated tests**
|
||||
- **Validate all external dependencies before production deployment**
|
||||
- **Monitor parser performance in production with similar test patterns**
|
||||
|
||||
### Security Warnings
|
||||
- **Fuzzing tests may generate large amounts of random data**
|
||||
- **Live integration tests make real network calls**
|
||||
- **Performance tests may consume significant system resources**
|
||||
|
||||
---
|
||||
|
||||
For questions or issues with the test suite, please open an issue or contact the development team.
|
||||
Reference in New Issue
Block a user