freeleaps-ops/jobs/freeleaps-data-backup/test_backup_safe.py

81 lines
2.7 KiB
Python

#!/usr/bin/env python3
"""
Safe test script for backup_script.py functionality
This script will NOT create real snapshots to avoid affecting production data
"""
import os
import sys
import logging
from unittest.mock import Mock, patch
from backup_script import PVCBackupManager
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class SafePVCBackupManager(PVCBackupManager):
"""Safe version that doesn't create real snapshots"""
def __init__(self, test_mode=True):
super().__init__()
self.test_mode = test_mode
if test_mode:
logger.info("Running in TEST MODE - no real snapshots will be created")
def generate_snapshot_name(self, pvc_name, timestamp):
"""Add TEST prefix to avoid conflicts"""
if self.test_mode:
return f"TEST-{pvc_name}-snapshot-{timestamp}"
return super().generate_snapshot_name(pvc_name, timestamp)
def apply_snapshot(self, snapshot_yaml):
"""Mock snapshot creation in test mode"""
if self.test_mode:
logger.info(f"[TEST MODE] Would create snapshot: {snapshot_yaml['metadata']['name']}")
return {"metadata": {"name": snapshot_yaml['metadata']['name']}}
return super().apply_snapshot(snapshot_yaml)
def test_dry_run():
"""Show what would be done without making changes"""
print("=== Dry Run Test ===")
backup_manager = SafePVCBackupManager(test_mode=True)
print("Configuration:")
print(f" Namespace: {backup_manager.namespace}")
print(f" PVCs: {backup_manager.pvcs_to_backup}")
print(f" Snapshot class: {backup_manager.snapshot_class}")
print("\nWould create snapshots:")
for pvc in backup_manager.pvcs_to_backup:
timestamp = backup_manager.get_pst_date()
snapshot_name = backup_manager.generate_snapshot_name(pvc, timestamp)
print(f" {snapshot_name}")
def test_yaml_generation():
"""Test YAML generation without applying"""
print("=== YAML Generation Test ===")
backup_manager = SafePVCBackupManager(test_mode=True)
for pvc in backup_manager.pvcs_to_backup:
timestamp = backup_manager.get_pst_date()
snapshot_name = backup_manager.generate_snapshot_name(pvc, timestamp)
snapshot_yaml = backup_manager.create_snapshot_yaml(pvc, snapshot_name)
print(f"\nYAML for {pvc}:")
import yaml
print(yaml.dump(snapshot_yaml, default_flow_style=False))
def main():
"""Run safe tests"""
print("Starting SAFE backup tests...")
print("No real snapshots will be created")
test_dry_run()
test_yaml_generation()
print("\n=== Safe tests completed ===")
if __name__ == "__main__":
main()