From 12e718f67010ed9c16b154ea6ceec13d810f70a6 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Wed, 26 Aug 2020 13:06:32 -0700 Subject: [PATCH] add frame count check to loggerd rotation test old-commit-hash: ff5d98f85fbc348db8817c864b6595ee4052731a --- selfdrive/loggerd/config.py | 2 ++ selfdrive/loggerd/tests/test_loggerd.py | 22 +++++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/selfdrive/loggerd/config.py b/selfdrive/loggerd/config.py index da3f3a99ca..f859e8cb4a 100644 --- a/selfdrive/loggerd/config.py +++ b/selfdrive/loggerd/config.py @@ -6,6 +6,8 @@ if os.environ.get('LOGGERD_ROOT', False): else: ROOT = '/data/media/0/realdata/' + +CAMERA_FPS = 20 SEGMENT_LENGTH = 60 diff --git a/selfdrive/loggerd/tests/test_loggerd.py b/selfdrive/loggerd/tests/test_loggerd.py index fe7f2862c8..2363cad006 100755 --- a/selfdrive/loggerd/tests/test_loggerd.py +++ b/selfdrive/loggerd/tests/test_loggerd.py @@ -3,6 +3,7 @@ import math import os import random import shutil +import subprocess import time import unittest from pathlib import Path @@ -11,7 +12,7 @@ from common.params import Params from common.hardware import EON, TICI from common.timeout import Timeout from selfdrive.test.helpers import with_processes -from selfdrive.loggerd.config import ROOT +from selfdrive.loggerd.config import ROOT, CAMERA_FPS # baseline file sizes for a 2s segment, in bytes @@ -24,6 +25,7 @@ if EON: elif TICI: CAMERAS = {f"{c}camera": FULL_SIZE for c in ["f", "e", "d"]} +FRAME_TOLERANCE = 2 FILE_SIZE_TOLERANCE = 0.25 class TestLoggerd(unittest.TestCase): @@ -74,11 +76,21 @@ class TestLoggerd(unittest.TestCase): # check each camera file size for camera, size in CAMERAS.items(): - f = f"{route_prefix_path}--{i}/{camera}.hevc" - self.assertTrue(os.path.exists(f), f"couldn't find {f}") - file_size = os.path.getsize(f) - self.assertTrue(math.isclose(file_size, size, rel_tol=FILE_SIZE_TOLERANCE), + file_path = f"{route_prefix_path}--{i}/{camera}.hevc" + + # check file size + self.assertTrue(os.path.exists(file_path), f"couldn't find {file_path}") + file_size = os.path.getsize(file_path) + self.assertTrue(math.isclose(file_size, size, rel_tol=FILE_SIZE_TOLERANCE), f"{camera} failed size check: expected {size}, got {file_size}") + # check frame count + cmd = "fprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames \ + -of default=nokey=1:noprint_wrappers=1 {file_path}" + expected_frames = self.segment_length * CAMERA_FPS + frame_count = int(subprocess.check_output(cmd, shell=True, encoding='utf8').strip()) + self.assertTrue(abs(expected_frames - frame_count) <= FRAME_TOLERANCE, + f"{camera} failed frame count check: expected {expected_frames}, got {frame_count}") + if __name__ == "__main__": unittest.main()