"""
Tests for security hardening utilities
"""
import pytest
import tempfile
import json
from datetime import datetime, timedelta
from pathlib import Path
from unittest.mock import patch, Mock
from aitbc.security_hardening import (
SecurityValidator,
SecurityAuditLog,
SecurityAuditor,
RateLimiter,
log_security_event,
get_security_auditor,
)
class TestSecurityValidator:
"""Tests for SecurityValidator"""
def test_validate_email_valid(self):
"""Test validate_email with valid email"""
assert SecurityValidator.validate_email("test@example.com") is True
assert SecurityValidator.validate_email("user.name+tag@domain.co.uk") is True
def test_validate_email_invalid(self):
"""Test validate_email with invalid email"""
assert SecurityValidator.validate_email("invalid") is False
assert SecurityValidator.validate_email("@example.com") is False
assert SecurityValidator.validate_email("test@") is False
def test_validate_url_valid(self):
"""Test validate_url with valid URL"""
assert SecurityValidator.validate_url("https://example.com") is True
assert SecurityValidator.validate_url("http://localhost:8000") is True
assert SecurityValidator.validate_url("https://192.168.1.1:8080/path") is True
def test_validate_url_invalid(self):
"""Test validate_url with invalid URL"""
assert SecurityValidator.validate_url("not-a-url") is False
assert SecurityValidator.validate_url("ftp://example.com") is False
assert SecurityValidator.validate_url("") is False
def test_validate_ethereum_address_valid(self):
"""Test validate_ethereum_address with valid address"""
assert SecurityValidator.validate_ethereum_address("0x1234567890abcdef1234567890abcdef12345678") is True
assert SecurityValidator.validate_ethereum_address("0xABCDEF1234567890ABCDEF1234567890ABCDEF12") is True
def test_validate_ethereum_address_invalid(self):
"""Test validate_ethereum_address with invalid address"""
assert SecurityValidator.validate_ethereum_address("0x123") is False
assert SecurityValidator.validate_ethereum_address("1234567890abcdef1234567890abcdef12345678") is False
assert SecurityValidator.validate_ethereum_address("0x1234567890abcdef1234567890abcdef123456789") is False
def test_validate_tx_hash_valid(self):
"""Test validate_tx_hash with valid hash"""
valid_hash = "0x" + "12" * 32 # 64 hex chars total (32 * 2)
assert SecurityValidator.validate_tx_hash(valid_hash) is True
def test_validate_tx_hash_invalid(self):
"""Test validate_tx_hash with invalid hash"""
assert SecurityValidator.validate_tx_hash("0x123") is False
assert SecurityValidator.validate_tx_hash("1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234") is False
def test_sanitize_html(self):
"""Test sanitize_html"""
html = ""
sanitized = SecurityValidator.sanitize_html(html)
assert "<script>" in sanitized
assert "