@@ -416,4 +416,46 @@ mod tests {
416416 assert ! ( result. is_none( ) ) ;
417417 Ok ( ( ) )
418418 }
419+
420+ #[ tokio:: test]
421+ async fn test_range_request ( ) -> Result < ( ) > {
422+ let backend = create_test_backend ( ) ;
423+
424+ let id = make_id ( ) ;
425+ let metadata = Metadata :: default ( ) ;
426+ backend
427+ . put_object ( & id, & metadata, stream:: single ( "hello, world" ) )
428+ . await ?;
429+
430+ let range = ByteRange :: Bounded ( 0 , 4 ) ;
431+ let ( _, content_range, body) = backend. get_object ( & id, Some ( range) ) . await ?. unwrap ( ) ;
432+ let payload = stream:: read_to_vec ( body) . await ?;
433+
434+ assert_eq ! ( payload, b"hello" ) ;
435+ assert_eq ! ( content_range. start, 0 ) ;
436+ assert_eq ! ( content_range. end, 4 ) ;
437+ assert_eq ! ( content_range. total, 12 ) ;
438+
439+ Ok ( ( ) )
440+ }
441+
442+ #[ tokio:: test]
443+ async fn test_range_unsatisfiable ( ) -> Result < ( ) > {
444+ let backend = create_test_backend ( ) ;
445+
446+ let id = make_id ( ) ;
447+ let metadata = Metadata :: default ( ) ;
448+ backend
449+ . put_object ( & id, & metadata, stream:: single ( "hello" ) )
450+ . await ?;
451+
452+ let range = ByteRange :: Bounded ( 100 , 200 ) ;
453+ let result = backend. get_object ( & id, Some ( range) ) . await ;
454+ assert ! (
455+ matches!( result, Err ( Error :: RangeNotSatisfiable { total } ) if total == 5 ) ,
456+ "expected RangeNotSatisfiable with total=5"
457+ ) ;
458+
459+ Ok ( ( ) )
460+ }
419461}
0 commit comments