Aniworld/tests/unit/test_system_utilities.py
2025-10-22 09:20:35 +02:00

212 lines
5.6 KiB
Python

"""Unit tests for system utilities."""
import os
import tempfile
from datetime import datetime, timedelta
from pathlib import Path
from src.server.utils.system import (
DiskInfo,
ProcessInfo,
SystemUtilities,
get_system_utilities,
)
def test_system_utilities_initialization():
"""Test system utilities initialization."""
utils = SystemUtilities()
assert utils is not None
def test_get_disk_usage():
"""Test getting disk usage information."""
utils = SystemUtilities()
disk_info = utils.get_disk_usage("/")
assert disk_info is not None
assert isinstance(disk_info, DiskInfo)
assert disk_info.total_bytes > 0
assert disk_info.free_bytes >= 0
assert disk_info.percent_used >= 0
def test_get_all_disk_usage():
"""Test getting disk usage for all partitions."""
utils = SystemUtilities()
disk_infos = utils.get_all_disk_usage()
assert isinstance(disk_infos, list)
# Should have at least one partition
assert len(disk_infos) >= 0
def test_cleanup_directory():
"""Test directory cleanup."""
utils = SystemUtilities()
with tempfile.TemporaryDirectory() as tmpdir:
# Create some test files
old_time = (datetime.now() - timedelta(days=31)).timestamp()
for i in range(3):
file_path = Path(tmpdir) / f"old_file_{i}.txt"
file_path.write_text(f"old file {i}")
Path(file_path).touch()
os.utime(file_path, (old_time, old_time))
for i in range(2):
file_path = Path(tmpdir) / f"new_file_{i}.txt"
file_path.write_text(f"new file {i}")
# Clean up files older than 30 days
deleted = utils.cleanup_directory(tmpdir, "*.txt", max_age_days=30)
assert deleted == 3
def test_cleanup_empty_directories():
"""Test empty directory cleanup."""
utils = SystemUtilities()
with tempfile.TemporaryDirectory() as tmpdir:
# Create nested directories
(Path(tmpdir) / "dir1").mkdir()
(Path(tmpdir) / "dir2").mkdir()
(Path(tmpdir) / "dir2" / "subdir").mkdir()
# Create a file in one directory
(Path(tmpdir) / "dir1" / "file.txt").write_text("content")
# Clean up empty directories
deleted = utils.cleanup_empty_directories(tmpdir)
assert deleted >= 1
def test_get_directory_size():
"""Test getting directory size."""
utils = SystemUtilities()
with tempfile.TemporaryDirectory() as tmpdir:
# Create test files
(Path(tmpdir) / "file1.txt").write_text("a" * 1000)
(Path(tmpdir) / "file2.txt").write_text("b" * 2000)
size = utils.get_directory_size(tmpdir)
assert size >= 3000 # At least 3000 bytes
def test_get_directory_size_nonexistent():
"""Test getting directory size for non-existent directory."""
utils = SystemUtilities()
size = utils.get_directory_size("/nonexistent/path")
assert size == 0
def test_get_process_info():
"""Test getting process information."""
import os
utils = SystemUtilities()
pid = os.getpid()
proc_info = utils.get_process_info(pid)
assert proc_info is not None
assert isinstance(proc_info, ProcessInfo)
assert proc_info.pid == pid
assert proc_info.name is not None
assert proc_info.cpu_percent >= 0
assert proc_info.memory_percent >= 0
def test_get_process_info_current():
"""Test getting current process information."""
utils = SystemUtilities()
proc_info = utils.get_process_info()
assert proc_info is not None
assert proc_info.pid > 0
def test_get_process_info_invalid():
"""Test getting process info for invalid PID."""
utils = SystemUtilities()
proc_info = utils.get_process_info(99999999)
assert proc_info is None
def test_get_all_processes():
"""Test getting information about all processes."""
utils = SystemUtilities()
processes = utils.get_all_processes()
assert isinstance(processes, list)
# Should have at least some processes
assert len(processes) > 0
def test_get_system_info():
"""Test getting system information."""
utils = SystemUtilities()
system_info = utils.get_system_info()
assert system_info is not None
assert "platform" in system_info
assert "cpu_count" in system_info
assert "hostname" in system_info
assert "python_version" in system_info
def test_get_network_info():
"""Test getting network information."""
utils = SystemUtilities()
net_info = utils.get_network_info()
assert net_info is not None
assert "bytes_sent" in net_info
assert "bytes_recv" in net_info
assert net_info["bytes_sent"] >= 0
assert net_info["bytes_recv"] >= 0
def test_copy_file_atomic():
"""Test atomic file copy."""
utils = SystemUtilities()
with tempfile.TemporaryDirectory() as tmpdir:
src_file = Path(tmpdir) / "source.txt"
dest_file = Path(tmpdir) / "dest.txt"
src_file.write_text("test content")
result = utils.copy_file_atomic(str(src_file), str(dest_file))
assert result is True
assert dest_file.exists()
assert dest_file.read_text() == "test content"
def test_copy_file_atomic_nonexistent():
"""Test atomic file copy with non-existent source."""
utils = SystemUtilities()
result = utils.copy_file_atomic(
"/nonexistent/source.txt", "/tmp/dest.txt"
)
assert result is False
def test_get_system_utilities_singleton():
"""Test singleton system utilities."""
utils1 = get_system_utilities()
utils2 = get_system_utilities()
assert utils1 is utils2
assert isinstance(utils1, SystemUtilities)