"""disk_quota.py 单元测试。 不连真 DB ── parse_bytes / scan_user_dir / skip dotfile 行为 / 不存在路径, 都纯 Python 文件系统操作可单测。upsert / check_disk_quota 需要 DB,跳过(集成测覆盖)。 """ from __future__ import annotations import sys import tempfile import unittest from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parents[1])) from core.storage.disk_quota import parse_bytes, scan_user_dir class TestParseBytes(unittest.TestCase): def test_int_passthrough(self): self.assertEqual(parse_bytes(1024), 1024) self.assertEqual(parse_bytes(0), 0) def test_gb(self): self.assertEqual(parse_bytes("5gb"), 5 * 1024 ** 3) self.assertEqual(parse_bytes("5g"), 5 * 1024 ** 3) self.assertEqual(parse_bytes("5GB"), 5 * 1024 ** 3) def test_mb(self): self.assertEqual(parse_bytes("500mb"), 500 * 1024 ** 2) self.assertEqual(parse_bytes("500m"), 500 * 1024 ** 2) def test_kb(self): self.assertEqual(parse_bytes("1kb"), 1024) def test_bytes(self): self.assertEqual(parse_bytes("1024b"), 1024) self.assertEqual(parse_bytes("1024"), 1024) def test_float_suffix(self): self.assertEqual(parse_bytes("1.5gb"), int(1.5 * 1024 ** 3)) def test_invalid(self): self.assertIsNone(parse_bytes("")) self.assertIsNone(parse_bytes("xxx")) self.assertIsNone(parse_bytes("1.2.3")) self.assertIsNone(parse_bytes(None)) class TestScanUserDir(unittest.TestCase): def test_empty_dir(self): with tempfile.TemporaryDirectory() as d: b, c = scan_user_dir(Path(d)) self.assertEqual((b, c), (0, 0)) def test_nonexistent(self): b, c = scan_user_dir(Path("/nonexistent/path/xxx")) self.assertEqual((b, c), (0, 0)) def test_count_and_size(self): with tempfile.TemporaryDirectory() as d: root = Path(d) (root / "a.txt").write_bytes(b"hello") # 5 (root / "sub").mkdir() (root / "sub" / "b.txt").write_bytes(b"world!") # 6 (root / "sub" / "c.txt").write_bytes(b"x" * 1000) # 1000 b, c = scan_user_dir(root) self.assertEqual(b, 1011) self.assertEqual(c, 3) def test_skip_dotfile_toplevel(self): """平台隐藏缓存/临时区与用户记忆不计入产品文件配额。""" with tempfile.TemporaryDirectory() as d: root = Path(d) (root / "a.txt").write_bytes(b"counted") # 7 for hidden in ( ".zcbot_cache", ".zcbot_external_results", ".zcbot_tmp", ".memory", ): (root / hidden).mkdir() (root / hidden / "skipped.bin").write_bytes(b"x" * 99999) b, c = scan_user_dir(root) self.assertEqual(b, 7) self.assertEqual(c, 1) if __name__ == "__main__": unittest.main()