test_ops_common.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. from __future__ import annotations
  2. from types import SimpleNamespace
  3. import pytest
  4. from ops.common import CpaClient, create_backend_client
  5. def test_cpa_client_delete_auth_file_uses_name_query(monkeypatch) -> None:
  6. calls: list[dict[str, object]] = []
  7. def fake_request(method: str, path: str, key: str, **kwargs): # type: ignore[no-untyped-def]
  8. calls.append({
  9. "method": method,
  10. "path": path,
  11. "key": key,
  12. "query": kwargs.get("query"),
  13. "body": kwargs.get("body"),
  14. "content_type": kwargs.get("content_type"),
  15. })
  16. return 200, {"status": "ok"}
  17. monkeypatch.setattr("ops.common.cpa_management_request", fake_request)
  18. client = CpaClient(
  19. "http://127.0.0.1:8317/v0/management",
  20. management_key="secret",
  21. )
  22. assert client.delete_auth_file("alpha@example.com.json") is True
  23. assert calls == [
  24. {
  25. "method": "DELETE",
  26. "path": "auth-files",
  27. "key": "secret",
  28. "query": {"name": "alpha@example.com.json"},
  29. "body": None,
  30. "content_type": None,
  31. }
  32. ]
  33. def test_cpa_client_delete_auth_files_deletes_each_name_separately(monkeypatch) -> None:
  34. calls: list[dict[str, object]] = []
  35. def fake_request(method: str, path: str, key: str, **kwargs): # type: ignore[no-untyped-def]
  36. calls.append({
  37. "method": method,
  38. "path": path,
  39. "key": key,
  40. "query": kwargs.get("query"),
  41. "body": kwargs.get("body"),
  42. "content_type": kwargs.get("content_type"),
  43. })
  44. return 200, {"status": "ok"}
  45. monkeypatch.setattr("ops.common.cpa_management_request", fake_request)
  46. client = CpaClient(
  47. "http://127.0.0.1:8317/v0/management",
  48. management_key="secret",
  49. )
  50. assert client.delete_auth_files(["alpha@example.com.json", "beta@example.com.json"]) is True
  51. assert calls == [
  52. {
  53. "method": "DELETE",
  54. "path": "auth-files",
  55. "key": "secret",
  56. "query": {"name": "alpha@example.com.json"},
  57. "body": None,
  58. "content_type": None,
  59. },
  60. {
  61. "method": "DELETE",
  62. "path": "auth-files",
  63. "key": "secret",
  64. "query": {"name": "beta@example.com.json"},
  65. "body": None,
  66. "content_type": None,
  67. },
  68. ]
  69. def test_cpa_client_upload_auth_file_posts_multipart(monkeypatch) -> None:
  70. captured: list[dict[str, object]] = []
  71. def fake_request(method: str, path: str, key: str, **kwargs): # type: ignore[no-untyped-def]
  72. captured.append(
  73. {
  74. "method": method,
  75. "path": path,
  76. "key": key,
  77. "content_type": kwargs.get("content_type"),
  78. "body": kwargs.get("body"),
  79. }
  80. )
  81. return 201, {"status": "ok"}
  82. monkeypatch.setattr("ops.common.cpa_management_request", fake_request)
  83. client = CpaClient("http://127.0.0.1:8317/v0/management", management_key="secret")
  84. ok = client.upload_auth_file("alpha@example.com.json", {"email": "alpha@example.com", "refresh_token": "rt"})
  85. assert ok is True
  86. assert captured[0]["method"] == "POST"
  87. assert captured[0]["path"] == "auth-files"
  88. assert "multipart/form-data" in str(captured[0]["content_type"])
  89. assert b"alpha@example.com.json" in captured[0]["body"] # type: ignore[operator]
  90. def test_cpa_client_health_check_uses_http_only(monkeypatch) -> None:
  91. monkeypatch.setattr("ops.common.cpa_management_request", lambda *args, **kwargs: (200, {"files": []}))
  92. client = CpaClient("http://127.0.0.1:8317/v0/management", management_key="secret")
  93. assert client.health_check() is True
  94. def test_cpa_client_rejects_removed_legacy_kwargs() -> None:
  95. with pytest.raises(TypeError):
  96. CpaClient("http://127.0.0.1:8317/v0/management", management_key="secret", management_mode="http")
  97. def test_create_backend_client_returns_cpa_client() -> None:
  98. settings = SimpleNamespace(
  99. backend="cpa",
  100. cpa_management_base_url="http://127.0.0.1:8317/v0/management",
  101. cpa_management_key="secret",
  102. )
  103. client = create_backend_client(settings)
  104. assert isinstance(client, CpaClient)
  105. assert client.base_url == "http://127.0.0.1:8317/v0/management"
  106. assert client.management_key == "secret"