@@ -26,7 +26,7 @@ mod tests {
26
26
use rand:: RngCore ;
27
27
use testdir:: testdir;
28
28
use tokio:: fs;
29
- use tokio:: io:: { self , AsyncReadExt } ;
29
+ use tokio:: io:: { self , AsyncReadExt , AsyncWriteExt } ;
30
30
31
31
use crate :: protocol:: AuthToken ;
32
32
use crate :: provider:: { create_collection, Event , Provider } ;
@@ -329,4 +329,53 @@ mod tests {
329
329
// Unwrap the JoinHandle, then the result of the Provider
330
330
supervisor. await . unwrap ( ) . unwrap ( ) ;
331
331
}
332
+
333
+ #[ tokio:: test]
334
+ async fn test_blob_reader_partial ( ) -> Result < ( ) > {
335
+ // Prepare a Provider transferring a file.
336
+ let dir = testdir ! ( ) ;
337
+ let src0 = dir. join ( "src0" ) ;
338
+ let src1 = dir. join ( "src1" ) ;
339
+ {
340
+ let content = vec ! [ 1u8 ; 1000 ] ;
341
+ let mut f = tokio:: fs:: File :: create ( & src0) . await ?;
342
+ for _ in 0 ..10 {
343
+ f. write_all ( & content) . await ?;
344
+ }
345
+ }
346
+ fs:: write ( & src1, "hello world" ) . await ?;
347
+ let ( db, hash) = create_collection ( vec ! [ src0. into( ) , src1. into( ) ] ) . await ?;
348
+ let provider = Provider :: builder ( db)
349
+ . bind_addr ( "127.0.0.1:0" . parse ( ) . unwrap ( ) )
350
+ . spawn ( ) ?;
351
+ let auth_token = provider. auth_token ( ) ;
352
+ let provider_addr = provider. listen_addr ( ) ;
353
+
354
+ let timeout = tokio:: time:: timeout (
355
+ std:: time:: Duration :: from_secs ( 10 ) ,
356
+ get:: run (
357
+ hash,
358
+ auth_token,
359
+ get:: Options {
360
+ addr : provider_addr,
361
+ peer_id : None ,
362
+ } ,
363
+ || async move { Ok ( ( ) ) } ,
364
+ |_collection| async move { Ok ( ( ) ) } ,
365
+ |_hash, stream, _name| async move {
366
+ // evil: do nothing with the stream!
367
+ Ok ( stream)
368
+ } ,
369
+ ) ,
370
+ )
371
+ . await ;
372
+ provider. shutdown ( ) ;
373
+
374
+ let err = timeout. expect (
375
+ "`get` function is hanging, make sure we are handling misbehaving `on_blob` functions" ,
376
+ ) ;
377
+
378
+ err. expect_err ( "expected an error when passing in a misbehaving `on_blob` function" ) ;
379
+ Ok ( ( ) )
380
+ }
332
381
}
0 commit comments