From d0ea41e1901b308f7a222130d617324aa8ed82ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E6=AD=A3=E8=B6=85?= Date: Mon, 30 Mar 2026 20:40:26 +0800 Subject: [PATCH] test(ecstore): cover inline bitrot offset reads (#2337) --- crates/ecstore/src/bitrot.rs | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/crates/ecstore/src/bitrot.rs b/crates/ecstore/src/bitrot.rs index 2e1621662..6969edf73 100644 --- a/crates/ecstore/src/bitrot.rs +++ b/crates/ecstore/src/bitrot.rs @@ -226,6 +226,52 @@ mod tests { assert!(result.unwrap().is_some()); } + #[tokio::test] + async fn test_create_bitrot_reader_with_inline_offset_starts_at_requested_shard() { + let shard_size = 4; + let checksum_algo = HashAlgorithm::HighwayHash256S; + let payload = b"abcdefghijkl"; + + let mut writer = create_bitrot_writer( + true, + None, + "test-volume", + "test-path", + payload.len() as i64, + shard_size, + checksum_algo.clone(), + ) + .await + .expect("inline bitrot writer"); + + for chunk in payload.chunks(shard_size) { + writer.write(chunk).await.expect("write chunk"); + } + + let inline_data = writer.into_inline_data().expect("inline buffer"); + let mut reader = create_bitrot_reader( + Some(&inline_data), + None, + "test-bucket", + "test-path", + shard_size, + shard_size, + shard_size, + checksum_algo, + false, + false, + ) + .await + .expect("create reader") + .expect("reader"); + + let mut out = [0u8; 4]; + let n = reader.read(&mut out).await.expect("read second shard"); + + assert_eq!(n, shard_size); + assert_eq!(&out[..n], b"efgh"); + } + #[tokio::test] async fn test_create_bitrot_reader_without_data_or_disk() { let shard_size = 16;