Files
netzwerk_diagramm_scanner/test_system.py

249 lines
6.8 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Test script to verify network scanner functionality
Run this to check if everything is working correctly
"""
import sys
import subprocess
import socket
import json
from pathlib import Path
def test_python_version():
"""Check Python version"""
print("Testing Python version...", end=" ")
version = sys.version_info
if version.major >= 3 and version.minor >= 8:
print(f"✓ Python {version.major}.{version.minor}.{version.micro}")
return True
else:
print(f"❌ Python {version.major}.{version.minor} (need 3.8+)")
return False
def test_network_connectivity():
"""Test basic network connectivity"""
print("Testing network connectivity...", end=" ")
try:
# Try to connect to common DNS server
socket.create_connection(("8.8.8.8", 53), timeout=3)
print("")
return True
except:
print("❌ No network connectivity")
return False
def test_commands():
"""Test required system commands"""
commands = ['ping', 'ip', 'ssh']
all_ok = True
for cmd in commands:
print(f"Testing command '{cmd}'...", end=" ")
try:
result = subprocess.run(['which', cmd], capture_output=True, timeout=2)
if result.returncode == 0:
print("")
else:
print(f"'{cmd}' not found")
all_ok = False
except:
print(f"❌ Error checking '{cmd}'")
all_ok = False
return all_ok
def test_scripts_exist():
"""Check if all scripts exist"""
scripts = [
'network_scanner.py',
'pfsense_scanner.py',
'svg_generator.py',
'integrated_scanner.py',
'quickstart.sh'
]
all_ok = True
for script in scripts:
print(f"Checking {script}...", end=" ")
if Path(script).exists():
print("")
else:
print(f"❌ Missing")
all_ok = False
return all_ok
def test_script_syntax():
"""Test Python script syntax"""
scripts = [
'network_scanner.py',
'pfsense_scanner.py',
'svg_generator.py',
'integrated_scanner.py'
]
all_ok = True
for script in scripts:
print(f"Testing {script} syntax...", end=" ")
try:
result = subprocess.run(
['python3', '-m', 'py_compile', script],
capture_output=True,
timeout=5
)
if result.returncode == 0:
print("")
else:
print(f"❌ Syntax error")
all_ok = False
except:
print(f"❌ Error")
all_ok = False
return all_ok
def test_local_network_detection():
"""Test local network detection"""
print("Detecting local networks...", end=" ")
try:
result = subprocess.run(
['ip', 'route', 'show'],
capture_output=True,
text=True,
timeout=5
)
networks = []
for line in result.stdout.splitlines():
if '/' in line and not line.startswith('default'):
parts = line.split()
if parts and '/' in parts[0]:
networks.append(parts[0])
if networks:
print(f"✓ Found {len(networks)} network(s)")
for net in networks[:3]:
print(f" - {net}")
return True
else:
print("⚠️ No networks detected")
return True
except:
print("❌ Error detecting networks")
return False
def test_ssh_config():
"""Check SSH configuration"""
print("Checking SSH keys...", end=" ")
ssh_dir = Path.home() / '.ssh'
keys = []
for key_file in ['id_rsa', 'id_ed25519', 'id_ecdsa']:
key_path = ssh_dir / key_file
if key_path.exists():
keys.append(key_file)
if keys:
print(f"✓ Found {len(keys)} key(s): {', '.join(keys)}")
return True
else:
print("⚠️ No SSH keys found (needed for device access)")
return True # Not critical
def create_test_config():
"""Create a test configuration"""
print("Creating test configuration...", end=" ")
config = {
"ssh_user": "root",
"ssh_key_path": None,
"timeout": 2,
"additional_networks": [],
"special_devices": {},
"scan_options": {
"max_workers": 10,
"ping_timeout": 2,
"port_scan_timeout": 1
}
}
try:
with open('test_config.json', 'w') as f:
json.dump(config, f, indent=2)
print("✓ Created test_config.json")
return True
except Exception as e:
print(f"❌ Error: {e}")
return False
def main():
print("="*60)
print("Network Scanner - System Test")
print("="*60)
print()
tests = [
("Python Version", test_python_version),
("Network Connectivity", test_network_connectivity),
("System Commands", test_commands),
("Script Files", test_scripts_exist),
("Script Syntax", test_script_syntax),
("Network Detection", test_local_network_detection),
("SSH Configuration", test_ssh_config),
("Test Config", create_test_config),
]
results = []
for test_name, test_func in tests:
print(f"\n--- {test_name} ---")
try:
result = test_func()
results.append((test_name, result))
except Exception as e:
print(f"❌ Test failed with error: {e}")
results.append((test_name, False))
print()
# Summary
print("="*60)
print("Test Summary")
print("="*60)
print()
passed = sum(1 for _, result in results if result)
total = len(results)
for test_name, result in results:
status = "✓ PASS" if result else "❌ FAIL"
print(f"{status:8} {test_name}")
print()
print(f"Results: {passed}/{total} tests passed")
print()
if passed == total:
print("🎉 All tests passed! The scanner is ready to use.")
print()
print("Next steps:")
print("1. Edit config.json with your network details")
print("2. Run: ./quickstart.sh")
print(" or: ./integrated_scanner.py --generate-svg")
else:
print("⚠️ Some tests failed. Please check the errors above.")
print()
print("Common issues:")
print("- Missing system commands: install net-tools, iproute2, openssh-client")
print("- No SSH keys: run 'ssh-keygen' to create one")
print("- Script syntax errors: check Python version")
print()
print("="*60)
return 0 if passed == total else 1
if __name__ == '__main__':
sys.exit(main())