|
@@ -0,0 +1,100 @@
|
|
|
+import os
|
|
|
+import posixpath
|
|
|
+from unittest.mock import MagicMock
|
|
|
+
|
|
|
+import pytest
|
|
|
+from _pytest.monkeypatch import MonkeyPatch
|
|
|
+from oss2 import Bucket
|
|
|
+from oss2.models import GetObjectResult, PutObjectResult
|
|
|
+
|
|
|
+from tests.unit_tests.oss.__mock.base import (
|
|
|
+ get_example_bucket,
|
|
|
+ get_example_data,
|
|
|
+ get_example_filename,
|
|
|
+ get_example_filepath,
|
|
|
+ get_example_folder,
|
|
|
+)
|
|
|
+
|
|
|
+
|
|
|
+class MockResponse:
|
|
|
+ def __init__(self, status, headers, request_id):
|
|
|
+ self.status = status
|
|
|
+ self.headers = headers
|
|
|
+ self.request_id = request_id
|
|
|
+
|
|
|
+
|
|
|
+class MockAliyunOssClass:
|
|
|
+ def __init__(
|
|
|
+ self,
|
|
|
+ auth,
|
|
|
+ endpoint,
|
|
|
+ bucket_name,
|
|
|
+ is_cname=False,
|
|
|
+ session=None,
|
|
|
+ connect_timeout=None,
|
|
|
+ app_name="",
|
|
|
+ enable_crc=True,
|
|
|
+ proxies=None,
|
|
|
+ region=None,
|
|
|
+ cloudbox_id=None,
|
|
|
+ is_path_style=False,
|
|
|
+ is_verify_object_strict=True,
|
|
|
+ ):
|
|
|
+ self.bucket_name = get_example_bucket()
|
|
|
+ self.key = posixpath.join(get_example_folder(), get_example_filename())
|
|
|
+ self.content = get_example_data()
|
|
|
+ self.filepath = get_example_filepath()
|
|
|
+ self.resp = MockResponse(
|
|
|
+ 200,
|
|
|
+ {
|
|
|
+ "etag": "ee8de918d05640145b18f70f4c3aa602",
|
|
|
+ "x-oss-version-id": "CAEQNhiBgMDJgZCA0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY0****",
|
|
|
+ },
|
|
|
+ "request_id",
|
|
|
+ )
|
|
|
+
|
|
|
+ def put_object(self, key, data, headers=None, progress_callback=None):
|
|
|
+ assert key == self.key
|
|
|
+ assert data == self.content
|
|
|
+ return PutObjectResult(self.resp)
|
|
|
+
|
|
|
+ def get_object(self, key, byte_range=None, headers=None, progress_callback=None, process=None, params=None):
|
|
|
+ assert key == self.key
|
|
|
+
|
|
|
+ get_object_output = MagicMock(GetObjectResult)
|
|
|
+ get_object_output.read.return_value = self.content
|
|
|
+ return get_object_output
|
|
|
+
|
|
|
+ def get_object_to_file(
|
|
|
+ self, key, filename, byte_range=None, headers=None, progress_callback=None, process=None, params=None
|
|
|
+ ):
|
|
|
+ assert key == self.key
|
|
|
+ assert filename == self.filepath
|
|
|
+
|
|
|
+ def object_exists(self, key, headers=None):
|
|
|
+ assert key == self.key
|
|
|
+ return True
|
|
|
+
|
|
|
+ def delete_object(self, key, params=None, headers=None):
|
|
|
+ assert key == self.key
|
|
|
+ self.resp.headers["x-oss-delete-marker"] = True
|
|
|
+ return self.resp
|
|
|
+
|
|
|
+
|
|
|
+MOCK = os.getenv("MOCK_SWITCH", "false").lower() == "true"
|
|
|
+
|
|
|
+
|
|
|
+@pytest.fixture
|
|
|
+def setup_aliyun_oss_mock(monkeypatch: MonkeyPatch):
|
|
|
+ if MOCK:
|
|
|
+ monkeypatch.setattr(Bucket, "__init__", MockAliyunOssClass.__init__)
|
|
|
+ monkeypatch.setattr(Bucket, "put_object", MockAliyunOssClass.put_object)
|
|
|
+ monkeypatch.setattr(Bucket, "get_object", MockAliyunOssClass.get_object)
|
|
|
+ monkeypatch.setattr(Bucket, "get_object_to_file", MockAliyunOssClass.get_object_to_file)
|
|
|
+ monkeypatch.setattr(Bucket, "object_exists", MockAliyunOssClass.object_exists)
|
|
|
+ monkeypatch.setattr(Bucket, "delete_object", MockAliyunOssClass.delete_object)
|
|
|
+
|
|
|
+ yield
|
|
|
+
|
|
|
+ if MOCK:
|
|
|
+ monkeypatch.undo()
|