from unittest import mock from unittest.mock import patch import logging from iottb.definitions import MAX_VERBOSITY from iottb.utils.logger_config import setup_logging import pytest class TestSetupLogging: # setup_logging sets correct log level based on verbosity def test_sets_correct_log_level_based_on_verbosity(self, mocker): mock_basic_config = mocker.patch('logging.basicConfig') setup_logging(verbosity=1) mock_basic_config.assert_called_once_with(level=logging.WARNING, handlers=[mocker.ANY], force=True) # setup_logging handles verbosity values greater than MAX_VERBOSITY def test_handles_verbosity_greater_than_max_verbosity(self, mocker): mock_basic_config = mocker.patch('logging.basicConfig') setup_logging(verbosity=MAX_VERBOSITY + 1) mock_basic_config.assert_called_once_with(level=logging.INFO, handlers=[mocker.ANY], force=True) # make sure the root logger has different log level before and after this is called, depending on if verbosity or # debug is given def test_root_logger_level_change(self): with patch('iottb.setup_logging.logging.basicConfig') as mock_basicConfig: setup_logging(verbosity=1, debug=False) mock_basicConfig.assert_called_once_with(level=logging.WARNING, handlers=[mock.ANY]) mock_basicConfig.reset_mock() setup_logging(verbosity=2, debug=False) mock_basicConfig.assert_called_once_with(level=logging.INFO, handlers=[mock.ANY]) mock_basicConfig.reset_mock() setup_logging(verbosity=1, debug=True) mock_basicConfig.assert_called_once_with(level=logging.DEBUG, handlers=[mock.ANY]) mock_basicConfig.reset_mock() setup_logging(verbosity=2, debug=True) mock_basicConfig.assert_called_once_with(level=logging.DEBUG, handlers=[mock.ANY])