test_publish_hook.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. """Publish hook stays free of supply_infra at import time."""
  2. from __future__ import annotations
  3. import importlib
  4. from pathlib import Path
  5. from supply_agent.logging.publish import (
  6. get_run_artifact_publisher,
  7. publish_run_artifacts,
  8. set_run_artifact_publisher,
  9. )
  10. def test_publish_module_does_not_import_supply_infra() -> None:
  11. source = importlib.util.find_spec("supply_agent.logging.publish")
  12. assert source is not None and source.origin is not None
  13. text = Path(source.origin).read_text(encoding="utf-8")
  14. assert "import supply_infra" not in text
  15. assert "from supply_infra" not in text
  16. def test_publish_is_noop_without_publisher() -> None:
  17. previous = get_run_artifact_publisher()
  18. try:
  19. set_run_artifact_publisher(None)
  20. class _Logger:
  21. pass
  22. assert publish_run_artifacts(_Logger()) is None # type: ignore[arg-type]
  23. finally:
  24. set_run_artifact_publisher(previous)
  25. def test_set_run_artifact_publisher_is_invoked() -> None:
  26. previous = get_run_artifact_publisher()
  27. seen: list[object] = []
  28. def _publisher(logger: object) -> str:
  29. seen.append(logger)
  30. return "https://example.com/log.html"
  31. try:
  32. set_run_artifact_publisher(_publisher)
  33. marker = object()
  34. assert publish_run_artifacts(marker) == "https://example.com/log.html" # type: ignore[arg-type]
  35. assert seen == [marker]
  36. finally:
  37. set_run_artifact_publisher(previous)
  38. def test_infra_registers_publisher_hook() -> None:
  39. previous = get_run_artifact_publisher()
  40. try:
  41. set_run_artifact_publisher(None)
  42. import supply_infra # noqa: F401
  43. from supply_infra.agent_logging.register import register_agent_logging_hooks
  44. from supply_infra.agent_logging.publish import publish_run_artifacts_to_oss
  45. register_agent_logging_hooks()
  46. assert get_run_artifact_publisher() is publish_run_artifacts_to_oss
  47. finally:
  48. set_run_artifact_publisher(previous)