@@ -120,16 +120,21 @@ impl ExpectedFilesAfterDownload {
120
120
/// *Note: removed directories names are suffixed with a "/"*
121
121
pub async fn remove_unexpected_files ( self ) -> StdResult < Option < Vec < String > > > {
122
122
tokio:: task:: spawn_blocking ( move || {
123
- let unexpected_entries_in_immutable_dir: Vec < _ > =
124
- std:: fs:: read_dir ( self . target_cardano_db_dir . join ( IMMUTABLE_DIR ) )
123
+ let immutable_files_dir = self . target_cardano_db_dir . join ( IMMUTABLE_DIR ) ;
124
+ let unexpected_entries_in_immutable_dir = if immutable_files_dir. exists ( ) {
125
+ std:: fs:: read_dir ( & immutable_files_dir)
125
126
. with_context ( || BASE_ERROR ) ?
126
127
. flatten ( )
127
128
. filter ( |entry| {
128
129
!self
129
130
. expected_filenames_in_immutable_dir
130
131
. contains ( & entry. file_name ( ) )
131
132
} )
132
- . collect ( ) ;
133
+ . collect ( )
134
+ } else {
135
+ // The immutable dir can be missing if the download was interrupted
136
+ Vec :: new ( )
137
+ } ;
133
138
let mut removed_entries = Vec :: new ( ) ;
134
139
135
140
for unexpected_entry in & unexpected_entries_in_immutable_dir {
@@ -371,6 +376,21 @@ mod tests {
371
376
372
377
use super :: * ;
373
378
379
+ #[ tokio:: test]
380
+ async fn when_immutable_dir_does_not_exist_do_nothing_and_return_none ( ) {
381
+ let temp_dir = temp_dir_create ! ( ) ;
382
+
383
+ let existing_before = ExpectedFilesAfterDownload {
384
+ target_cardano_db_dir : temp_dir. clone ( ) ,
385
+ expected_filenames_in_immutable_dir : HashSet :: new ( ) ,
386
+ logger : TestLogger :: stdout ( ) ,
387
+ } ;
388
+
389
+ let removed_entries = existing_before. remove_unexpected_files ( ) . await . unwrap ( ) ;
390
+ assert_eq ! ( removed_entries, None ) ;
391
+ assert_dir_eq ! ( & temp_dir, "" ) ;
392
+ }
393
+
374
394
#[ tokio:: test]
375
395
async fn when_dir_empty_do_nothing_and_return_none ( ) {
376
396
let temp_dir = temp_dir_create ! ( ) ;
0 commit comments