import unittest from unittest.mock import patch from helpers import ReconnectingVideoCapture class FakeCapture: def __init__(self, frames): self.frames = list(frames) self.released = False def isOpened(self): return not self.released def read(self): if not self.frames: return False, None return self.frames.pop(0) def get(self, _prop): return 30.0 def set(self, _prop, _value): return True def release(self): self.released = True class ReconnectingVideoCaptureTests(unittest.TestCase): def test_reopens_stream_after_read_failure(self): broken = FakeCapture([(False, None)]) recovered = FakeCapture([(True, "frame")]) with patch("helpers.cv2.VideoCapture", side_effect=[broken, recovered]): cap = ReconnectingVideoCapture("http://camera", retries=1, retry_delay=0) self.assertEqual(cap.read(), (True, "frame")) self.assertTrue(broken.released) if __name__ == "__main__": unittest.main()