# Testing Guide - MySQL Connector Migration Questa guida descrive come testare la migrazione da `mysql-connector-python` ad `aiomysql`. ## πŸ“‹ Prerequisiti ### 1. Installa le dipendenze ```bash # Installa dipendenze standard (senza mysql-connector-python) uv pip install -e . # Oppure con pip pip install -e . ``` ### 2. Verifica configurazione database Assicurati che il file di configurazione contenga le credenziali database corrette: - Host, porta, user, password, database name ### 3. Backup database (raccomandato) ```bash mysqldump -u username -p database_name > backup_$(date +%Y%m%d).sql ``` --- ## πŸ§ͺ Suite di Test ### Test 1: Database Connection Test **Script**: `test_db_connection.py` **Cosa testa**: - βœ… Connessione async al database - βœ… Query SELECT semplici - βœ… Query parametrizzate (SQL injection protection) - βœ… ModalitΓ  autocommit - βœ… Cleanup connessioni - βœ… Error handling **Come eseguire**: ```bash cd /home/alex/devel/ASE python test_db_connection.py ``` **Output atteso**: ``` ============================================================== AIOMYSQL MIGRATION TEST SUITE ============================================================== Start time: 2025-10-11 16:30:00 ============================================================== TEST 1: Basic Async Connection ============================================================== βœ… Connection established successfully βœ… Test query result: (1,) βœ… Connection closed successfully [... altri test ...] ============================================================== TEST SUMMARY ============================================================== βœ… PASS | Connection Test βœ… PASS | SELECT Query Test βœ… PASS | Parameterized Query Test βœ… PASS | Autocommit Test βœ… PASS | Connection Cleanup Test βœ… PASS | Error Handling Test ============================================================== Results: 6/6 tests passed ============================================================== πŸŽ‰ All tests PASSED! Migration successful! ``` **Troubleshooting**: | Errore | Causa | Soluzione | |--------|-------|-----------| | `ImportError` | Moduli non trovati | Esegui da directory root progetto | | `Connection refused` | Database non raggiungibile | Verifica host/porta database | | `Access denied` | Credenziali errate | Verifica user/password | | `Table doesn't exist` | Tabella non esiste | Verifica nome tabella in config | --- ### Test 2: FTP Server Test **Script**: `test_ftp_migration.py` **Cosa testa**: - βœ… Connessione al server FTP - βœ… Upload singolo file CSV - βœ… Upload multipli concorrenti - βœ… Comandi SITE (ADDU, DISU, LSTU) **Come eseguire**: ```bash # Terminal 1: Avvia il server FTP cd /home/alex/devel/ASE python src/ftp_csv_receiver.py # Terminal 2: Esegui i test cd /home/alex/devel/ASE python test_ftp_migration.py ``` **Output atteso**: ``` ============================================================== FTP MIGRATION TEST SUITE ============================================================== FTP Server: localhost:2121 ============================================================== ============================================================== TEST 1: FTP Connection Test ============================================================== βœ… Connected to FTP server localhost:2121 βœ… Current directory: / βœ… Directory listing retrieved (5 items) βœ… FTP connection test passed [... altri test ...] ============================================================== TEST SUMMARY ============================================================== βœ… PASS | FTP Connection βœ… PASS | File Upload βœ… PASS | Multiple Uploads βœ… PASS | SITE Commands ============================================================== Results: 4/4 tests passed ============================================================== πŸŽ‰ All FTP tests PASSED! ``` **Dopo i test, verifica**: 1. **Log del server FTP**: Controlla che i file siano stati ricevuti ```bash tail -f logs/ftp_csv_receiver.log ``` 2. **Database**: Verifica che i record siano stati inseriti ```sql SELECT * FROM received ORDER BY id DESC LIMIT 10; ``` 3. **Tabella utenti**: Verifica creazione/modifica utenti test ```sql SELECT * FROM ftpusers WHERE ftpuser LIKE 'testuser%'; ``` **Troubleshooting**: | Errore | Causa | Soluzione | |--------|-------|-----------| | `Connection refused` | Server FTP non avviato | Avvia `python src/ftp_csv_receiver.py` | | `Login failed` | Credenziali FTP errate | Aggiorna FTP_CONFIG nello script | | `Permission denied` | Permessi filesystem | Verifica permessi directory FTP | | `SITE command failed` | Admin privileges | Usa user admin per SITE commands | --- ## πŸ“Š Verifica Manuale ### Verifica 1: Log del Server ```bash # Durante i test, monitora i log in tempo reale tail -f logs/ftp_csv_receiver.log tail -f logs/send_orchestrator.log ``` **Cosa cercare**: - βœ… "Connected (async)" - conferma uso aiomysql - βœ… Nessun errore "mysql.connector" - βœ… File processati senza errori - ❌ "RuntimeError: asyncio.run()" - indica problema event loop ### Verifica 2: Query Database Dirette ```sql -- Verifica record CSV inseriti SELECT id, filename, unit_name, tool_name, created_at FROM received WHERE created_at > NOW() - INTERVAL 1 HOUR ORDER BY id DESC; -- Verifica utenti FTP creati nei test SELECT ftpuser, virtpath, disabled_at, created_at FROM ftpusers WHERE ftpuser LIKE 'testuser%'; -- Conta record per status SELECT status, COUNT(*) as count FROM received GROUP BY status; ``` ### Verifica 3: Performance Comparison **Prima della migrazione** (con mysql-connector-python): ```bash # Upload 100 file e misura tempo time for i in {1..100}; do echo "test data $i" > test_$i.csv ftp -n localhost 2121 < test_${i}_${j}.csv ftp -n localhost 2121 < test_${i}_${j}.csv ftp -n localhost 2121 <=0.2.0 ``` ### Problema 2: "RuntimeError: This event loop is already running" **Causa**: Tentativo di usare asyncio.run() da codice giΓ  async **Soluzione**: Verifica di non chiamare wrapper sync da codice async ### Problema 3: File CSV non appare nel database **Causa**: Errore parsing o inserimento **Soluzione**: 1. Controlla log server per errori 2. Verifica formato file CSV 3. Verifica mapping unit/tool in config ### Problema 4: "Too many connections" **Causa**: Connessioni non chiuse correttamente **Soluzione**: 1. Verifica finally block chiuda sempre conn 2. Riavvia database se necessario: `systemctl restart mysql` 3. Aumenta max_connections in MySQL --- ## βœ… Checklist Finale Prima di dichiarare la migrazione completa: ### Database Tests - [ ] test_db_connection.py passa 6/6 test - [ ] Query SELECT funzionano - [ ] Query INSERT funzionano - [ ] Parametrized queries funzionano - [ ] Connection pool gestito correttamente ### FTP Tests - [ ] test_ftp_migration.py passa 4/4 test - [ ] File CSV ricevuti e processati - [ ] Record inseriti nel database - [ ] SITE ADDU funziona - [ ] SITE DISU funziona - [ ] SITE ENAU funziona - [ ] SITE LSTU funziona ### Load Tests - [ ] Test carico medio (10 client) passa - [ ] Test carico alto (50 client) passa - [ ] Nessun memory leak - [ ] Nessun connection leak ### Verification - [ ] Log puliti senza errori - [ ] Database records corretti - [ ] Performance uguali o migliori - [ ] Nessun regression su funzionalitΓ  esistenti --- ## πŸ“ˆ Metriche di Successo | Metrica | Target | Come Verificare | |---------|--------|-----------------| | Test Pass Rate | 100% | Tutti i test passano | | Database Inserts | 100% | Tutti i file β†’ record DB | | FTP Upload Success | >95% | File processati / File caricati | | Error Rate | <1% | Errori in log / Operazioni totali | | Performance | β‰₯100% | Tempo nuovo ≀ tempo vecchio | --- ## πŸš€ Prossimi Passi Dopo testing completato con successo: 1. **Staging Deployment** - Deploy in ambiente staging - Test con traffico reale - Monitoraggio per 24-48 ore 2. **Production Deployment** - Deploy in produzione con piano rollback - Monitoraggio intensivo prime ore - Validazione metriche performance 3. **Cleanup** - Rimuovere mysql-connector-python se non usato - Aggiornare documentazione - Archiviare codice legacy --- ## πŸ“ž Support Per problemi o domande: - Controlla questa guida - Controlla [MYSQL_CONNECTOR_MIGRATION.md](MYSQL_CONNECTOR_MIGRATION.md) - Controlla log applicazione - Controlla log database --- **Buon testing!** πŸ§ͺ