#!/usr/bin/env python3 """ Integration test for Debian Atomic workflow Tests the complete pipeline: treefile โ†’ apt-ostree โ†’ output """ import subprocess import sys import os from pathlib import Path def print_step(step_num, title, description): """Print a test step header""" print(f"\n{'='*60}") print(f"Step {step_num}: {title}") print(f"{'='*60}") print(description) print() def test_debian_atomic_integration(): """Test the complete Debian Atomic integration workflow""" print("๐Ÿงช Testing Debian Atomic Integration Workflow") print("Testing: treefile โ†’ apt-ostree โ†’ output") print("=" * 60) # Step 1: Validate treefiles print_step(1, "Treefile Validation", "Validating that our treefiles are compatible with apt-ostree") treefiles_dir = Path("treefiles") if not treefiles_dir.exists(): print("โŒ Treefiles directory not found") return False treefiles = list(treefiles_dir.glob("*.yaml")) if not treefiles: print("โŒ No treefiles found") return False print(f"โœ… Found {len(treefiles)} treefiles:") for tf in treefiles: print(f" - {tf.name}") # Step 2: Test apt-ostree compatibility print_step(2, "apt-ostree Compatibility", "Testing if apt-ostree can process our treefiles") # Check if apt-ostree is available apt_ostree_path = Path("/var/home/rob/Documents/Projects/overseer/apt-ostree/target/release/simple-cli") if not apt_ostree_path.exists(): print("โŒ apt-ostree binary not found") print(" Expected: /var/home/rob/Documents/Projects/overseer/apt-ostree/target/release/simple-cli") return False print(f"โœ… apt-ostree found: {apt_ostree_path}") # Step 3: Test treefile processing print_step(3, "Treefile Processing", "Testing apt-ostree processing of our treefiles") success_count = 0 for treefile in treefiles: print(f"Testing: {treefile.name}") try: # Run apt-ostree compose tree --dry-run result = subprocess.run([ str(apt_ostree_path), "compose", "tree", "--dry-run", str(treefile) ], capture_output=True, text=True, timeout=30) if result.returncode == 0: print(f" โœ… {treefile.name} processed successfully") success_count += 1 else: print(f" โŒ {treefile.name} failed:") print(f" stdout: {result.stdout}") print(f" stderr: {result.stderr}") except subprocess.TimeoutExpired: print(f" โŒ {treefile.name} timed out") except Exception as e: print(f" โŒ {treefile.name} error: {e}") print(f"\nTreefile processing results: {success_count}/{len(treefiles)} successful") # Step 4: Validate workflow components print_step(4, "Workflow Component Validation", "Checking that all required components are available") components = { "debian-forge": Path("/var/home/rob/Documents/Projects/overseer/debian-forge"), "debian-atomic-configs": Path("/var/home/rob/Documents/Projects/overseer/debian-atomic-configs"), "apt-ostree": Path("/var/home/rob/Documents/Projects/overseer/apt-ostree"), "debian-atomic-blueprint": Path("/var/home/rob/Documents/Projects/overseer/debian-atomic-blueprint.toml") } component_status = {} for name, path in components.items(): if path.exists(): print(f" โœ… {name}: {path}") component_status[name] = True else: print(f" โŒ {name}: {path} (missing)") component_status[name] = False # Step 5: Summary print_step(5, "Integration Test Summary", "Overall status of Debian Atomic integration") total_components = len(components) working_components = sum(component_status.values()) total_treefiles = len(treefiles) working_treefiles = success_count print(f"๐Ÿ“Š Component Status: {working_components}/{total_components} working") print(f"๐Ÿ“Š Treefile Status: {working_treefiles}/{total_treefiles} working") if working_components == total_components and working_treefiles == total_treefiles: print("\n๐ŸŽ‰ All components working! Debian Atomic integration is ready.") return True else: print("\nโš ๏ธ Some components have issues. Check the details above.") return False if __name__ == "__main__": success = test_debian_atomic_integration() sys.exit(0 if success else 1)