- SSH scanning via ssh-audit (KEX, encryption, MAC, host keys) - BSI TR-02102-4 and IANA compliance validation for SSH - CSV/Markdown/reST reports for SSH results - Unified compliance schema and database views - Code optimization: modular query/writer architecture
61 lines
2.2 KiB
Python
61 lines
2.2 KiB
Python
"""Tests for template utilities."""
|
|
|
|
from typing import Any
|
|
|
|
from sslysze_scan.reporter.template_utils import (
|
|
build_template_context,
|
|
generate_report_id,
|
|
)
|
|
|
|
|
|
class TestGenerateReportId:
|
|
"""Tests for generate_report_id function."""
|
|
|
|
def test_generate_report_id_valid_and_invalid(self) -> None:
|
|
"""Test report ID generation with valid and invalid timestamps."""
|
|
# Valid timestamp
|
|
metadata = {"timestamp": "2025-01-08T10:30:00.123456", "scan_id": 5}
|
|
result = generate_report_id(metadata)
|
|
assert result == "20250108_5"
|
|
|
|
# Invalid timestamp falls back to current date
|
|
# We'll use a fixed date by temporarily controlling the system time
|
|
# For this test, we just verify that it generates some valid format
|
|
metadata = {"timestamp": "invalid", "scan_id": 5}
|
|
result = generate_report_id(metadata)
|
|
# Check that result follows the expected format: YYYYMMDD_number
|
|
assert "_" in result
|
|
assert result.endswith("_5")
|
|
assert len(result.split("_")[0]) == 8 # YYYYMMDD format
|
|
assert result.split("_")[0].isdigit() # Should be all digits
|
|
|
|
|
|
class TestBuildTemplateContext:
|
|
"""Tests for build_template_context function."""
|
|
|
|
def test_build_template_context_complete_and_partial(
|
|
self, mock_scan_data: dict[str, Any]
|
|
) -> None:
|
|
"""Test context building with complete and partial data."""
|
|
# Complete data
|
|
context = build_template_context(mock_scan_data)
|
|
assert context["scan_id"] == 5
|
|
assert context["hostname"] == "example.com"
|
|
assert context["fqdn"] == "example.com"
|
|
assert context["ipv4"] == "192.168.1.1"
|
|
assert context["ipv6"] == "2001:db8::1"
|
|
assert context["timestamp"] == "08.01.2025 10:30"
|
|
assert context["duration"] == "12.34"
|
|
assert context["ports"] == "443, 636"
|
|
assert "summary" in context
|
|
assert "ports_data" in context
|
|
|
|
# Verify ports_data sorted by port
|
|
ports = [p["port"] for p in context["ports_data"]]
|
|
assert ports == sorted(ports)
|
|
|
|
# Missing duration
|
|
mock_scan_data["metadata"]["duration"] = None
|
|
context = build_template_context(mock_scan_data)
|
|
assert context["duration"] == "N/A"
|