test_config_loader.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. from hookvision.config_loader import load_config
  2. from hookvision.models import ModuleType, CameraPosition
  3. class TestLoadConfig:
  4. def test_load_rfid_config(self, sample_config_path):
  5. config = load_config(sample_config_path)
  6. assert config.app_name == "测试系统"
  7. assert config.module_type == ModuleType.RFID
  8. assert config.rfid is not None
  9. assert config.rfid.ip == "192.168.1.1"
  10. assert config.rfid.port == 60000
  11. assert config.modbus is None
  12. assert config.ai.enabled is False
  13. def test_load_buckets(self, sample_config_path):
  14. config = load_config(sample_config_path)
  15. assert len(config.buckets) == 1
  16. bucket = config.buckets[0]
  17. assert bucket.id == 1
  18. assert bucket.description == "测试工位"
  19. assert bucket.code_x == "TEST001"
  20. assert len(bucket.cameras) == 2
  21. def test_load_cameras(self, sample_config_path):
  22. config = load_config(sample_config_path)
  23. bucket = config.buckets[0]
  24. left = next(c for c in bucket.cameras if c.position == CameraPosition.LEFT)
  25. right = next(c for c in bucket.cameras if c.position == CameraPosition.RIGHT)
  26. assert left.rtsp_url == "rtsp://test:test@192.168.1.10:554/stream1"
  27. assert left.topic == "test/left"
  28. assert right.rtsp_url == "rtsp://test:test@192.168.1.11:554/stream2"
  29. assert right.topic == "test/right"
  30. def test_load_video_config(self, sample_config_path):
  31. config = load_config(sample_config_path)
  32. assert config.video.rtsp_timeout == 5.0
  33. def test_config_file_not_exists(self, tmp_path):
  34. from configparser import NoSectionError
  35. path = tmp_path / "nonexistent.ini"
  36. import pytest
  37. with pytest.raises(NoSectionError):
  38. load_config(str(path))
  39. def _write_ai_config(path, extra_ai_lines=""):
  40. path.write_text(
  41. f"""[App]
  42. name = 测试系统
  43. copyright = 测试
  44. screen = 0
  45. [Video]
  46. rtsp_timeout = 5
  47. [Hardware]
  48. module_type = RFID
  49. [RFID]
  50. ip = 192.168.1.1
  51. port = 60000
  52. stability_time = 5
  53. stability_count = 3
  54. [AI]
  55. enabled = true
  56. {extra_ai_lines}
  57. """, encoding="utf-8"
  58. )
  59. class TestAutoCalibConfig:
  60. def test_missing_keys_use_defaults(self, tmp_path):
  61. path = tmp_path / "config.ini"
  62. _write_ai_config(path)
  63. config = load_config(str(path))
  64. assert config.ai.auto_calib_ready_frames == 3
  65. assert config.ai.auto_calib_duration_secs == 1.0
  66. assert config.ai.auto_calib_min_samples == 2
  67. def test_custom_values_loaded(self, tmp_path):
  68. path = tmp_path / "config.ini"
  69. _write_ai_config(
  70. path,
  71. "auto_calib_ready_frames = 10\n"
  72. "auto_calib_duration_secs = 2.5\n"
  73. "auto_calib_min_samples = 4\n",
  74. )
  75. config = load_config(str(path))
  76. assert config.ai.auto_calib_ready_frames == 10
  77. assert config.ai.auto_calib_duration_secs == 2.5
  78. assert config.ai.auto_calib_min_samples == 4
  79. def test_missing_keys_auto_initialized(self, tmp_path):
  80. path = tmp_path / "config.ini"
  81. _write_ai_config(path)
  82. load_config(str(path))
  83. text = path.read_text(encoding="utf-8")
  84. assert "auto_calib_ready_frames = 3" in text
  85. assert "auto_calib_duration_secs = 1.0" in text
  86. assert "auto_calib_min_samples = 2" in text
  87. reloaded = load_config(str(path))
  88. assert reloaded.ai.auto_calib_ready_frames == 3
  89. assert reloaded.ai.auto_calib_duration_secs == 1.0
  90. assert reloaded.ai.auto_calib_min_samples == 2
  91. def test_existing_custom_keys_not_overwritten(self, tmp_path):
  92. path = tmp_path / "config.ini"
  93. _write_ai_config(path, "auto_calib_ready_frames = 7\n")
  94. load_config(str(path))
  95. text = path.read_text(encoding="utf-8")
  96. assert "auto_calib_ready_frames = 7" in text
  97. assert "auto_calib_duration_secs = 1.0" in text