Files
Homelabs-Pi-Storage/tools/test_snapshot_improvements.py

153 lines
5.2 KiB
Python

#!/usr/bin/env python3
"""
Script de prueba para las mejoras de snapshots automáticos
Prueba las mejoras 1, 2 y 4 implementadas en raid_manager.py
"""
import subprocess
import sys
import os
# Agregar el directorio actual al path para importar raid_manager
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from raid_manager import RAIDManager, UIConsole, SystemManager
def test_snapshot_service_verification():
"""Prueba la verificación del servicio zfs-auto-snapshot"""
print("🧪 Probando verificación del servicio zfs-auto-snapshot...")
# Crear instancia del manager
manager = RAIDManager()
# Probar verificación del servicio
print("🔍 Verificando servicio zfs-auto-snapshot...")
result = manager._verify_zfs_auto_snapshot_service()
if result:
print("✅ Verificación exitosa - servicio disponible")
else:
print("❌ Servicio no disponible o no instalado")
return result
def test_snapshot_access_methods():
"""Prueba la función de mostrar métodos de acceso"""
print("\n🧪 Probando métodos de acceso a snapshots...")
# Crear instancia del manager
manager = RAIDManager()
# Probar con un dataset ficticio
test_dataset = "storage/test_data"
print(f"📁 Mostrando métodos de acceso para dataset: {test_dataset}")
manager._show_snapshot_access_methods(test_dataset)
print("✅ Métodos de acceso mostrados correctamente")
def test_demo_snapshot_creation():
"""Prueba la creación de snapshot de demostración (simulado)"""
print("\n🧪 Probando creación de snapshot de demostración...")
# Verificar si ZFS está disponible
try:
subprocess.run(['which', 'zfs'], check=True, capture_output=True)
print("✅ ZFS disponible para pruebas")
# Verificar si hay algún pool disponible para pruebas
try:
result = subprocess.run(['zpool', 'list', '-H'],
capture_output=True, text=True, check=True)
if result.stdout.strip():
pools = result.stdout.strip().split('\n')
print(f"📊 Pools ZFS encontrados: {len(pools)}")
for pool in pools:
pool_name = pool.split()[0]
print(f" • {pool_name}")
# Avisar que la función está lista para usar
print("💡 La función _create_demo_snapshot está lista para usar con pools reales")
return True
else:
print("⚠️ No hay pools ZFS disponibles para pruebas")
return False
except subprocess.CalledProcessError:
print("⚠️ No se pudieron listar pools ZFS")
return False
except subprocess.CalledProcessError:
print("❌ ZFS no está disponible en el sistema")
return False
def test_snapshot_management_commands():
"""Prueba la función de comandos de gestión de snapshots"""
print("\n🧪 Probando comandos de gestión de snapshots...")
# Crear instancia del manager
manager = RAIDManager()
# Probar con un dataset ficticio
test_dataset = "storage/test_data"
print(f"📝 Mostrando comandos para dataset: {test_dataset}")
manager._show_snapshot_management_commands(test_dataset)
print("✅ Comandos de gestión mostrados correctamente")
def main():
"""Función principal de pruebas"""
print("🚀 Iniciando pruebas de mejoras de snapshots")
print("=" * 60)
# Contador de pruebas exitosas
tests_passed = 0
total_tests = 4
# Prueba 1: Verificación del servicio
try:
if test_snapshot_service_verification():
tests_passed += 1
except Exception as e:
print(f"❌ Error en prueba de verificación: {e}")
# Prueba 2: Métodos de acceso
try:
test_snapshot_access_methods()
tests_passed += 1
except Exception as e:
print(f"❌ Error en prueba de métodos de acceso: {e}")
# Prueba 3: Creación de snapshot demo
try:
if test_demo_snapshot_creation():
tests_passed += 1
except Exception as e:
print(f"❌ Error en prueba de snapshot demo: {e}")
# Prueba 4: Comandos de gestión
try:
test_snapshot_management_commands()
tests_passed += 1
except Exception as e:
print(f"❌ Error en prueba de comandos: {e}")
# Resumen final
print("\n" + "=" * 60)
print(f"📊 Resumen de pruebas: {tests_passed}/{total_tests} exitosas")
if tests_passed == total_tests:
print("🎉 ¡Todas las mejoras implementadas correctamente!")
elif tests_passed > total_tests // 2:
print("✅ La mayoría de mejoras funcionan correctamente")
else:
print("⚠️ Algunas mejoras necesitan revisión")
print("\n💡 Las mejoras implementadas:")
print(" 1. ✅ Verificación/instalación automática de zfs-auto-snapshot")
print(" 2. ✅ Creación de snapshot de demostración")
print(" 3. ❌ NO IMPLEMENTADO: Pool de prueba automático")
print(" 4. ✅ Métodos detallados de acceso a snapshots")
if __name__ == "__main__":
main()