Skip to content

Commit c786a04

Browse files
committed
Flatten the state we keep per active blob
1 parent ae95f28 commit c786a04

File tree

5 files changed

+219
-310
lines changed

5 files changed

+219
-310
lines changed

src/api/remote.rs

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)