import os import tempfile from pathlib import Path from src.utils.log_manager import ( parse_size, FileHandlerFactory, LoggerPrint, LogManager, register, register_global_params, get_logger, setup, print as log_print, get_log_manager, LOG_CATEGORY, LOG_CONSOLE, LOG_STDERR, LOG_FILE, LOG_PATH, LOG_LEVEL, LOG_ROTATION, LOG_ROTATION_SIZE, LOG_ROTATION_COUNT, LOG_TIMESTAMP, DEFAULT_TIMESTAMP, ) def test_parse_size(): assert parse_size("100B") == 100 assert parse_size("1KB") == 1024 assert parse_size("1MB") == 1024 * 1024 assert parse_size("1GB") == 1024 * 1024 * 1024 assert parse_size("10MB") == 10 * 1024 * 1024 def test_constants(): assert LOG_CATEGORY == "logger" assert LOG_CONSOLE == "log_console" assert LOG_STDERR == "log_stderr" assert LOG_FILE == "log_file" assert DEFAULT_TIMESTAMP == "%Y-%m-%d %H:%M:%S" def test_file_handler_factory(): with tempfile.TemporaryDirectory() as tmpdir: tmpdir_path = Path(tmpdir) tmpdir_path.mkdir(parents=True, exist_ok=True) handler = FileHandlerFactory.create( tmpdir, "test.log", rotation="size", max_bytes="1KB", backup_count=3 ) assert handler is not None assert isinstance(handler.backupCount, int) assert handler.backupCount == 3 handler.close() def test_logger_print(): logger = LoggerPrint( name="komAI.test", module_name="test", console_enabled=True, stderr_enabled=True ) logger.print("Test message", level="info") logger.print("Warning message", level="warning") logger.print("Error message", level="error") def test_log_manager_registration(): import src.utils.config_manager as config config.config.reset() register_global_params() register(module="test_mod", log_console=True, log_file="test_mod.log") logger = get_logger("test_mod") assert logger is not None assert logger.module_name == "test_mod" def test_log_manager_no_console(): import src.utils.config_manager as config config.config.reset() register_global_params() register(module="test_mod", log_console=False) logger = get_logger("test_mod") assert logger.console_enabled is False def test_log_manager_with_file(): import src.utils.config_manager as config config.config.reset() register_global_params() with tempfile.TemporaryDirectory() as tmpdir: register(module="test_mod", log_file="test_mod.log") config.config.set(LOG_PATH, tmpdir, cat=LOG_CATEGORY) logger = get_logger("test_mod") assert logger.file_enabled is True def test_log_manager_print(): import src.utils.config_manager as config config.config.reset() register_global_params() register(module="test_mod", log_console=True) setup() log_print("Global print test", level="info") def test_get_log_manager_singleton(): mgr1 = get_log_manager() mgr2 = get_log_manager() assert mgr1 is mgr2 def run_tests(): tests = [ test_parse_size, test_constants, test_file_handler_factory, test_logger_print, test_log_manager_registration, test_log_manager_no_console, test_log_manager_with_file, test_log_manager_print, test_get_log_manager_singleton, ] passed = 0 failed = 0 for test in tests: try: test() print(f"PASS: {test.__name__}") passed += 1 except Exception as e: print(f"FAIL: {test.__name__} - {e}") failed += 1 print(f"\n{passed}/{passed + failed} tests passed") return failed == 0 if __name__ == "__main__": success = run_tests() exit(0 if success else 1)