You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MAI/tests/test_stream_capture.py

42 lines
1.0 KiB
Python

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()