| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- from hookvision.config_loader import load_config
- from hookvision.models import ModuleType, CameraPosition
- class TestLoadConfig:
- def test_load_rfid_config(self, sample_config_path):
- config = load_config(sample_config_path)
- assert config.app_name == "测试系统"
- assert config.module_type == ModuleType.RFID
- assert config.rfid is not None
- assert config.rfid.ip == "192.168.1.1"
- assert config.rfid.port == 60000
- assert config.modbus is None
- assert config.ai.enabled is False
- def test_load_buckets(self, sample_config_path):
- config = load_config(sample_config_path)
- assert len(config.buckets) == 1
- bucket = config.buckets[0]
- assert bucket.id == 1
- assert bucket.description == "测试工位"
- assert bucket.code_x == "TEST001"
- assert len(bucket.cameras) == 2
- def test_load_cameras(self, sample_config_path):
- config = load_config(sample_config_path)
- bucket = config.buckets[0]
- left = next(c for c in bucket.cameras if c.position == CameraPosition.LEFT)
- right = next(c for c in bucket.cameras if c.position == CameraPosition.RIGHT)
- assert left.rtsp_url == "rtsp://test:test@192.168.1.10:554/stream1"
- assert left.topic == "test/left"
- assert right.rtsp_url == "rtsp://test:test@192.168.1.11:554/stream2"
- assert right.topic == "test/right"
- def test_load_video_config(self, sample_config_path):
- config = load_config(sample_config_path)
- assert config.video.rtsp_timeout == 5.0
- def test_config_file_not_exists(self, tmp_path):
- from configparser import NoSectionError
- path = tmp_path / "nonexistent.ini"
- import pytest
- with pytest.raises(NoSectionError):
- load_config(str(path))
- def _write_ai_config(path, extra_ai_lines=""):
- path.write_text(
- f"""[App]
- name = 测试系统
- copyright = 测试
- screen = 0
- [Video]
- rtsp_timeout = 5
- [Hardware]
- module_type = RFID
- [RFID]
- ip = 192.168.1.1
- port = 60000
- stability_time = 5
- stability_count = 3
- [AI]
- enabled = true
- {extra_ai_lines}
- """, encoding="utf-8"
- )
- class TestAutoCalibConfig:
- def test_missing_keys_use_defaults(self, tmp_path):
- path = tmp_path / "config.ini"
- _write_ai_config(path)
- config = load_config(str(path))
- assert config.ai.auto_calib_ready_frames == 3
- assert config.ai.auto_calib_duration_secs == 1.0
- assert config.ai.auto_calib_min_samples == 2
- def test_custom_values_loaded(self, tmp_path):
- path = tmp_path / "config.ini"
- _write_ai_config(
- path,
- "auto_calib_ready_frames = 10\n"
- "auto_calib_duration_secs = 2.5\n"
- "auto_calib_min_samples = 4\n",
- )
- config = load_config(str(path))
- assert config.ai.auto_calib_ready_frames == 10
- assert config.ai.auto_calib_duration_secs == 2.5
- assert config.ai.auto_calib_min_samples == 4
- def test_missing_keys_auto_initialized(self, tmp_path):
- path = tmp_path / "config.ini"
- _write_ai_config(path)
- load_config(str(path))
- text = path.read_text(encoding="utf-8")
- assert "auto_calib_ready_frames = 3" in text
- assert "auto_calib_duration_secs = 1.0" in text
- assert "auto_calib_min_samples = 2" in text
- reloaded = load_config(str(path))
- assert reloaded.ai.auto_calib_ready_frames == 3
- assert reloaded.ai.auto_calib_duration_secs == 1.0
- assert reloaded.ai.auto_calib_min_samples == 2
- def test_existing_custom_keys_not_overwritten(self, tmp_path):
- path = tmp_path / "config.ini"
- _write_ai_config(path, "auto_calib_ready_frames = 7\n")
- load_config(str(path))
- text = path.read_text(encoding="utf-8")
- assert "auto_calib_ready_frames = 7" in text
- assert "auto_calib_duration_secs = 1.0" in text
|