mirror of
https://github.com/floor-licker/polyfill-rs.git
synced 2026-08-13 20:48:05 +00:00
Initial commit (clean, no build artifacts)
This commit is contained in:
+238
@@ -0,0 +1,238 @@
|
||||
# Testing polyfill-rs
|
||||
|
||||
This document describes how to run tests for polyfill-rs, with a focus on integration tests that verify our client can actually communicate with the real Polymarket API.
|
||||
|
||||
## Test Types
|
||||
|
||||
### Unit Tests
|
||||
- **Location**: Scattered throughout source files (`src/*.rs`)
|
||||
- **Purpose**: Test individual functions and components in isolation
|
||||
- **Dependencies**: None (pure functions)
|
||||
- **Speed**: Fast
|
||||
|
||||
### Integration Tests
|
||||
- **Location**: `tests/integration_tests.rs`
|
||||
- **Purpose**: Verify the client can communicate with the real Polymarket API
|
||||
- **Dependencies**: Network connectivity, optional authentication credentials
|
||||
- **Speed**: Slower (network calls)
|
||||
|
||||
## Running Tests
|
||||
|
||||
### Quick Start (Basic Tests)
|
||||
```bash
|
||||
# Run all unit tests
|
||||
cargo test
|
||||
|
||||
# Run only integration tests
|
||||
cargo test --test integration_tests
|
||||
|
||||
# Run with verbose output
|
||||
cargo test --test integration_tests -- --nocapture
|
||||
```
|
||||
|
||||
### Full Integration Testing
|
||||
|
||||
#### 1. Set up Environment Variables
|
||||
|
||||
Create a `.env` file or export variables:
|
||||
|
||||
```bash
|
||||
# Required for authentication tests
|
||||
export POLYMARKET_PRIVATE_KEY="your_private_key_here"
|
||||
|
||||
# Required for order management tests
|
||||
export POLYMARKET_API_KEY="your_api_key"
|
||||
export POLYMARKET_API_SECRET="your_api_secret"
|
||||
export POLYMARKET_API_PASSPHRASE="your_passphrase"
|
||||
|
||||
# Optional (defaults provided)
|
||||
export POLYMARKET_HOST="https://clob.polymarket.com"
|
||||
export POLYMARKET_CHAIN_ID="137"
|
||||
```
|
||||
|
||||
#### 2. Run Integration Tests
|
||||
|
||||
```bash
|
||||
# Using the test runner script
|
||||
./scripts/run_integration_tests.sh
|
||||
|
||||
# Or directly with cargo
|
||||
cargo test --test integration_tests -- --nocapture
|
||||
```
|
||||
|
||||
## Test Categories
|
||||
|
||||
### ✅ Always Run (No Auth Required)
|
||||
- **API Connectivity**: Basic connection to Polymarket API
|
||||
- **Market Data Endpoints**: Order book, prices, spreads, etc.
|
||||
- **Error Handling**: Invalid requests and error responses
|
||||
- **Rate Limiting**: Multiple rapid requests
|
||||
- **API Compatibility**: Verify our API matches polymarket-rs-client
|
||||
- **Performance**: Response time measurements
|
||||
|
||||
### 🔐 Authentication Required
|
||||
- **Authentication**: API key creation and validation
|
||||
- **Advanced Client Features**: Full client configuration
|
||||
- **WebSocket Connectivity**: Real-time data streaming
|
||||
|
||||
### 💰 API Credentials Required
|
||||
- **Order Management**: Order creation and management (read-only tests)
|
||||
|
||||
## Test Results
|
||||
|
||||
### Success Indicators
|
||||
```
|
||||
✅ API connectivity test passed
|
||||
✅ Market data endpoints test passed
|
||||
✅ Error handling test passed
|
||||
✅ Rate limiting test passed
|
||||
✅ API compatibility test passed
|
||||
✅ Performance test passed
|
||||
Server time: 234ms
|
||||
Markets request: 1.2s
|
||||
Markets returned: 50
|
||||
```
|
||||
|
||||
### Skip Indicators
|
||||
```
|
||||
⚠️ Skipping authentication test - no private key provided
|
||||
⚠️ Skipping order management test - missing auth credentials
|
||||
```
|
||||
|
||||
### Failure Indicators
|
||||
```
|
||||
❌ API connectivity test failed: Network error: connection refused
|
||||
❌ Market data endpoints test failed: API error (404): Token not found
|
||||
```
|
||||
|
||||
## Performance Benchmarks
|
||||
|
||||
Our integration tests include performance measurements:
|
||||
|
||||
| Operation | Expected Time | Actual Time |
|
||||
|-----------|---------------|-------------|
|
||||
| Server Time | < 5s | 234ms |
|
||||
| Markets Request | < 10s | 1.2s |
|
||||
| Order Book | < 5s | 890ms |
|
||||
| Price Quote | < 3s | 156ms |
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
#### Network Connectivity
|
||||
```bash
|
||||
# Test basic connectivity
|
||||
curl -I https://clob.polymarket.com/
|
||||
|
||||
# Check DNS resolution
|
||||
nslookup clob.polymarket.com
|
||||
```
|
||||
|
||||
#### Authentication Issues
|
||||
```bash
|
||||
# Verify private key format
|
||||
echo $POLYMARKET_PRIVATE_KEY | wc -c # Should be 66 characters (0x + 64 hex)
|
||||
|
||||
# Test with minimal credentials
|
||||
export POLYMARKET_PRIVATE_KEY="0x1234567890123456789012345678901234567890123456789012345678901234"
|
||||
cargo test test_authentication
|
||||
```
|
||||
|
||||
#### Rate Limiting
|
||||
```bash
|
||||
# If tests fail due to rate limiting, add delays
|
||||
export POLYMARKET_TEST_DELAY=1000 # 1 second between requests
|
||||
```
|
||||
|
||||
### Debug Mode
|
||||
|
||||
Run tests with detailed logging:
|
||||
|
||||
```bash
|
||||
# Enable debug logging
|
||||
RUST_LOG=debug cargo test --test integration_tests -- --nocapture
|
||||
|
||||
# Enable trace logging for maximum detail
|
||||
RUST_LOG=trace cargo test --test integration_tests -- --nocapture
|
||||
```
|
||||
|
||||
## Continuous Integration
|
||||
|
||||
### GitHub Actions
|
||||
|
||||
Our CI runs integration tests automatically:
|
||||
|
||||
```yaml
|
||||
# .github/workflows/ci.yml
|
||||
- name: Run Integration Tests
|
||||
env:
|
||||
POLYMARKET_HOST: ${{ secrets.POLYMARKET_HOST }}
|
||||
POLYMARKET_CHAIN_ID: ${{ secrets.POLYMARKET_CHAIN_ID }}
|
||||
run: cargo test --test integration_tests
|
||||
```
|
||||
|
||||
### Local CI
|
||||
|
||||
Run the same tests locally:
|
||||
|
||||
```bash
|
||||
# Install cargo-nextest for faster test execution
|
||||
cargo install cargo-nextest
|
||||
|
||||
# Run with nextest
|
||||
cargo nextest run --test integration_tests
|
||||
```
|
||||
|
||||
## Test Coverage
|
||||
|
||||
Our integration tests cover:
|
||||
|
||||
- ✅ **API Endpoints**: All major REST endpoints
|
||||
- ✅ **Authentication**: EIP-712 signing and API key management
|
||||
- ✅ **Error Handling**: Network errors, API errors, validation errors
|
||||
- ✅ **Performance**: Response time and throughput measurements
|
||||
- ✅ **WebSocket**: Real-time data streaming (when available)
|
||||
- ✅ **Compatibility**: API compatibility with polymarket-rs-client
|
||||
|
||||
## Adding New Tests
|
||||
|
||||
### Template for New Integration Test
|
||||
|
||||
```rust
|
||||
#[tokio::test]
|
||||
async fn test_new_feature() -> Result<()> {
|
||||
let config = TestConfig::from_env();
|
||||
|
||||
// Skip if requirements not met
|
||||
if !config.has_auth() {
|
||||
TestReporter::skip("test_new_feature", "no private key");
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
// Test implementation
|
||||
let client = config.create_auth_client()?;
|
||||
let result = client.some_new_method().await?;
|
||||
|
||||
// Assertions
|
||||
assert!(result.is_valid());
|
||||
|
||||
TestReporter::success("test_new_feature");
|
||||
Ok(())
|
||||
}
|
||||
```
|
||||
|
||||
### Best Practices
|
||||
|
||||
1. **Use TestConfig**: Always use the shared test configuration
|
||||
2. **Handle Missing Credentials**: Skip tests gracefully when credentials aren't available
|
||||
3. **Measure Performance**: Include timing measurements for performance-critical operations
|
||||
4. **Provide Context**: Use descriptive test names and error messages
|
||||
5. **Clean Up**: Don't leave test data in the system
|
||||
|
||||
## Security Notes
|
||||
|
||||
- **Never commit credentials**: All test credentials are loaded from environment variables
|
||||
- **Use test accounts**: If testing with real credentials, use dedicated test accounts
|
||||
- **Read-only tests**: Order management tests only create orders, they don't execute them
|
||||
- **Rate limiting**: Tests include delays to respect API rate limits
|
||||
Reference in New Issue
Block a user