Files
frigate/frigate/test/test_preview_loader.py
T

96 lines
3.4 KiB
Python
Raw Normal View History

2026-01-22 11:21:41 -06:00
import os
import shutil
2026-10-29 11:39:21 -06:00
import tempfile
2026-01-22 11:21:41 -06:00
import unittest
2026-10-29 11:39:21 -06:00
from unittest.mock import patch
2026-01-22 11:21:41 -06:00
2026-10-29 11:39:21 -06:00
from frigate.output.preview import PREVIEW_FRAME_TYPE, get_most_recent_preview_frame
2026-01-22 11:21:41 -06:00
class TestPreviewLoader(unittest.TestCase):
def setUp(self):
2026-10-29 11:39:21 -06:00
# a directory of its own so test groups running in parallel can't
# delete each other's preview frames
self.preview_dir = tempfile.mkdtemp()
self.addCleanup(shutil.rmtree, self.preview_dir, ignore_errors=True)
cache_dir_patch = patch(
"frigate.output.preview.PREVIEW_CACHE_DIR", self.preview_dir
)
cache_dir_patch.start()
self.addCleanup(cache_dir_patch.stop)
2026-01-22 11:21:41 -06:00
def test_get_most_recent_preview_frame_missing(self):
self.assertIsNone(get_most_recent_preview_frame("test_camera"))
def test_get_most_recent_preview_frame_exists(self):
camera = "test_camera"
# create dummy preview files
for ts in ["1000.0", "2000.0", "1500.0"]:
with open(
os.path.join(
2026-10-29 11:39:21 -06:00
self.preview_dir, f"preview_{camera}-{ts}.{PREVIEW_FRAME_TYPE}"
2026-01-22 11:21:41 -06:00
),
"w",
) as f:
f.write(f"test_{ts}")
expected_path = os.path.join(
2026-10-29 11:39:21 -06:00
self.preview_dir, f"preview_{camera}-2000.0.{PREVIEW_FRAME_TYPE}"
2026-01-22 11:21:41 -06:00
)
self.assertEqual(get_most_recent_preview_frame(camera), expected_path)
def test_get_most_recent_preview_frame_before(self):
camera = "test_camera"
# create dummy preview files
for ts in ["1000.0", "2000.0"]:
with open(
os.path.join(
2026-10-29 11:39:21 -06:00
self.preview_dir, f"preview_{camera}-{ts}.{PREVIEW_FRAME_TYPE}"
2026-01-22 11:21:41 -06:00
),
"w",
) as f:
f.write(f"test_{ts}")
# Test finding frame before or at 1500
expected_path = os.path.join(
2026-10-29 11:39:21 -06:00
self.preview_dir, f"preview_{camera}-1000.0.{PREVIEW_FRAME_TYPE}"
2026-01-22 11:21:41 -06:00
)
self.assertEqual(
get_most_recent_preview_frame(camera, before=1500.0), expected_path
)
# Test finding frame before or at 999
self.assertIsNone(get_most_recent_preview_frame(camera, before=999.0))
def test_get_most_recent_preview_frame_other_camera(self):
camera = "test_camera"
other_camera = "other_camera"
with open(
os.path.join(
2026-10-29 11:39:21 -06:00
self.preview_dir, f"preview_{other_camera}-3000.0.{PREVIEW_FRAME_TYPE}"
2026-01-22 11:21:41 -06:00
),
"w",
) as f:
f.write("test")
self.assertIsNone(get_most_recent_preview_frame(camera))
2026-09-15 07:48:30 -05:00
def test_get_most_recent_preview_frame_hyphenated_camera(self):
for name in ("preview_front-2000.0", "preview_front-door-3000.0"):
with open(
2026-10-29 11:39:21 -06:00
os.path.join(self.preview_dir, f"{name}.{PREVIEW_FRAME_TYPE}"), "w"
2026-09-15 07:48:30 -05:00
) as f:
f.write("test")
expected_path = os.path.join(
2026-10-29 11:39:21 -06:00
self.preview_dir, f"preview_front-2000.0.{PREVIEW_FRAME_TYPE}"
2026-09-15 07:48:30 -05:00
)
self.assertEqual(get_most_recent_preview_frame("front"), expected_path)
self.assertEqual(
get_most_recent_preview_frame("front", before=5000.0), expected_path
)
2026-01-22 11:21:41 -06:00
def test_get_most_recent_preview_frame_no_directory(self):
2026-10-29 11:39:21 -06:00
shutil.rmtree(self.preview_dir)
2026-01-22 11:21:41 -06:00
self.assertIsNone(get_most_recent_preview_frame("test_camera"))