44
55import pytest
66from faker import Faker
7- from pydantic import ByteSize
7+ from pydantic import ByteSize , NonNegativeInt
88from pytest_simcore .helpers .logging_tools import log_context
99
1010
@@ -26,6 +26,37 @@ def _creator(size: ByteSize, name: str | None = None) -> Path:
2626 return _creator
2727
2828
29+ def _create_random_content (
30+ faker : Faker ,
31+ * ,
32+ base_dir : Path ,
33+ file_min_size : ByteSize ,
34+ file_max_size : ByteSize ,
35+ remaining_size : ByteSize ,
36+ depth : NonNegativeInt | None ,
37+ ) -> ByteSize :
38+ if remaining_size <= 0 :
39+ return remaining_size
40+
41+ file_size = ByteSize (
42+ faker .pyint (
43+ min_value = min (file_min_size , remaining_size ),
44+ max_value = min (remaining_size , file_max_size ),
45+ )
46+ )
47+ if depth is None :
48+ depth = faker .pyint (0 , 5 )
49+ file_path = base_dir / f"{ faker .unique .file_path (depth = depth , absolute = False )} "
50+ file_path .parent .mkdir (parents = True , exist_ok = True )
51+ assert not file_path .exists ()
52+ with file_path .open ("wb" ) as fp :
53+ fp .write (f"I am a { file_size .human_readable ()} file" .encode ())
54+ fp .truncate (file_size )
55+ assert file_path .exists ()
56+
57+ return ByteSize (remaining_size - file_size )
58+
59+
2960@pytest .fixture
3061def create_folder_of_size_with_multiple_files (
3162 tmp_path : Path , faker : Faker
@@ -34,33 +65,12 @@ def _create_folder_of_size_with_multiple_files(
3465 directory_size : ByteSize ,
3566 file_min_size : ByteSize ,
3667 file_max_size : ByteSize ,
68+ depth : NonNegativeInt | None = None ,
3769 ) -> Path :
3870 # Helper function to create random files and directories
3971 assert file_min_size > 0
4072 assert file_min_size <= file_max_size
4173
42- def create_random_content (base_dir : Path , remaining_size : ByteSize ) -> ByteSize :
43- if remaining_size <= 0 :
44- return remaining_size
45-
46- # Decide to create a file or a subdirectory
47- # Create a file
48- file_size = ByteSize (
49- faker .pyint (
50- min_value = min (file_min_size , remaining_size ),
51- max_value = min (remaining_size , file_max_size ),
52- )
53- ) # max file size 1MB
54- file_path = base_dir / f"{ faker .file_path (depth = 4 , absolute = False )} "
55- file_path .parent .mkdir (parents = True , exist_ok = True )
56- assert not file_path .exists ()
57- with file_path .open ("wb" ) as fp :
58- fp .write (f"I am a { file_size .human_readable ()} file" .encode ())
59- fp .truncate (file_size )
60- assert file_path .exists ()
61-
62- return ByteSize (remaining_size - file_size )
63-
6474 # Recursively create content in the temporary directory
6575 remaining_size = directory_size
6676 with log_context (
@@ -70,7 +80,14 @@ def create_random_content(base_dir: Path, remaining_size: ByteSize) -> ByteSize:
7080 ) as ctx :
7181 num_files_created = 0
7282 while remaining_size > 0 :
73- remaining_size = create_random_content (tmp_path , remaining_size )
83+ remaining_size = _create_random_content (
84+ faker ,
85+ base_dir = tmp_path ,
86+ file_min_size = file_min_size ,
87+ file_max_size = file_max_size ,
88+ remaining_size = remaining_size ,
89+ depth = depth ,
90+ )
7491 num_files_created += 1
7592 ctx .logger .info ("created %s files" , num_files_created )
7693 return tmp_path
0 commit comments