@@ -1064,8 +1064,15 @@ mod tests {
10641064 use testresult:: TestResult ;
10651065
10661066 use crate :: {
1067+ api:: blobs:: Blobs ,
10671068 protocol:: { ChunkRangesSeq , GetRequest } ,
1068- store:: fs:: { tests:: INTERESTING_SIZES , FsStore } ,
1069+ store:: {
1070+ fs:: {
1071+ tests:: { create_n0_bao, test_data, INTERESTING_SIZES } ,
1072+ FsStore ,
1073+ } ,
1074+ mem:: MemStore ,
1075+ } ,
10691076 tests:: { add_test_hash_seq, add_test_hash_seq_incomplete} ,
10701077 util:: ChunkRangesExt ,
10711078 } ;
@@ -1117,6 +1124,38 @@ mod tests {
11171124 Ok ( ( ) )
11181125 }
11191126
1127+ async fn test_observe_partial ( blobs : & Blobs ) -> TestResult < ( ) > {
1128+ let sizes = INTERESTING_SIZES ;
1129+ for size in sizes {
1130+ let data = test_data ( size) ;
1131+ let ranges = ChunkRanges :: chunk ( 0 ) ;
1132+ let ( hash, bao) = create_n0_bao ( & data, & ranges) ?;
1133+ blobs. import_bao_bytes ( hash, ranges. clone ( ) , bao) . await ?;
1134+ let bitfield = blobs. observe ( hash) . await ?;
1135+ if size > 1024 {
1136+ assert_eq ! ( bitfield. ranges, ranges) ;
1137+ } else {
1138+ assert_eq ! ( bitfield. ranges, ChunkRanges :: all( ) ) ;
1139+ }
1140+ }
1141+ Ok ( ( ) )
1142+ }
1143+
1144+ #[ tokio:: test]
1145+ async fn test_observe_partial_mem ( ) -> TestResult < ( ) > {
1146+ let store = MemStore :: new ( ) ;
1147+ test_observe_partial ( store. blobs ( ) ) . await ?;
1148+ Ok ( ( ) )
1149+ }
1150+
1151+ #[ tokio:: test]
1152+ async fn test_observe_partial_fs ( ) -> TestResult < ( ) > {
1153+ let td = tempfile:: tempdir ( ) ?;
1154+ let store = FsStore :: load ( td. path ( ) ) . await ?;
1155+ test_observe_partial ( store. blobs ( ) ) . await ?;
1156+ Ok ( ( ) )
1157+ }
1158+
11201159 #[ tokio:: test]
11211160 async fn test_local_info_hash_seq ( ) -> TestResult < ( ) > {
11221161 let sizes = INTERESTING_SIZES ;
0 commit comments