@@ -1064,8 +1064,15 @@ mod tests {
1064
1064
use testresult:: TestResult ;
1065
1065
1066
1066
use crate :: {
1067
+ api:: blobs:: Blobs ,
1067
1068
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
+ } ,
1069
1076
tests:: { add_test_hash_seq, add_test_hash_seq_incomplete} ,
1070
1077
util:: ChunkRangesExt ,
1071
1078
} ;
@@ -1117,6 +1124,38 @@ mod tests {
1117
1124
Ok ( ( ) )
1118
1125
}
1119
1126
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
+
1120
1159
#[ tokio:: test]
1121
1160
async fn test_local_info_hash_seq ( ) -> TestResult < ( ) > {
1122
1161
let sizes = INTERESTING_SIZES ;
0 commit comments