From 6a2724cccc497eb022aa77069c942d2a1963f93e Mon Sep 17 00:00:00 2001 From: Sam Bull Date: Sun, 12 Apr 2026 23:14:27 +0100 Subject: [PATCH] Add regression tests --- pelican/tests/test_log.py | 42 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/pelican/tests/test_log.py b/pelican/tests/test_log.py index 8791fc7c..a7e1316b 100644 --- a/pelican/tests/test_log.py +++ b/pelican/tests/test_log.py @@ -73,3 +73,45 @@ class TestLog(unittest.TestCase): self.assertEqual( self.handler.count_logs("Another log \\d", logging.WARNING), 0 ) + + def test_filtered_warning_no_raise_with_fatal_warnings(self): + log.FatalLogger.fatal_lvl = logging.WARNING + try: + log.LimitFilter._ignore.add((logging.WARNING, "Filtered %s")) + # Should not raise because the message is filtered out. + self.logger.warning("Filtered %s", "msg") + finally: + log.FatalLogger.fatal_lvl = logging.CRITICAL + 1 + + def test_unfiltered_warning_raises_with_fatal_warnings(self): + log.FatalLogger.fatal_lvl = logging.WARNING + try: + with self.assertRaises(RuntimeError): + self.logger.warning("Unfiltered warning") + finally: + log.FatalLogger.fatal_lvl = logging.CRITICAL + 1 + + def test_filtered_error_no_raise_with_fatal_errors(self): + log.FatalLogger.fatal_lvl = logging.ERROR + try: + log.LimitFilter._ignore.add((logging.WARNING, "Filtered error %s")) + # Errors go through LimitFilter (levelno > WARNING returns True), + # but we can test with a duplicate message which gets filtered. + self.logger.warning("Some warning") + self._reset_limit_filter() + # Use _ignore to filter an error-level record by lowering dedup level. + log.LimitFilter.LOGS_DEDUP_MIN_LEVEL = logging.ERROR + log.LimitFilter._ignore.add((logging.ERROR, "Filtered error %s")) + self.logger.error("Filtered error %s", "msg") + finally: + log.FatalLogger.fatal_lvl = logging.CRITICAL + 1 + log.LimitFilter.LOGS_DEDUP_MIN_LEVEL = logging.WARNING + + def test_critical_never_raises(self): + log.FatalLogger.fatal_lvl = logging.WARNING + try: + # CRITICAL should not raise even though it's above fatal_lvl, + # because main() catches RuntimeError and logs its own critical. + self.logger.critical("Critical message") + finally: + log.FatalLogger.fatal_lvl = logging.CRITICAL + 1