#!/usr/bin/env python3 """ Test-Skript für die blake2b-Hash-Implementierung. Testet die Hash-Berechnung für XML-Dateien. """ import hashlib import tempfile from pathlib import Path import sys import os # Füge src-Verzeichnis zum Python-Pfad hinzu sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src')) from conf import XmlFile def test_blake2b_hash_calculation(): """Testet die blake2b-Hash-Berechnung.""" print("=== Test: blake2b-Hash-Berechnung ===") # Erstelle temporäre XML-Testdatei test_xml_content = """ Test-Inhalt für Hash-Berechnung Weitere Testdaten """ with tempfile.NamedTemporaryFile(mode='w', suffix='.xml', delete=False, encoding='utf-8') as f: f.write(test_xml_content) temp_xml_path = Path(f.name) try: # Berechne Hash manuell with open(temp_xml_path, 'rb') as f: file_content = f.read() hash_obj = hashlib.blake2b(file_content) expected_hash = f"blake2b:{hash_obj.hexdigest()}" print(f"Temporäre XML-Datei: {temp_xml_path}") print(f"Erwarteter Hash: {expected_hash}") # Teste XmlFile-Objekt xml_file = XmlFile(xml=temp_xml_path) print(f"XmlFile erstellt: {xml_file.xml}") print(f"Initiale hashsum: {xml_file.hashsum}") # Simuliere Hash-Berechnung xml_file.hashsum = expected_hash print(f"Hash gesetzt: {xml_file.hashsum}") # Verifikation assert xml_file.hashsum == expected_hash, "Hash-Wert stimmt nicht überein!" assert xml_file.hashsum.startswith("blake2b:"), "Hash-Präfix fehlt!" print("[OK] Test erfolgreich: Hash-Berechnung funktioniert korrekt") finally: # Aufräumen if temp_xml_path.exists(): temp_xml_path.unlink() def test_xml_file_model(): """Testet das XmlFile-Modell.""" print("\n=== Test: XmlFile-Modell ===") # Test 1: XmlFile ohne hashsum xml_file1 = XmlFile(xml=Path("test.xml")) print(f"XmlFile ohne hashsum: {xml_file1}") print(f"hashsum ist None: {xml_file1.hashsum is None}") # Test 2: XmlFile mit hashsum test_hash = "blake2b:1234567890abcdef" xml_file2 = XmlFile(xml=Path("test2.xml"), hashsum=test_hash) print(f"XmlFile mit hashsum: {xml_file2}") print(f"hashsum: {xml_file2.hashsum}") # Verifikation assert xml_file1.hashsum is None, "Initiale hashsum sollte None sein" assert xml_file2.hashsum == test_hash, "Gesetzte hashsum stimmt nicht überein" print("[OK] Test erfolgreich: XmlFile-Modell funktioniert korrekt") def test_hash_consistency(): """Testet die Konsistenz der Hash-Berechnung.""" print("\n=== Test: Hash-Konsistenz ===") test_content = b"Test content for consistency check" # Berechne Hash mehrmals hash1 = hashlib.blake2b(test_content).hexdigest() hash2 = hashlib.blake2b(test_content).hexdigest() hash3 = hashlib.blake2b(test_content).hexdigest() print(f"Hash 1: {hash1}") print(f"Hash 2: {hash2}") print(f"Hash 3: {hash3}") # Verifikation assert hash1 == hash2 == hash3, "Hash-Werte sind nicht konsistent!" # Test mit unterschiedlichem Inhalt different_content = b"Different content" hash_different = hashlib.blake2b(different_content).hexdigest() print(f"Hash für anderen Inhalt: {hash_different}") assert hash1 != hash_different, "Verschiedene Inhalte sollten verschiedene Hashes haben!" print("[OK] Test erfolgreich: Hash-Berechnung ist konsistent") if __name__ == "__main__": print("Starte Tests für blake2b-Hash-Implementierung...\n") try: test_blake2b_hash_calculation() test_xml_file_model() test_hash_consistency() print("\n[SUCCESS] Alle Tests erfolgreich abgeschlossen!") print("\nDie blake2b-Hash-Implementierung ist bereit für den Einsatz.") except Exception as e: print(f"\n[ERROR] Test fehlgeschlagen: {e}") sys.exit(1)