From 4831337f17c3a8e6b62afb6d4933052f6f431a8a Mon Sep 17 00:00:00 2001 From: Alan Date: Fri, 14 Mar 2025 22:12:39 +0000 Subject: [PATCH] add tests --- frigate/__main__.py | 3 +- frigate/test/test_startup.py | 57 ++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 frigate/test/test_startup.py diff --git a/frigate/__main__.py b/frigate/__main__.py index e3445666a..40f634356 100644 --- a/frigate/__main__.py +++ b/frigate/__main__.py @@ -52,7 +52,8 @@ def main() -> None: # Load the configuration. try: config = FrigateConfig.load(install=True) - except ValidationError as e: + except (ValidationError, ScannerError) as e: + print("*************************************************************") print("*************************************************************") print("*** Your config file is not valid! ***") diff --git a/frigate/test/test_startup.py b/frigate/test/test_startup.py new file mode 100644 index 000000000..8766386af --- /dev/null +++ b/frigate/test/test_startup.py @@ -0,0 +1,57 @@ +import unittest + + +class TestStartup(unittest.TestCase): + def test_main_invalid_config(self): + import faulthandler + import io + import sys + from unittest.mock import patch + + from ruamel.yaml.scanner import ScannerError + + from frigate.__main__ import main + from frigate.app import FrigateApp + from frigate.config import FrigateConfig + + + def fake_load(install): + raise ScannerError("Simulated error for invalid config") + + + with patch.object(FrigateConfig, "load", fake_load): + + with patch.object(FrigateApp, "__init__", autospec=True) as mock_app_init: + mock_app_init.return_value = None # Avoid running the real initializer. + + with patch.object(FrigateApp, "start_config_editor") as mock_start_editor: + + original_argv = sys.argv + sys.argv = ["Frigate"] + + captured_output = io.StringIO() + original_stdout = sys.stdout + sys.stdout = captured_output + + with patch.object(faulthandler, "enable", lambda: None): + try: + main() + except SystemExit: + pass + finally: + sys.stdout = original_stdout + sys.argv = original_argv + + output = captured_output.getvalue() + + self.assertIn("Your config file is not valid!", output) + + mock_start_editor.assert_called_once() + mock_app_init.assert_called_once() + passed_config = mock_app_init.call_args[0][1] + + self.assertEqual( + passed_config.environment_vars.get("INVALID_CONFIG"), "true", + "Expected INVALID_CONFIG to be set to 'true' in the config passed to FrigateApp" + ) +