Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:47:40 +08:00
commit 14c678ceac
22 changed files with 7501 additions and 0 deletions

180
tests/test_helpers.py Normal file
View File

@@ -0,0 +1,180 @@
#!/usr/bin/env python3
"""
Tests for helper utilities.
"""
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent / 'scripts'))
from utils.helpers import *
def test_format_bytes():
"""Test byte formatting."""
assert format_bytes(0) == "0.0 B"
assert format_bytes(512) == "512.0 B"
assert format_bytes(1024) == "1.0 KB"
assert format_bytes(1048576) == "1.0 MB"
assert format_bytes(1073741824) == "1.0 GB"
print("✓ format_bytes() passed")
return True
def test_format_duration():
"""Test duration formatting."""
assert format_duration(30) == "30s"
assert format_duration(65) == "1m 5s"
assert format_duration(3600) == "1h"
assert format_duration(3665) == "1h 1m"
assert format_duration(7265) == "2h 1m"
print("✓ format_duration() passed")
return True
def test_format_percentage():
"""Test percentage formatting."""
assert format_percentage(45.567) == "45.6%"
assert format_percentage(100) == "100.0%"
assert format_percentage(0.123, decimals=2) == "0.12%"
print("✓ format_percentage() passed")
return True
def test_calculate_load_score():
"""Test load score calculation."""
score = calculate_load_score(50, 50, 50)
assert 0 <= score <= 1
assert abs(score - 0.5) < 0.01
score_low = calculate_load_score(20, 30, 25)
score_high = calculate_load_score(80, 85, 90)
assert score_low < score_high
print("✓ calculate_load_score() passed")
return True
def test_classify_load_status():
"""Test load status classification."""
assert classify_load_status(0.2) == "low"
assert classify_load_status(0.5) == "moderate"
assert classify_load_status(0.8) == "high"
print("✓ classify_load_status() passed")
return True
def test_classify_latency():
"""Test latency classification."""
status, desc = classify_latency(25)
assert status == "excellent"
assert "interactive" in desc.lower()
status, desc = classify_latency(150)
assert status == "fair"
print("✓ classify_latency() passed")
return True
def test_parse_disk_usage():
"""Test disk usage parsing."""
sample_output = """Filesystem Size Used Avail Use% Mounted on
/dev/sda1 100G 45G 50G 45% /"""
result = parse_disk_usage(sample_output)
assert result['filesystem'] == '/dev/sda1'
assert result['size'] == '100G'
assert result['used'] == '45G'
assert result['use_pct'] == 45
print("✓ parse_disk_usage() passed")
return True
def test_parse_cpu_load():
"""Test CPU load parsing."""
sample_output = "19:43:41 up 5 days, 2:15, 3 users, load average: 0.45, 0.38, 0.32"
result = parse_cpu_load(sample_output)
assert result['load_1min'] == 0.45
assert result['load_5min'] == 0.38
assert result['load_15min'] == 0.32
print("✓ parse_cpu_load() passed")
return True
def test_get_timestamp():
"""Test timestamp generation."""
ts_iso = get_timestamp(iso=True)
assert 'T' in ts_iso
assert 'Z' in ts_iso
ts_human = get_timestamp(iso=False)
assert ' ' in ts_human
assert len(ts_human) == 19 # YYYY-MM-DD HH:MM:SS
print("✓ get_timestamp() passed")
return True
def test_validate_path():
"""Test path validation."""
assert validate_path("/tmp", must_exist=True) == True
assert validate_path("/nonexistent_path_12345", must_exist=False) == False
print("✓ validate_path() passed")
return True
def test_safe_execute():
"""Test safe execution wrapper."""
# Should return result on success
result = safe_execute(int, "42")
assert result == 42
# Should return default on failure
result = safe_execute(int, "not_a_number", default=0)
assert result == 0
print("✓ safe_execute() passed")
return True
def main():
"""Run all helper tests."""
print("=" * 70)
print("HELPER TESTS")
print("=" * 70)
tests = [
test_format_bytes,
test_format_duration,
test_format_percentage,
test_calculate_load_score,
test_classify_load_status,
test_classify_latency,
test_parse_disk_usage,
test_parse_cpu_load,
test_get_timestamp,
test_validate_path,
test_safe_execute,
]
passed = 0
for test in tests:
try:
if test():
passed += 1
except Exception as e:
print(f"{test.__name__} failed: {e}")
print(f"\nResults: {passed}/{len(tests)} passed")
return passed == len(tests)
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)