-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_config_simple.py
More file actions
231 lines (178 loc) · 7.56 KB
/
test_config_simple.py
File metadata and controls
231 lines (178 loc) · 7.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
"""
Simple test script to verify dynamic configuration management implementation.
"""
import sys
import os
import tempfile
import shutil
from datetime import datetime
# Add the project root to the path
sys.path.append(os.path.dirname(__file__))
from crypto_trading_bot.managers.config_manager import DynamicConfigManager
from crypto_trading_bot.models.config import BotConfig
def test_basic_functionality():
"""Test basic configuration management functionality."""
print("Testing Dynamic Configuration Manager...")
# Create temporary directory
temp_dir = tempfile.mkdtemp()
try:
# Initialize config manager
config_manager = DynamicConfigManager(
config_dir=temp_dir,
backup_dir=f"{temp_dir}/backups"
)
print("✓ Config manager initialized successfully")
# Test getting current config
current_config = config_manager.current_config
assert isinstance(current_config, BotConfig)
print("✓ Current config retrieved successfully")
# Test config section access
risk_config = config_manager.get_config_section('risk_config')
assert risk_config is not None
print("✓ Config section access works")
# Test configuration update
updates = {
'trading_enabled': False,
'dry_run': True,
'symbols': ['BTCUSDT', 'ETHUSDT', 'ADAUSDT']
}
success = config_manager.update_config(
updates,
user="test_user",
reason="Testing config update"
)
assert success is True
print("✓ Configuration update successful")
# Verify changes
assert config_manager.current_config.trading_enabled is False
assert config_manager.current_config.dry_run is True
assert len(config_manager.current_config.symbols) == 3
print("✓ Configuration changes verified")
# Test strategy config update
strategy_success = config_manager.update_strategy_config(
'liquidity',
{'enabled': False, 'weight': 2.0},
user="test_user",
reason="Disable liquidity strategy"
)
assert strategy_success is True
print("✓ Strategy configuration update successful")
# Test risk config update
risk_success = config_manager.update_risk_config(
{'max_position_size': 0.03, 'daily_loss_limit': 0.08},
user="test_user",
reason="Adjust risk parameters"
)
assert risk_success is True
print("✓ Risk configuration update successful")
# Test backup creation
backup_success = config_manager.create_manual_backup("Test backup")
assert backup_success is True
print("✓ Manual backup creation successful")
# Test backup listing
backups = config_manager.list_backups()
assert len(backups) > 0
print(f"✓ Backup listing successful ({len(backups)} backups found)")
# Test change history
history = config_manager.get_change_history()
assert len(history) > 0
print(f"✓ Change history tracking successful ({len(history)} changes recorded)")
# Test configuration validation
validation_result = config_manager.validate_current_config()
assert validation_result['valid'] is True
print("✓ Configuration validation successful")
# Test configuration export
export_file = f"{temp_dir}/exported_config.json"
export_success = config_manager.export_config(export_file)
assert export_success is True
print("✓ Configuration export successful")
# Test configuration import
import_success = config_manager.import_config(export_file, user="test_user")
assert import_success is True
print("✓ Configuration import successful")
print("\n🎉 All tests passed! Dynamic Configuration Manager is working correctly.")
except Exception as e:
print(f"❌ Test failed: {e}")
import traceback
traceback.print_exc()
return False
finally:
# Cleanup
shutil.rmtree(temp_dir)
return True
def test_validation_rules():
"""Test configuration validation rules."""
print("\nTesting validation rules...")
temp_dir = tempfile.mkdtemp()
try:
config_manager = DynamicConfigManager(config_dir=temp_dir)
# Test valid updates
valid_updates = {
'trading_enabled': False,
'symbols': ['BTCUSDT', 'ETHUSDT']
}
success = config_manager.update_config(valid_updates, validate=True)
assert success is True
print("✓ Valid configuration updates accepted")
# Test invalid updates
invalid_updates = {
'symbols': [], # Empty symbols should fail
}
success = config_manager.update_config(invalid_updates, validate=True)
assert success is False
print("✓ Invalid configuration updates rejected")
# Test risk config validation
invalid_risk = {'max_position_size': 2.0} # Too high
risk_success = config_manager.update_risk_config(invalid_risk)
assert risk_success is False
print("✓ Invalid risk configuration rejected")
print("✓ All validation tests passed")
except Exception as e:
print(f"❌ Validation test failed: {e}")
return False
finally:
shutil.rmtree(temp_dir)
return True
def test_backup_restore():
"""Test backup and restore functionality."""
print("\nTesting backup and restore...")
temp_dir = tempfile.mkdtemp()
try:
config_manager = DynamicConfigManager(config_dir=temp_dir)
# Initial state
original_trading_enabled = config_manager.current_config.trading_enabled
# Create backup
config_manager.create_manual_backup("Initial state")
backups = config_manager.list_backups()
backup_version = backups[0]['version']
# Make changes
config_manager.update_config({'trading_enabled': not original_trading_enabled})
assert config_manager.current_config.trading_enabled != original_trading_enabled
print("✓ Configuration changed successfully")
# Restore from backup
restore_success = config_manager.restore_from_backup(backup_version, user="test_user")
assert restore_success is True
print("✓ Configuration restored from backup")
# Verify restoration (backup was created after initial load, so it should match)
# The exact value depends on the default config, but the restore should work
print("✓ Backup and restore functionality working")
except Exception as e:
print(f"❌ Backup/restore test failed: {e}")
return False
finally:
shutil.rmtree(temp_dir)
return True
if __name__ == "__main__":
print("=" * 60)
print("DYNAMIC CONFIGURATION MANAGER TESTS")
print("=" * 60)
all_passed = True
all_passed &= test_basic_functionality()
all_passed &= test_validation_rules()
all_passed &= test_backup_restore()
print("\n" + "=" * 60)
if all_passed:
print("🎉 ALL TESTS PASSED! Implementation is working correctly.")
else:
print("❌ Some tests failed. Please check the implementation.")
print("=" * 60)