mirror of
https://github.com/langgenius/dify.git
synced 2026-10-04 13:47:55 +08:00
test: use real object storage SDK responses (#43231)
This commit is contained in:
1 parent
c687d0dc6f
commit
09e372b237
5 files changed
+29
-22
No files matched your search
@@ -1,9 +1,9 @@
|
|||||||
import os
|
import os
|
||||||
import posixpath
|
import posixpath
|
||||||
from unittest.mock import MagicMock
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from oss2 import Bucket
|
from oss2 import Bucket
|
||||||
|
from oss2.http import Response as OssResponse
|
||||||
from oss2.models import GetObjectResult, PutObjectResult
|
from oss2.models import GetObjectResult, PutObjectResult
|
||||||
|
|
||||||
from tests.unit_tests.oss.__mock.base import (
|
from tests.unit_tests.oss.__mock.base import (
|
||||||
@@ -12,6 +12,7 @@ from tests.unit_tests.oss.__mock.base import (
|
|||||||
get_example_filename,
|
get_example_filename,
|
||||||
get_example_filepath,
|
get_example_filepath,
|
||||||
get_example_folder,
|
get_example_folder,
|
||||||
|
object_response,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -60,9 +61,9 @@ class MockAliyunOssClass:
|
|||||||
def get_object(self, key, byte_range=None, headers=None, progress_callback=None, process=None, params=None):
|
def get_object(self, key, byte_range=None, headers=None, progress_callback=None, process=None, params=None):
|
||||||
assert key == self.key
|
assert key == self.key
|
||||||
|
|
||||||
get_object_output = MagicMock(GetObjectResult)
|
response = object_response(self.content)
|
||||||
get_object_output.read.return_value = self.content
|
response.headers.update(self.resp.headers)
|
||||||
return get_object_output
|
return GetObjectResult(OssResponse(response))
|
||||||
|
|
||||||
def get_object_to_file(
|
def get_object_to_file(
|
||||||
self, key, filename, byte_range=None, headers=None, progress_callback=None, process=None, params=None
|
self, key, filename, byte_range=None, headers=None, progress_callback=None, process=None, params=None
|
||||||
|
|||||||
@@ -1,10 +1,20 @@
|
|||||||
from collections.abc import Generator
|
from collections.abc import Generator
|
||||||
|
from io import BytesIO
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
from requests import Response
|
||||||
|
|
||||||
from extensions.storage.base_storage import BaseStorage
|
from extensions.storage.base_storage import BaseStorage
|
||||||
|
|
||||||
|
|
||||||
|
def object_response(content: bytes) -> Response:
|
||||||
|
response = Response()
|
||||||
|
response.status_code = 200
|
||||||
|
response.headers["Content-Length"] = str(len(content))
|
||||||
|
response.raw = BytesIO(content)
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
def get_example_folder() -> str:
|
def get_example_folder() -> str:
|
||||||
return "~/dify"
|
return "~/dify"
|
||||||
|
|
||||||
@@ -53,6 +63,7 @@ class BaseStorageTest:
|
|||||||
generator = self.storage.load_stream(get_example_filename())
|
generator = self.storage.load_stream(get_example_filename())
|
||||||
assert isinstance(generator, Generator)
|
assert isinstance(generator, Generator)
|
||||||
assert next(generator) == get_example_data()
|
assert next(generator) == get_example_data()
|
||||||
|
assert list(generator) == []
|
||||||
|
|
||||||
def test_download(self):
|
def test_download(self):
|
||||||
"""Test downloading data."""
|
"""Test downloading data."""
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import os
|
import os
|
||||||
from unittest.mock import MagicMock
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from qcloud_cos import CosS3Client
|
from qcloud_cos import CosS3Client
|
||||||
@@ -10,6 +9,7 @@ from tests.unit_tests.oss.__mock.base import (
|
|||||||
get_example_data,
|
get_example_data,
|
||||||
get_example_filename,
|
get_example_filename,
|
||||||
get_example_filepath,
|
get_example_filepath,
|
||||||
|
object_response,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -36,19 +36,7 @@ class MockTencentCosClass:
|
|||||||
assert Bucket == self.bucket_name
|
assert Bucket == self.bucket_name
|
||||||
assert Key == self.key
|
assert Key == self.key
|
||||||
|
|
||||||
mock_stream_body = MagicMock(StreamBody)
|
return {"Body": StreamBody(object_response(self.content))}
|
||||||
mock_raw_stream = MagicMock()
|
|
||||||
mock_stream_body.get_raw_stream.return_value = mock_raw_stream
|
|
||||||
mock_raw_stream.read.return_value = self.content
|
|
||||||
|
|
||||||
mock_stream_body.get_stream_to_file = MagicMock()
|
|
||||||
|
|
||||||
def chunk_generator(chunk_size=2):
|
|
||||||
for i in range(0, len(self.content), chunk_size):
|
|
||||||
yield self.content[i : i + chunk_size]
|
|
||||||
|
|
||||||
mock_stream_body.get_stream.return_value = chunk_generator(chunk_size=4096)
|
|
||||||
return {"Body": mock_stream_body}
|
|
||||||
|
|
||||||
def object_exists(self, Bucket, Key): # noqa: N803
|
def object_exists(self, Bucket, Key): # noqa: N803
|
||||||
assert Bucket == self.bucket_name
|
assert Bucket == self.bucket_name
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
import os
|
import os
|
||||||
from collections import UserDict
|
from collections import UserDict
|
||||||
from unittest.mock import MagicMock
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from tos import TosClientV2
|
from tos import TosClientV2
|
||||||
from tos.clientv2 import DeleteObjectOutput, GetObjectOutput, HeadObjectOutput, PutObjectOutput
|
from tos.clientv2 import DeleteObjectOutput, GetObjectOutput, HeadObjectOutput, PutObjectOutput
|
||||||
|
from tos.http import Response as TosResponse
|
||||||
|
|
||||||
from tests.unit_tests.oss.__mock.base import (
|
from tests.unit_tests.oss.__mock.base import (
|
||||||
get_example_bucket,
|
get_example_bucket,
|
||||||
get_example_data,
|
get_example_data,
|
||||||
get_example_filename,
|
get_example_filename,
|
||||||
get_example_filepath,
|
get_example_filepath,
|
||||||
|
object_response,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -51,9 +52,7 @@ class MockVolcengineTosClass:
|
|||||||
assert bucket == self.bucket_name
|
assert bucket == self.bucket_name
|
||||||
assert key == self.key
|
assert key == self.key
|
||||||
|
|
||||||
get_object_output = MagicMock(GetObjectOutput)
|
return GetObjectOutput(TosResponse(object_response(self.content)))
|
||||||
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):
|
def get_object_to_file(self, bucket: str, key: str, file_path: str):
|
||||||
assert bucket == self.bucket_name
|
assert bucket == self.bucket_name
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from pathlib import Path
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@@ -7,6 +8,8 @@ from extensions.storage.tencent_cos_storage import TencentCosStorage
|
|||||||
from tests.unit_tests.oss.__mock.base import (
|
from tests.unit_tests.oss.__mock.base import (
|
||||||
BaseStorageTest,
|
BaseStorageTest,
|
||||||
get_example_bucket,
|
get_example_bucket,
|
||||||
|
get_example_data,
|
||||||
|
get_example_filename,
|
||||||
)
|
)
|
||||||
|
|
||||||
pytest_plugins = ("tests.unit_tests.oss.__mock.tencent_cos",)
|
pytest_plugins = ("tests.unit_tests.oss.__mock.tencent_cos",)
|
||||||
@@ -20,6 +23,11 @@ class TestTencentCos(BaseStorageTest):
|
|||||||
self.storage = TencentCosStorage()
|
self.storage = TencentCosStorage()
|
||||||
self.storage.bucket_name = get_example_bucket()
|
self.storage.bucket_name = get_example_bucket()
|
||||||
|
|
||||||
|
def test_download(self, tmp_path: Path):
|
||||||
|
destination = tmp_path / "download.txt"
|
||||||
|
self.storage.download(get_example_filename(), str(destination))
|
||||||
|
assert destination.read_bytes() == get_example_data()
|
||||||
|
|
||||||
|
|
||||||
class TestTencentCosConfiguration:
|
class TestTencentCosConfiguration:
|
||||||
"""Tests for TencentCosStorage initialization with different configurations."""
|
"""Tests for TencentCosStorage initialization with different configurations."""
|
||||||
|
|||||||
Reference in new issue
Block a user