67 lines
2.5 KiB
Python
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)
|