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.
42 lines
1.0 KiB
Python
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()
|