@@ -158,18 +158,18 @@ fn bitwise_recovery(buf1: &[u8], buf2: &[u8], buf3: &[u8]) -> Result<Zeroizing<V
158158 Ok ( recovered_contents)
159159}
160160
161- pub fn load (
161+ pub async fn load (
162162 hal : & mut impl crate :: hal:: Hal ,
163163 dir : & str ,
164164) -> Result < ( Zeroizing < BackupData > , pb_backup:: BackupMetaData ) , ( ) > {
165- let files = hal. sd ( ) . list_subdir ( Some ( dir) ) ?;
165+ let files = hal. sd ( ) . list_subdir ( Some ( dir) ) . await ?;
166166 if files. len ( ) != 3 {
167167 return Err ( ( ) ) ;
168168 }
169169 let file_contents: [ Zeroizing < Vec < u8 > > ; 3 ] = [
170- hal. sd ( ) . load_bin ( & files[ 0 ] , dir) ?,
171- hal. sd ( ) . load_bin ( & files[ 1 ] , dir) ?,
172- hal. sd ( ) . load_bin ( & files[ 2 ] , dir) ?,
170+ hal. sd ( ) . load_bin ( & files[ 0 ] , dir) . await ?,
171+ hal. sd ( ) . load_bin ( & files[ 1 ] , dir) . await ?,
172+ hal. sd ( ) . load_bin ( & files[ 2 ] , dir) . await ?,
173173 ] ;
174174 for contents in file_contents. iter ( ) {
175175 if let o @ Ok ( _) = load_from_buffer ( contents) {
@@ -186,7 +186,7 @@ pub fn load(
186186 ) ?)
187187}
188188
189- pub fn create (
189+ pub async fn create (
190190 hal : & mut impl crate :: hal:: Hal ,
191191 seed : & [ u8 ] ,
192192 name : & str ,
@@ -232,7 +232,11 @@ pub fn create(
232232 } ;
233233 let backup_encoded = backup. encode_to_vec ( ) ;
234234 let dir = id ( seed) ;
235- let files = hal. sd ( ) . list_subdir ( Some ( & dir) ) . or ( Err ( Error :: SdList ) ) ?;
235+ let files = hal
236+ . sd ( )
237+ . list_subdir ( Some ( & dir) )
238+ . await
239+ . or ( Err ( Error :: SdList ) ) ?;
236240
237241 let filename_datetime = {
238242 let tm = bitbox02:: get_datetime ( backup_create_timestamp) . map_err ( |_| Error :: Generic ) ?;
@@ -255,10 +259,12 @@ pub fn create(
255259 }
256260 hal. sd ( )
257261 . write_bin ( & filename, & dir, & backup_encoded)
262+ . await
258263 . or ( Err ( Error :: SdWrite ) ) ?;
259264 if hal
260265 . sd ( )
261266 . load_bin ( & filename, & dir)
267+ . await
262268 . or ( Err ( Error :: SdRead ) ) ?
263269 . as_slice ( )
264270 != backup_encoded. as_slice ( )
@@ -268,7 +274,7 @@ pub fn create(
268274 }
269275 let mut stale = false ;
270276 for file in files {
271- if hal. sd ( ) . erase_file_in_subdir ( & file, & dir) . is_err ( ) {
277+ if hal. sd ( ) . erase_file_in_subdir ( & file, & dir) . await . is_err ( ) {
272278 stale = true
273279 }
274280 }
@@ -285,6 +291,8 @@ mod tests {
285291 use crate :: hal:: testing:: TestingHal ;
286292 use core:: convert:: TryInto ;
287293
294+ use crate :: bb02_async:: block_on;
295+
288296 #[ test]
289297 fn test_id ( ) {
290298 // Seeds of different lengths (16, 24, 32 bytes)
@@ -307,11 +315,21 @@ mod tests {
307315 let mut mock_hal = TestingHal :: new ( ) ;
308316 let timestamp = 1601281809 ;
309317 let birthdate = timestamp - 32400 ;
310- assert ! ( create( & mut mock_hal, seed, "test name" , timestamp, birthdate) . is_ok( ) ) ;
318+ assert ! ( block_on( create(
319+ & mut mock_hal,
320+ seed,
321+ "test name" ,
322+ timestamp,
323+ birthdate
324+ ) )
325+ . is_ok( ) ) ;
311326 let dir = id ( seed) ;
312- assert_eq ! ( mock_hal. sd. list_subdir( None ) , Ok ( vec![ dir. clone( ) ] ) ) ;
313327 assert_eq ! (
314- mock_hal. sd. list_subdir( Some ( & dir) ) ,
328+ block_on( mock_hal. sd. list_subdir( None ) ) ,
329+ Ok ( vec![ dir. clone( ) ] )
330+ ) ;
331+ assert_eq ! (
332+ block_on( mock_hal. sd. list_subdir( Some ( & dir) ) ) ,
315333 Ok ( vec![
316334 "backup_Mon_2020-09-28T08-30-09Z_0.bin" . into( ) ,
317335 "backup_Mon_2020-09-28T08-30-09Z_1.bin" . into( ) ,
@@ -320,42 +338,55 @@ mod tests {
320338 ) ;
321339
322340 // Recreating using same timestamp is not allowed and doesn't change the backups.
323- assert ! ( create( & mut mock_hal, seed, "new name" , timestamp, birthdate) . is_err( ) ) ;
341+ assert ! ( block_on( create(
342+ & mut mock_hal,
343+ seed,
344+ "new name" ,
345+ timestamp,
346+ birthdate
347+ ) )
348+ . is_err( ) ) ;
324349 assert_eq ! (
325- mock_hal. sd. list_subdir( Some ( & dir) ) ,
350+ block_on ( mock_hal. sd. list_subdir( Some ( & dir) ) ) ,
326351 Ok ( vec![
327352 "backup_Mon_2020-09-28T08-30-09Z_0.bin" . into( ) ,
328353 "backup_Mon_2020-09-28T08-30-09Z_1.bin" . into( ) ,
329354 "backup_Mon_2020-09-28T08-30-09Z_2.bin" . into( )
330355 ] )
331356 ) ;
332357
333- let contents: [ zeroize:: Zeroizing < Vec < u8 > > ; 3 ] = mock_hal
334- . sd
335- . list_subdir ( Some ( & dir) )
336- . unwrap ( )
337- . iter ( )
338- . map ( |file| mock_hal. sd . load_bin ( file, & dir) . unwrap ( ) )
339- . collect :: < Vec < _ > > ( )
340- . try_into ( )
341- . unwrap ( ) ;
358+ let contents: [ zeroize:: Zeroizing < Vec < u8 > > ; 3 ] =
359+ block_on ( mock_hal. sd . list_subdir ( Some ( & dir) ) )
360+ . unwrap ( )
361+ . iter ( )
362+ . map ( |file| block_on ( mock_hal. sd . load_bin ( file, & dir) ) . unwrap ( ) )
363+ . collect :: < Vec < _ > > ( )
364+ . try_into ( )
365+ . unwrap ( ) ;
342366 assert ! (
343367 contents[ 0 ] . as_slice( ) == contents[ 1 ] . as_slice( )
344368 && contents[ 0 ] . as_slice( ) == contents[ 2 ] . as_slice( )
345369 ) ;
346370
347371 // Recreating the backup removes the previous files.
348- assert ! ( create( & mut mock_hal, seed, "new name" , timestamp + 1 , birthdate) . is_ok( ) ) ;
372+ assert ! ( block_on( create(
373+ & mut mock_hal,
374+ seed,
375+ "new name" ,
376+ timestamp + 1 ,
377+ birthdate
378+ ) )
379+ . is_ok( ) ) ;
349380 assert_eq ! (
350- mock_hal. sd. list_subdir( Some ( & dir) ) ,
381+ block_on ( mock_hal. sd. list_subdir( Some ( & dir) ) ) ,
351382 Ok ( vec![
352383 "backup_Mon_2020-09-28T08-30-10Z_0.bin" . into( ) ,
353384 "backup_Mon_2020-09-28T08-30-10Z_1.bin" . into( ) ,
354385 "backup_Mon_2020-09-28T08-30-10Z_2.bin" . into( )
355386 ] )
356387 ) ;
357388
358- let ( backup_data, metadata) = load ( & mut mock_hal, & dir) . unwrap ( ) ;
389+ let ( backup_data, metadata) = block_on ( load ( & mut mock_hal, & dir) ) . unwrap ( ) ;
359390 assert_eq ! ( backup_data. get_seed( ) , seed) ;
360391 assert_eq ! ( backup_data. 0 . birthdate, birthdate) ;
361392 assert_eq ! ( metadata. name. as_str( ) , "new name" ) ;
0 commit comments