Преглед на файлове

fix: better opendal tests (#11569)

Signed-off-by: yihong0618 <zouzou0208@gmail.com>
yihong преди 4 месеца
родител
ревизия
180743612c
променени са 2 файла, в които са добавени 81 реда и са изтрити 5 реда
  1. 8 2
      api/extensions/storage/opendal_storage.py
  2. 73 3
      api/tests/unit_tests/oss/opendal/test_opendal.py

+ 8 - 2
api/extensions/storage/opendal_storage.py

@@ -58,8 +58,14 @@ class OpenDALStorage(BaseStorage):
         with Path(target_filepath).open("wb") as f:
             f.write(self.op.read(path=filename))
 
-    def exists(self, filename: str):
-        return self.op.stat(path=filename).mode.is_file()
+    def exists(self, filename: str) -> bool:
+        # FIXME this is a workaround for opendal python-binding do not have a exists method and no better
+        # error handler here when opendal python-binding has a exists method, we should use it
+        # more https://github.com/apache/opendal/blob/main/bindings/python/src/operator.rs
+        try:
+            return self.op.stat(path=filename).mode.is_file()
+        except Exception as e:
+            return False
 
     def delete(self, filename: str):
         if self.exists(filename):

+ 73 - 3
api/tests/unit_tests/oss/opendal/test_opendal.py

@@ -1,15 +1,20 @@
+import os
+from collections.abc import Generator
+from pathlib import Path
+
 import pytest
 
 from configs.middleware.storage.opendal_storage_config import OpenDALScheme
 from extensions.storage.opendal_storage import OpenDALStorage
 from tests.unit_tests.oss.__mock.base import (
-    BaseStorageTest,
+    get_example_data,
+    get_example_filename,
+    get_example_filepath,
     get_example_folder,
 )
-from tests.unit_tests.oss.__mock.local import setup_local_fs_mock
 
 
-class TestOpenDAL(BaseStorageTest):
+class TestOpenDAL:
     @pytest.fixture(autouse=True)
     def setup_method(self, *args, **kwargs):
         """Executed before each test method."""
@@ -17,3 +22,68 @@ class TestOpenDAL(BaseStorageTest):
             scheme=OpenDALScheme.FS,
             root=get_example_folder(),
         )
+
+    def teardown_method(self, method):
+        """Clean up after each test method."""
+        try:
+            if self.storage.exists(get_example_filename()):
+                self.storage.delete(get_example_filename())
+
+            filepath = Path(get_example_filepath())
+            if filepath.exists():
+                filepath.unlink()
+        except:
+            pass
+
+    def test_save_and_exists(self):
+        """Test saving data and checking existence."""
+        filename = get_example_filename()
+        data = get_example_data()
+
+        assert not self.storage.exists(filename)
+        self.storage.save(filename, data)
+        assert self.storage.exists(filename)
+
+    def test_load_once(self):
+        """Test loading data once."""
+        filename = get_example_filename()
+        data = get_example_data()
+
+        self.storage.save(filename, data)
+        loaded_data = self.storage.load_once(filename)
+        assert loaded_data == data
+
+    def test_load_stream(self):
+        """Test loading data as a stream."""
+        filename = get_example_filename()
+        data = get_example_data()
+
+        self.storage.save(filename, data)
+        generator = self.storage.load_stream(filename)
+        assert isinstance(generator, Generator)
+        assert next(generator) == data
+
+    def test_download(self):
+        """Test downloading data to a file."""
+        filename = get_example_filename()
+        filepath = get_example_filepath()
+        data = get_example_data()
+
+        self.storage.save(filename, data)
+        self.storage.download(filename, filepath)
+
+        downloaded_path = Path(filepath)
+        assert downloaded_path.exists()
+        downloaded_data = downloaded_path.read_bytes()
+        assert downloaded_data == data
+
+    def test_delete(self):
+        """Test deleting a file."""
+        filename = get_example_filename()
+        data = get_example_data()
+
+        self.storage.save(filename, data)
+        assert self.storage.exists(filename)
+
+        self.storage.delete(filename)
+        assert not self.storage.exists(filename)