Skip to content

Commit 47c2157

Browse files
committed
test goes all the way down
1 parent 6c04ea4 commit 47c2157

File tree

2 files changed

+27
-47
lines changed

2 files changed

+27
-47
lines changed

packages/aws-library/tests/test_s3_client.py

Lines changed: 26 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -562,57 +562,36 @@ async def test_list_objects(
562562
# assert pre-conditions
563563
assert len(with_uploaded_folder_on_s3) >= 1, "wrong initialization of test!"
564564

565-
# Start testing from the root, will return only 1 object (the top level folder)
566-
top_level_directories, top_level_files = _get_paths_with_prefix(
567-
with_uploaded_folder_on_s3, prefix_level=0, path_prefix=None
568-
)
569-
assert (
570-
len(top_level_directories) == 1
571-
), "wrong initialization of test! we expect only one folder here"
572-
assert not top_level_files
573-
top_level_paths = top_level_directories | top_level_files
565+
def find_deepest_file(files: list[UploadedFile]) -> Path:
566+
return Path(max(files, key=lambda f: f.s3_key.count("/")).s3_key)
574567

575-
objects = await simcore_s3_api.list_objects(
576-
bucket=with_s3_bucket, prefix=None, start_after=None
577-
)
578-
assert len(objects) == len(top_level_paths)
579-
assert {_.as_path() for _ in objects} == top_level_paths
568+
deepest_file_path = find_deepest_file(with_uploaded_folder_on_s3)
569+
prefixes = deepest_file_path.parents[0].parts
580570

581-
# go one level deeper, will return all the folders + files in the first level
582-
first_level_prefix = random.choice(list(top_level_directories)) # noqa: S311
583-
first_level_directories, first_level_files = _get_paths_with_prefix(
584-
with_uploaded_folder_on_s3, prefix_level=1, path_prefix=first_level_prefix
585-
)
586-
first_level_paths = first_level_directories | first_level_files
571+
# Start from the root and go down to the directory containing the deepest file
572+
for level in range(len(prefixes)):
573+
current_prefix = (
574+
Path(prefixes[0]).joinpath(*prefixes[1:level]) if level > 0 else None
575+
)
587576

588-
objects = await simcore_s3_api.list_objects(
589-
bucket=with_s3_bucket, prefix=first_level_prefix, start_after=None
590-
)
591-
assert len(objects) == len(first_level_paths)
592-
assert {_.as_path() for _ in objects} == first_level_paths
593-
# check files and directories are correctly separated
594-
received_files = {_ for _ in objects if isinstance(_, S3MetaData)}
595-
received_directories = {_ for _ in objects if isinstance(_, S3DirectoryMetaData)}
596-
assert len(received_files) == len(first_level_files)
597-
assert len(received_directories) == len(first_level_directories)
598-
599-
# we go one more level down under a random first-level directory
600-
second_level_prefix = random.choice(list(first_level_directories)) # noqa: S311
601-
second_level_directories, second_level_files = _get_paths_with_prefix(
602-
with_uploaded_folder_on_s3, prefix_level=2, path_prefix=second_level_prefix
603-
)
604-
second_level_paths = second_level_directories | second_level_files
577+
directories, files = _get_paths_with_prefix(
578+
with_uploaded_folder_on_s3, prefix_level=level, path_prefix=current_prefix
579+
)
580+
all_paths = directories | files
605581

606-
objects = await simcore_s3_api.list_objects(
607-
bucket=with_s3_bucket, prefix=second_level_prefix, start_after=None
608-
)
609-
assert len(objects) == len(second_level_paths)
610-
assert {_.as_path() for _ in objects} == second_level_paths
611-
# check files and directories are correctly separated
612-
received_files = {_ for _ in objects if isinstance(_, S3MetaData)}
613-
received_directories = {_ for _ in objects if isinstance(_, S3DirectoryMetaData)}
614-
assert len(received_files) == len(second_level_files)
615-
assert len(received_directories) == len(second_level_directories)
582+
objects = await simcore_s3_api.list_objects(
583+
bucket=with_s3_bucket, prefix=current_prefix, start_after=None
584+
)
585+
assert len(objects) == len(all_paths)
586+
assert {_.as_path() for _ in objects} == all_paths
587+
588+
# Check files and directories are correctly separated
589+
received_files = {_ for _ in objects if isinstance(_, S3MetaData)}
590+
received_directories = {
591+
_ for _ in objects if isinstance(_, S3DirectoryMetaData)
592+
}
593+
assert len(received_files) == len(files)
594+
assert len(received_directories) == len(directories)
616595

617596

618597
async def test_get_file_metadata(

services/storage/src/simcore_service_storage/simcore_s3_dsm.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ async def list_files_paginated(
146146
offset: NonNegativeInt,
147147
) -> tuple[list[FileMetaData], TotalNumber]:
148148
"""returns a page of the file meta data a user has access to"""
149+
get_s3_client(self.app).list_objects_paginated()
149150
return [], 0
150151

151152
async def list_files( # noqa C901

0 commit comments

Comments
 (0)