mirror of
https://github.com/floor-licker/polyfill-rs.git
synced 2026-07-29 05:27:44 +00:00
6.2 KiB
6.2 KiB
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)
# 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:
# 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
# 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
# Test basic connectivity
curl -I https://clob.polymarket.com/
# Check DNS resolution
nslookup clob.polymarket.com
Authentication Issues
# 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
# 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:
# 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:
# .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:
# 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
#[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
- Use TestConfig: Always use the shared test configuration
- Handle Missing Credentials: Skip tests gracefully when credentials aren't available
- Measure Performance: Include timing measurements for performance-critical operations
- Provide Context: Use descriptive test names and error messages
- 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