| | import os |
| | from unittest.mock import MagicMock |
| |
|
| | import pytest |
| | from _pytest.monkeypatch import MonkeyPatch |
| | from tos import TosClientV2 |
| | from tos.clientv2 import DeleteObjectOutput, GetObjectOutput, HeadObjectOutput, PutObjectOutput |
| |
|
| | from tests.unit_tests.oss.__mock.base import ( |
| | get_example_bucket, |
| | get_example_data, |
| | get_example_filename, |
| | get_example_filepath, |
| | ) |
| |
|
| |
|
| | class AttrDict(dict): |
| | def __getattr__(self, item): |
| | return self.get(item) |
| |
|
| |
|
| | class MockVolcengineTosClass: |
| | def __init__(self, ak="", sk="", endpoint="", region=""): |
| | self.bucket_name = get_example_bucket() |
| | self.key = get_example_filename() |
| | self.content = get_example_data() |
| | self.filepath = get_example_filepath() |
| | self.resp = AttrDict( |
| | { |
| | "x-tos-server-side-encryption": "kms", |
| | "x-tos-server-side-encryption-kms-key-id": "trn:kms:cn-beijing:****:keyrings/ring-test/keys/key-test", |
| | "x-tos-server-side-encryption-customer-algorithm": "AES256", |
| | "x-tos-version-id": "test", |
| | "x-tos-hash-crc64ecma": 123456, |
| | "request_id": "test", |
| | "headers": { |
| | "x-tos-id-2": "test", |
| | "ETag": "123456", |
| | }, |
| | "status": 200, |
| | } |
| | ) |
| |
|
| | def put_object(self, bucket: str, key: str, content=None) -> PutObjectOutput: |
| | assert bucket == self.bucket_name |
| | assert key == self.key |
| | assert content == self.content |
| | return PutObjectOutput(self.resp) |
| |
|
| | def get_object(self, bucket: str, key: str) -> GetObjectOutput: |
| | assert bucket == self.bucket_name |
| | assert key == self.key |
| |
|
| | get_object_output = MagicMock(GetObjectOutput) |
| | get_object_output.read.return_value = self.content |
| | return get_object_output |
| |
|
| | def get_object_to_file(self, bucket: str, key: str, file_path: str): |
| | assert bucket == self.bucket_name |
| | assert key == self.key |
| | assert file_path == self.filepath |
| |
|
| | def head_object(self, bucket: str, key: str) -> HeadObjectOutput: |
| | assert bucket == self.bucket_name |
| | assert key == self.key |
| | return HeadObjectOutput(self.resp) |
| |
|
| | def delete_object(self, bucket: str, key: str): |
| | assert bucket == self.bucket_name |
| | assert key == self.key |
| | return DeleteObjectOutput(self.resp) |
| |
|
| |
|
| | MOCK = os.getenv("MOCK_SWITCH", "false").lower() == "true" |
| |
|
| |
|
| | @pytest.fixture |
| | def setup_volcengine_tos_mock(monkeypatch: MonkeyPatch): |
| | if MOCK: |
| | monkeypatch.setattr(TosClientV2, "__init__", MockVolcengineTosClass.__init__) |
| | monkeypatch.setattr(TosClientV2, "put_object", MockVolcengineTosClass.put_object) |
| | monkeypatch.setattr(TosClientV2, "get_object", MockVolcengineTosClass.get_object) |
| | monkeypatch.setattr(TosClientV2, "get_object_to_file", MockVolcengineTosClass.get_object_to_file) |
| | monkeypatch.setattr(TosClientV2, "head_object", MockVolcengineTosClass.head_object) |
| | monkeypatch.setattr(TosClientV2, "delete_object", MockVolcengineTosClass.delete_object) |
| |
|
| | yield |
| |
|
| | if MOCK: |
| | monkeypatch.undo() |
| |
|