"""Detection locale de commandes potentiellement destructives proposees par l'assistant IA (jamais un blocage, seulement un avertissement).""" import sys, pathlib sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent.parent)) from app.ai.danger import is_dangerous, check_dangerous print("=== 1. Commandes destructrices detectees ===") dangerous_examples = [ "rm -rf /var/log/*", "rm -fr /tmp/build", "mkfs.ext4 /dev/sdb1", "dd if=/dev/zero of=/dev/sda bs=1M", "wipefs -a /dev/sdb", "sudo shutdown -h now", "sudo reboot", "iptables -F", "nft flush ruleset", "DROP DATABASE production;", "DELETE FROM users;", "docker system prune -a --volumes", "zpool destroy tank", "lvremove /dev/vg0/lv0", "vgremove vg0", ] for cmd in dangerous_examples: result = is_dangerous(cmd) print(f" {'[X]' if result else '[ ]'} {cmd}") assert result, f"aurait du etre detectee comme dangereuse : {cmd}" print(" OK") print() print("=== 2. Commandes normales non signalees ===") safe_examples = [ "df -h", "systemctl status nginx", "docker ps -a", "ls -la /var/log", "find /var -type f -printf '%s %p\\n' | sort -nr | head -20", "SELECT * FROM users WHERE id = 1;", "git rm --cached fichier.txt", # 'rm' present mais pas -rf : ne doit pas matcher ] for cmd in safe_examples: result = is_dangerous(cmd) print(f" {'[X]' if result else '[ ]'} {cmd}") assert not result, f"n'aurait pas du etre signalee : {cmd}" print(" OK") print() print("=== 3. check_dangerous() renvoie une explication exploitable ===") matches = check_dangerous("rm -rf /") print(" correspondances:", [m.label for m in matches]) assert matches and "rm" in matches[0].label.lower() print(" OK") print() print("AI DANGER : TOUS LES TESTS OK")