Files
xsl-validator/test_hash_implementation.py
T

124 lines
4.2 KiB
Python
Raw Normal View History

#!/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 = """<?xml version="1.0" encoding="UTF-8"?>
<root>
<element>Test-Inhalt für Hash-Berechnung</element>
<data>Weitere Testdaten</data>
</root>"""
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"<xml>Test content for consistency check</xml>"
# 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"<xml>Different content</xml>"
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)