Files
ServerGuard/tests/test_utils.py
2026-03-02 14:14:40 +08:00

95 lines
3.0 KiB
Python

"""
测试 utils 模块
"""
import unittest
import sys
import os
# 添加父目录到路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from utils import (
parse_key_value_output, parse_table_output, extract_with_regex,
safe_int, safe_float, format_bytes, sanitize_filename,
merge_dicts, check_command_exists
)
class TestParseFunctions(unittest.TestCase):
"""测试解析函数"""
def test_parse_key_value_output(self):
text = """
Key1: Value1
Key2: Value2
# Comment line
Key3: Value with: colon
"""
result = parse_key_value_output(text)
self.assertEqual(result["Key1"], "Value1")
self.assertEqual(result["Key2"], "Value2")
self.assertEqual(result["Key3"], "Value with: colon")
def test_parse_table_output(self):
text = """
NAME SIZE TYPE MODEL
sda 1T disk Samsung SSD
sdb 2T disk WD HDD
"""
result = parse_table_output(text, headers=["NAME", "SIZE", "TYPE", "MODEL"])
self.assertEqual(len(result), 2)
self.assertEqual(result[0]["NAME"], "sda")
self.assertEqual(result[1]["TYPE"], "disk")
def test_extract_with_regex(self):
text = "Temperature: 45.5 degrees"
result = extract_with_regex(text, r'Temperature:\s*([\d.]+)')
self.assertEqual(result, "45.5")
def test_safe_int(self):
self.assertEqual(safe_int("123"), 123)
self.assertEqual(safe_int("123.5"), 123)
self.assertEqual(safe_int("1,234"), 1234)
self.assertEqual(safe_int("32 GB"), 32)
self.assertEqual(safe_int("invalid"), 0)
self.assertEqual(safe_int("invalid", -1), -1)
def test_safe_float(self):
self.assertEqual(safe_float("123.5"), 123.5)
self.assertEqual(safe_float("2.5GHz"), 2.5)
self.assertEqual(safe_float("invalid"), 0.0)
def test_format_bytes(self):
self.assertEqual(format_bytes(0), "0 B")
self.assertEqual(format_bytes(1024), "1.00 KB")
self.assertEqual(format_bytes(1024**2), "1.00 MB")
self.assertEqual(format_bytes(1024**3), "1.00 GB")
def test_sanitize_filename(self):
self.assertEqual(sanitize_filename("file<name>.txt"), "file_name_.txt")
self.assertEqual(sanitize_filename("path/to/file"), "path/to/file")
def test_merge_dicts(self):
base = {"a": 1, "b": {"c": 2}}
update = {"b": {"d": 3}, "e": 4}
result = merge_dicts(base, update)
self.assertEqual(result["a"], 1)
self.assertEqual(result["b"]["c"], 2)
self.assertEqual(result["b"]["d"], 3)
self.assertEqual(result["e"], 4)
class TestCommandFunctions(unittest.TestCase):
"""测试命令相关函数"""
def test_check_command_exists(self):
# ls 应该存在
self.assertTrue(check_command_exists("ls"))
# 不存在的命令
self.assertFalse(check_command_exists("nonexistent_command_12345"))
if __name__ == '__main__':
unittest.main()