37 lines
1.4 KiB
Python
37 lines
1.4 KiB
Python
"""Tests for DetectionTracker multi-camera stream isolation."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
from pathlib import Path
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from chicken_counter.config import load_camera_config
|
|
|
|
|
|
class MultiCameraTrackerIsolationTests(unittest.TestCase):
|
|
def test_independent_stream_trackers(self) -> None:
|
|
cfg = load_camera_config("configs/cameras/example_camera.yaml")
|
|
|
|
# Test get_or_create_tracker instantiates isolated instances for different stream IDs
|
|
with patch("chicken_counter.tracking.ensure_compatible_model", return_value=cfg.detection.model_path), \
|
|
patch("chicken_counter.tracking.YOLO"):
|
|
from chicken_counter.tracking import DetectionTracker
|
|
|
|
tracker_manager = DetectionTracker(cfg)
|
|
tr1 = tracker_manager.get_or_create_tracker("CC1")
|
|
tr2 = tracker_manager.get_or_create_tracker("CC2")
|
|
|
|
self.assertIsNotNone(tr1)
|
|
self.assertIsNotNone(tr2)
|
|
self.assertIsNot(tr1, tr2, "Trackers for CC1 and CC2 must be distinct objects")
|
|
|
|
# Resetting CC1 should not delete CC2 tracker
|
|
tracker_manager.reset_tracking("CC1")
|
|
self.assertNotIn("CC1", tracker_manager._stream_trackers)
|
|
self.assertIn("CC2", tracker_manager._stream_trackers)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|