Files
trading_bot_v3/test-automation-fixes.js
mindesbunister 1e4f305657 fix: emergency automation fix - stop runaway trading loops
- Replace automation service with emergency rate-limited version
- Add 5-minute minimum interval between automation starts
- Implement forced Chromium process cleanup on stop
- Backup broken automation service as .broken file
- Emergency service prevents multiple simultaneous automations
- Fixed 1400+ Chromium process accumulation issue
- Tested and confirmed: rate limiting works, processes stay at 0
2025-07-24 20:33:20 +02:00

124 lines
4.4 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
/**
* Test script to verify the automation fixes
* - Ensures stopped state is respected
* - Verifies intervals work correctly
* - Tests position-aware logic
*/
async function testAutomationFixes() {
console.log('🧪 Testing Automation Fixes');
console.log('===========================');
const baseUrl = 'http://localhost:9001';
// Test 1: Verify automation is stopped
console.log('\n1⃣ Testing initial stopped state...');
const statusResponse = await fetch(`${baseUrl}/api/automation/status`);
const status = await statusResponse.json();
if (status.status.isActive === false) {
console.log('✅ Automation properly shows as inactive');
} else {
console.log('❌ ISSUE: Automation still shows as active!');
return;
}
// Test 2: Check if position detection works
console.log('\n2⃣ Testing position detection...');
const positionsResponse = await fetch(`${baseUrl}/api/drift/positions`);
const positions = await positionsResponse.json();
const hasPositions = positions && positions.length > 0;
console.log(`📊 Current positions: ${hasPositions ? positions.length : 0}`);
if (hasPositions) {
console.log('📊 Positions detected - automation should prevent auto-restart');
// Test 3: Try to start automation with positions (should be prevented)
console.log('\n3⃣ Testing start prevention with positions...');
const startResponse = await fetch(`${baseUrl}/api/automation/start`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
userId: 'test-user',
mode: 'SIMULATION',
symbol: 'SOLUSD',
timeframe: '5',
selectedTimeframes: ['5', '15', '30'],
tradingAmount: 100,
maxLeverage: 3,
maxDailyTrades: 5,
riskPercentage: 2
})
});
const startResult = await startResponse.json();
console.log(`🔄 Start attempt result: ${startResult.success ? 'STARTED' : 'PREVENTED'}`);
if (!startResult.success && startResult.message && startResult.message.includes('positions')) {
console.log('✅ Correctly prevented start due to open positions');
} else if (startResult.success) {
console.log('⚠️ WARNING: Automation started despite positions (checking if position-aware mode)');
// Wait a bit and check if it's doing constant analysis
console.log('⏱️ Waiting 30 seconds to check for constant analysis...');
await new Promise(resolve => setTimeout(resolve, 30000));
// Stop it
await fetch(`${baseUrl}/api/automation/stop`, { method: 'POST' });
console.log('🛑 Stopped automation for testing');
}
} else {
console.log('📊 No positions detected - normal automation behavior expected');
}
// Test 4: Monitor for 30 seconds to ensure no automatic analysis
console.log('\n4⃣ Monitoring for 30 seconds to ensure no automatic analysis...');
let analysisDetected = false;
const startTime = Date.now();
while (Date.now() - startTime < 30000) {
// Check logs for any analysis activity
try {
const logCheck = await fetch(`${baseUrl}/api/health`);
// If this were doing analysis, we'd see heavy load
await new Promise(resolve => setTimeout(resolve, 5000));
process.stdout.write('.');
} catch (error) {
// Container might be under heavy analysis load
analysisDetected = true;
break;
}
}
console.log('\n');
if (!analysisDetected) {
console.log('✅ No automatic analysis detected - respects stopped state');
} else {
console.log('❌ ISSUE: Automatic analysis still running despite stopped state');
}
// Final verification
console.log('\n🎯 Final Status Check...');
const finalStatus = await fetch(`${baseUrl}/api/automation/status`);
const finalResult = await finalStatus.json();
console.log(`📊 Final automation state: ${finalResult.status.isActive ? 'ACTIVE' : 'INACTIVE'}`);
if (!finalResult.status.isActive) {
console.log('\n🎉 SUCCESS: All automation fixes working correctly!');
console.log('✅ Stopped state is respected');
console.log('✅ No constant analysis loops');
console.log('✅ Position-aware logic implemented');
} else {
console.log('\n❌ ISSUE: Automation still showing as active');
}
}
if (require.main === module) {
testAutomationFixes().catch(console.error);
}