171 lines
5.6 KiB
Python
171 lines
5.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test Deribit Integration
|
|
Test the new DeribitInterface and ExchangeFactory
|
|
"""
|
|
import os
|
|
import sys
|
|
import logging
|
|
from dotenv import load_dotenv
|
|
|
|
# Load environment variables
|
|
load_dotenv()
|
|
|
|
# Add project paths
|
|
sys.path.append(os.path.join(os.path.dirname(__file__), 'NN'))
|
|
sys.path.append(os.path.join(os.path.dirname(__file__), 'core'))
|
|
|
|
from NN.exchanges.exchange_factory import ExchangeFactory
|
|
from NN.exchanges.deribit_interface import DeribitInterface
|
|
from core.config import get_config
|
|
|
|
# Setup logging
|
|
logging.basicConfig(level=logging.INFO)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def test_deribit_credentials():
|
|
"""Test Deribit API credentials"""
|
|
api_key = os.getenv('DERIBIT_API_CLIENTID')
|
|
api_secret = os.getenv('DERIBIT_API_SECRET')
|
|
|
|
logger.info(f"Deribit API Key: {'*' * 8 + api_key[-4:] if api_key and len(api_key) > 4 else 'Not set'}")
|
|
logger.info(f"Deribit API Secret: {'*' * 8 + api_secret[-4:] if api_secret and len(api_secret) > 4 else 'Not set'}")
|
|
|
|
return bool(api_key and api_secret)
|
|
|
|
def test_deribit_interface():
|
|
"""Test DeribitInterface directly"""
|
|
logger.info("Testing DeribitInterface directly...")
|
|
|
|
try:
|
|
# Create Deribit interface
|
|
deribit = DeribitInterface(test_mode=True)
|
|
|
|
# Test connection
|
|
if deribit.connect():
|
|
logger.info("✓ Successfully connected to Deribit testnet")
|
|
|
|
# Test getting instruments
|
|
btc_instruments = deribit.get_instruments('BTC')
|
|
logger.info(f"✓ Found {len(btc_instruments)} BTC instruments")
|
|
|
|
# Test getting ticker
|
|
ticker = deribit.get_ticker('BTC-PERPETUAL')
|
|
if ticker:
|
|
logger.info(f"✓ BTC-PERPETUAL ticker: ${ticker.get('last_price', 'N/A')}")
|
|
|
|
# Test getting account summary (if authenticated)
|
|
account = deribit.get_account_summary('BTC')
|
|
if account:
|
|
logger.info(f"✓ BTC account balance: {account.get('available_funds', 'N/A')}")
|
|
|
|
return True
|
|
else:
|
|
logger.error("✗ Failed to connect to Deribit")
|
|
return False
|
|
|
|
except Exception as e:
|
|
logger.error(f"✗ Error testing DeribitInterface: {e}")
|
|
return False
|
|
|
|
def test_exchange_factory():
|
|
"""Test ExchangeFactory with config"""
|
|
logger.info("Testing ExchangeFactory...")
|
|
|
|
try:
|
|
# Load config
|
|
config = get_config()
|
|
exchanges_config = config.get('exchanges', {})
|
|
|
|
logger.info(f"Primary exchange: {exchanges_config.get('primary', 'Not set')}")
|
|
|
|
# Test creating primary exchange
|
|
primary_exchange = ExchangeFactory.get_primary_exchange(exchanges_config)
|
|
if primary_exchange:
|
|
logger.info(f"✓ Successfully created primary exchange: {type(primary_exchange).__name__}")
|
|
|
|
# Test basic operations
|
|
if hasattr(primary_exchange, 'get_ticker'):
|
|
ticker = primary_exchange.get_ticker('BTC-PERPETUAL')
|
|
if ticker:
|
|
logger.info(f"✓ Primary exchange ticker test successful")
|
|
|
|
return True
|
|
else:
|
|
logger.error("✗ Failed to create primary exchange")
|
|
return False
|
|
|
|
except Exception as e:
|
|
logger.error(f"✗ Error testing ExchangeFactory: {e}")
|
|
return False
|
|
|
|
def test_multiple_exchanges():
|
|
"""Test creating multiple exchanges"""
|
|
logger.info("Testing multiple exchanges...")
|
|
|
|
try:
|
|
config = get_config()
|
|
exchanges_config = config.get('exchanges', {})
|
|
|
|
# Create all configured exchanges
|
|
exchanges = ExchangeFactory.create_multiple_exchanges(exchanges_config)
|
|
|
|
logger.info(f"✓ Created {len(exchanges)} exchange interfaces:")
|
|
for name, exchange in exchanges.items():
|
|
logger.info(f" - {name}: {type(exchange).__name__}")
|
|
|
|
return len(exchanges) > 0
|
|
|
|
except Exception as e:
|
|
logger.error(f"✗ Error testing multiple exchanges: {e}")
|
|
return False
|
|
|
|
def main():
|
|
"""Run all tests"""
|
|
logger.info("=" * 50)
|
|
logger.info("TESTING DERIBIT INTEGRATION")
|
|
logger.info("=" * 50)
|
|
|
|
tests = [
|
|
("Credentials", test_deribit_credentials),
|
|
("DeribitInterface", test_deribit_interface),
|
|
("ExchangeFactory", test_exchange_factory),
|
|
("Multiple Exchanges", test_multiple_exchanges)
|
|
]
|
|
|
|
results = []
|
|
for test_name, test_func in tests:
|
|
logger.info(f"\n--- Testing {test_name} ---")
|
|
try:
|
|
result = test_func()
|
|
results.append((test_name, result))
|
|
status = "PASS" if result else "FAIL"
|
|
logger.info(f"{test_name}: {status}")
|
|
except Exception as e:
|
|
logger.error(f"{test_name}: ERROR - {e}")
|
|
results.append((test_name, False))
|
|
|
|
# Summary
|
|
logger.info("\n" + "=" * 50)
|
|
logger.info("TEST SUMMARY")
|
|
logger.info("=" * 50)
|
|
|
|
passed = sum(1 for _, result in results if result)
|
|
total = len(results)
|
|
|
|
for test_name, result in results:
|
|
status = "✓ PASS" if result else "✗ FAIL"
|
|
logger.info(f"{status}: {test_name}")
|
|
|
|
logger.info(f"\nOverall: {passed}/{total} tests passed")
|
|
|
|
if passed == total:
|
|
logger.info("🎉 All tests passed! Deribit integration is working.")
|
|
return True
|
|
else:
|
|
logger.error("❌ Some tests failed. Check the logs above.")
|
|
return False
|
|
|
|
if __name__ == "__main__":
|
|
success = main()
|
|
sys.exit(0 if success else 1) |