Skip to content

Commit c2f652e

Browse files
committed
added tests
1 parent d4b3c73 commit c2f652e

File tree

2 files changed

+46
-7
lines changed

2 files changed

+46
-7
lines changed

test/core/store/fs/test_registry.py

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def test_open_packed(self):
113113
# noinspection PyUnresolvedReferences,PyPep8Naming
114114
class FsDataStoresTestMixin(ABC):
115115
@abstractmethod
116-
def create_data_store(self) -> FsDataStore:
116+
def create_data_store(self, read_only=False) -> FsDataStore:
117117
pass
118118

119119
@classmethod
@@ -138,6 +138,28 @@ def prepare_fs(cls, fs: fsspec.AbstractFileSystem, root: str):
138138
with fs.open(file_path, "w") as fp:
139139
fp.write("\n")
140140

141+
def test_no_write_to_read_only(self):
142+
data_store = self.create_data_store(read_only=True)
143+
data = new_cube_data()
144+
with self.assertRaises(DataStoreError) as dse:
145+
data_store.write_data(data)
146+
self.assertEqual("Data store is read-only.", f"{dse.exception}")
147+
148+
def test_no_delete_on_read_only(self):
149+
data_store = self.create_data_store(read_only=True)
150+
with self.assertRaises(DataStoreError) as dse:
151+
data_store.delete_data("the_data_id_does_not_even_matter.nc")
152+
self.assertEqual("Data store is read-only.", f"{dse.exception}")
153+
154+
def test_cannot_open_unknown_format(self):
155+
data_store = self.create_data_store()
156+
with self.assertRaises(DataStoreError) as dse:
157+
data_store.open_data("unknown.format")
158+
self.assertEqual(
159+
"Cannot determine data type for data resource 'unknown.format'",
160+
f"{dse.exception}"
161+
)
162+
141163
def test_mldataset_levels(self):
142164
data_store = self.create_data_store()
143165
self._assert_multi_level_dataset_format_supported(data_store)
@@ -492,21 +514,21 @@ def _assert_dataset_supported(
492514

493515

494516
class FileFsDataStoresTest(FsDataStoresTestMixin, unittest.TestCase):
495-
def create_data_store(self) -> FsDataStore:
517+
def create_data_store(self, read_only=False) -> FsDataStore:
496518
root = os.path.join(new_temp_dir(prefix="xcube"), ROOT_DIR)
497519
self.prepare_fs(fsspec.filesystem("file"), root)
498-
return new_fs_data_store("file", root=root, max_depth=3)
520+
return new_fs_data_store("file", root=root, max_depth=3, read_only=read_only)
499521

500522

501523
class MemoryFsDataStoresTest(FsDataStoresTestMixin, unittest.TestCase):
502-
def create_data_store(self) -> FsDataStore:
524+
def create_data_store(self, read_only=False) -> FsDataStore:
503525
root = ROOT_DIR
504526
self.prepare_fs(fsspec.filesystem("memory"), root)
505-
return new_fs_data_store("memory", root=root, max_depth=3)
527+
return new_fs_data_store("memory", root=root, max_depth=3, read_only=read_only)
506528

507529

508530
class S3FsDataStoresTest(FsDataStoresTestMixin, S3Test):
509-
def create_data_store(self) -> FsDataStore:
531+
def create_data_store(self, read_only=False) -> FsDataStore:
510532
root = ROOT_DIR
511533
storage_options = dict(
512534
anon=False,
@@ -516,7 +538,8 @@ def create_data_store(self) -> FsDataStore:
516538
)
517539
self.prepare_fs(fsspec.filesystem("s3", **storage_options), root)
518540
return new_fs_data_store(
519-
"s3", root=root, max_depth=3, storage_options=storage_options
541+
"s3", root=root, max_depth=3, storage_options=storage_options,
542+
read_only=read_only
520543
)
521544

522545
class GetFilenameExtensionsTest(unittest.TestCase):

test/core/store/test_store.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
list_data_store_ids,
1515
new_data_store,
1616
)
17+
from xcube.core.store.fs.store import BaseFsDataStore
1718
from xcube.core.store.preload import NullPreloadHandle
1819

1920

@@ -52,6 +53,13 @@ def test_list_data_store_ids_detail(self):
5253

5354

5455
class TestBaseFsDataStore(unittest.TestCase):
56+
57+
def test_get_data_types(self):
58+
self.assertEqual(
59+
{"dataset", "geodataframe", "mldataset"},
60+
set(BaseFsDataStore.get_data_types())
61+
)
62+
5563
def test_get_data_opener_ids(self):
5664
store = new_data_store("file")
5765
self.assertEqual(
@@ -137,6 +145,14 @@ def test_get_filename_extensions_s3_openers(self):
137145
def test_get_filename_extensions_s3_writers(self):
138146
self.assert_accessors("s3", "writers")
139147

148+
def test_get_filename_extensions_unknown_accessor_type(self):
149+
with self.assertRaises(DataStoreError) as dse:
150+
self.assert_accessors("s3", "modifiers")
151+
self.assertEqual(
152+
"Invalid accessor type. Must be 'openers' or 'writers', was 'modifiers'",
153+
f"{dse.exception}"
154+
)
155+
140156
def assert_accessors(
141157
self, protocol: str, accessor_type: Literal["openers", "writers"]
142158
):

0 commit comments

Comments
 (0)