Skip to content

Commit 4e07fc4

Browse files
authored
Add tests for positioned reads (#212)
1 parent 5d823ba commit 4e07fc4

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

rust/src/file.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,7 @@ impl FileReader {
8888
let offset = self.position;
8989
self.position = usize::min(self.position + buf.len(), self.file_length());
9090
let read_bytes = self.position - offset;
91-
let buf = &mut buf[..read_bytes];
92-
self.read_range_buf(buf, offset).await?;
91+
self.read_range_buf(&mut buf[..read_bytes], offset).await?;
9392
Ok(read_bytes)
9493
}
9594
}
@@ -99,7 +98,7 @@ impl FileReader {
9998
///
10099
/// Panics if the requested range is outside of the file
101100
pub async fn read_range(&self, offset: usize, len: usize) -> Result<Bytes> {
102-
let mut stream = self.read_range_stream(offset, len).boxed();
101+
let mut stream = self.read_range_stream(offset, len);
103102
let mut buf = BytesMut::with_capacity(len);
104103
while let Some(bytes) = stream.next().await.transpose()? {
105104
buf.put(bytes);
@@ -111,7 +110,7 @@ impl FileReader {
111110
///
112111
/// Panics if the requested range is outside of the file
113112
pub async fn read_range_buf(&self, mut buf: &mut [u8], offset: usize) -> Result<()> {
114-
let mut stream = self.read_range_stream(offset, buf.len()).boxed();
113+
let mut stream = self.read_range_stream(offset, buf.len());
115114
while let Some(bytes) = stream.next().await.transpose()? {
116115
buf.put(bytes);
117116
}

rust/tests/test_read.rs

+22-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ mod common;
44
#[cfg(feature = "integration-test")]
55
mod test {
66
use crate::common::TEST_FILE_INTS;
7-
use bytes::Buf;
7+
use bytes::{Buf, BytesMut};
88
use hdfs_native::{
99
minidfs::{DfsFeatures, MiniDfs},
1010
Client, Result, WriteOptions,
@@ -60,7 +60,7 @@ mod test {
6060
file.close().await?;
6161

6262
// Read the whole file
63-
let reader = client.read("/testfile").await?;
63+
let mut reader = client.read("/testfile").await?;
6464
let mut buf = reader.read_range(0, TEST_FILE_INTS * 4).await?;
6565
for i in 0..TEST_FILE_INTS as i32 {
6666
assert_eq!(buf.get_i32(), i);
@@ -82,6 +82,26 @@ mod test {
8282
offset += 1024 * 1024;
8383
}
8484

85+
// Positioned reads
86+
let mut buf = reader.read(reader.file_length()).await?;
87+
for i in 0..TEST_FILE_INTS as i32 {
88+
assert_eq!(buf.get_i32(), i);
89+
}
90+
91+
reader.seek(0);
92+
93+
let mut buf = BytesMut::zeroed(reader.file_length());
94+
assert_eq!(reader.read_buf(&mut buf).await?, reader.file_length());
95+
for i in 0..TEST_FILE_INTS as i32 {
96+
assert_eq!(buf.get_i32(), i);
97+
}
98+
99+
// Trying to read again should return nothing
100+
assert!(reader.read(1).await?.is_empty());
101+
102+
// Same with reading into a provided buffer
103+
assert_eq!(reader.read_buf(&mut [0u8]).await?, 0);
104+
85105
Ok(())
86106
}
87107
}

0 commit comments

Comments
 (0)