agent_deply/tests/test_logging_utils.py
2026-06-05 10:41:24 +08:00

67 lines
2.5 KiB
Python

import logging
from logging.handlers import TimedRotatingFileHandler
from pathlib import Path
from pam_deploy_graph.logging_utils import configure_logging, json_for_log, redact_for_log
def test_redact_for_log_masks_sensitive_keys_and_inline_assignments():
payload = {
"CLIENT_SECRET": "home-secret",
"api_key": "llm-key",
"nested": {
"Authorization": "Bearer token-value",
"message": "CLIENT_SECRET=abc api_key:xyz Authorization=Bearer raw-token header Bearer plain-token",
},
}
redacted = redact_for_log(payload)
serialized = json_for_log(payload)
assert redacted["CLIENT_SECRET"] == "***"
assert redacted["api_key"] == "***"
assert redacted["nested"]["Authorization"] == "***"
assert "home-secret" not in serialized
assert "llm-key" not in serialized
assert "token-value" not in serialized
assert "CLIENT_SECRET=***" in serialized
assert "api_key:***" in serialized
assert "Authorization=***" in serialized
assert "Bearer ***" in serialized
assert "raw-token" not in serialized
assert "plain-token" not in serialized
def test_configure_logging_uses_daily_rotation_and_retention(tmp_path: Path):
log_path = tmp_path / "pam_deploy_agent.log"
package_logger = logging.getLogger("pam_deploy_graph")
previous_handlers = list(package_logger.handlers)
for handler in previous_handlers:
package_logger.removeHandler(handler)
try:
result = configure_logging(log_file=log_path, level="DEBUG", retention_days=3)
assert result == log_path
handlers = [handler for handler in package_logger.handlers if isinstance(handler, TimedRotatingFileHandler)]
assert len(handlers) == 1
handler = handlers[0]
assert Path(handler.baseFilename) == log_path.resolve()
assert handler.when == "MIDNIGHT"
assert handler.backupCount == 3
assert package_logger.level == logging.DEBUG
configure_logging(log_file=log_path, level="INFO", retention_days=5)
handlers = [handler for handler in package_logger.handlers if isinstance(handler, TimedRotatingFileHandler)]
assert len(handlers) == 1
assert handlers[0] is handler
assert handler.backupCount == 5
assert package_logger.level == logging.INFO
finally:
for handler in list(package_logger.handlers):
package_logger.removeHandler(handler)
handler.close()
for handler in previous_handlers:
package_logger.addHandler(handler)