volcengine_tos.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import os
  2. from unittest.mock import MagicMock
  3. import pytest
  4. from _pytest.monkeypatch import MonkeyPatch
  5. from tos import TosClientV2
  6. from tos.clientv2 import DeleteObjectOutput, GetObjectOutput, HeadObjectOutput, PutObjectOutput
  7. from tests.unit_tests.oss.__mock.base import (
  8. get_example_bucket,
  9. get_example_data,
  10. get_example_filename,
  11. get_example_filepath,
  12. )
  13. class AttrDict(dict):
  14. def __getattr__(self, item):
  15. return self.get(item)
  16. class MockVolcengineTosClass:
  17. def __init__(self, ak="", sk="", endpoint="", region=""):
  18. self.bucket_name = get_example_bucket()
  19. self.key = get_example_filename()
  20. self.content = get_example_data()
  21. self.filepath = get_example_filepath()
  22. self.resp = AttrDict(
  23. {
  24. "x-tos-server-side-encryption": "kms",
  25. "x-tos-server-side-encryption-kms-key-id": "trn:kms:cn-beijing:****:keyrings/ring-test/keys/key-test",
  26. "x-tos-server-side-encryption-customer-algorithm": "AES256",
  27. "x-tos-version-id": "test",
  28. "x-tos-hash-crc64ecma": 123456,
  29. "request_id": "test",
  30. "headers": {
  31. "x-tos-id-2": "test",
  32. "ETag": "123456",
  33. },
  34. "status": 200,
  35. }
  36. )
  37. def put_object(self, bucket: str, key: str, content=None) -> PutObjectOutput:
  38. assert bucket == self.bucket_name
  39. assert key == self.key
  40. assert content == self.content
  41. return PutObjectOutput(self.resp)
  42. def get_object(self, bucket: str, key: str) -> GetObjectOutput:
  43. assert bucket == self.bucket_name
  44. assert key == self.key
  45. get_object_output = MagicMock(GetObjectOutput)
  46. get_object_output.read.return_value = self.content
  47. return get_object_output
  48. def get_object_to_file(self, bucket: str, key: str, file_path: str):
  49. assert bucket == self.bucket_name
  50. assert key == self.key
  51. assert file_path == self.filepath
  52. def head_object(self, bucket: str, key: str) -> HeadObjectOutput:
  53. assert bucket == self.bucket_name
  54. assert key == self.key
  55. return HeadObjectOutput(self.resp)
  56. def delete_object(self, bucket: str, key: str):
  57. assert bucket == self.bucket_name
  58. assert key == self.key
  59. return DeleteObjectOutput(self.resp)
  60. MOCK = os.getenv("MOCK_SWITCH", "false").lower() == "true"
  61. @pytest.fixture
  62. def setup_volcengine_tos_mock(monkeypatch: MonkeyPatch):
  63. if MOCK:
  64. monkeypatch.setattr(TosClientV2, "__init__", MockVolcengineTosClass.__init__)
  65. monkeypatch.setattr(TosClientV2, "put_object", MockVolcengineTosClass.put_object)
  66. monkeypatch.setattr(TosClientV2, "get_object", MockVolcengineTosClass.get_object)
  67. monkeypatch.setattr(TosClientV2, "get_object_to_file", MockVolcengineTosClass.get_object_to_file)
  68. monkeypatch.setattr(TosClientV2, "head_object", MockVolcengineTosClass.head_object)
  69. monkeypatch.setattr(TosClientV2, "delete_object", MockVolcengineTosClass.delete_object)
  70. yield
  71. if MOCK:
  72. monkeypatch.undo()