Skip to content

Commit af35f08

Browse files
committed
coverage for gcs and s3
1 parent 8d40bb4 commit af35f08

2 files changed

Lines changed: 84 additions & 0 deletions

File tree

objectstore-service/src/backend/gcs.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1785,4 +1785,46 @@ mod tests {
17851785

17861786
Ok(())
17871787
}
1788+
1789+
#[tokio::test]
1790+
async fn test_range_request() -> Result<()> {
1791+
let backend = create_test_backend().await?;
1792+
1793+
let id = make_id();
1794+
let metadata = Metadata::default();
1795+
backend
1796+
.put_object(&id, &metadata, stream::single("hello, world"))
1797+
.await?;
1798+
1799+
let range = ByteRange::Bounded(0, 4);
1800+
let (_, content_range, body) = backend.get_object(&id, Some(range)).await?.unwrap();
1801+
let payload = stream::read_to_vec(body).await?;
1802+
1803+
assert_eq!(payload, b"hello");
1804+
assert_eq!(content_range.start, 0);
1805+
assert_eq!(content_range.end, 4);
1806+
assert_eq!(content_range.total, 12);
1807+
1808+
Ok(())
1809+
}
1810+
1811+
#[tokio::test]
1812+
async fn test_range_unsatisfiable() -> Result<()> {
1813+
let backend = create_test_backend().await?;
1814+
1815+
let id = make_id();
1816+
let metadata = Metadata::default();
1817+
backend
1818+
.put_object(&id, &metadata, stream::single("hello"))
1819+
.await?;
1820+
1821+
let range = ByteRange::Bounded(100, 200);
1822+
let result = backend.get_object(&id, Some(range)).await;
1823+
assert!(
1824+
matches!(result, Err(Error::RangeNotSatisfiable { total }) if total == 5),
1825+
"expected RangeNotSatisfiable with total=5"
1826+
);
1827+
1828+
Ok(())
1829+
}
17881830
}

objectstore-service/src/backend/s3_compatible.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)