in cas_client/src/remote_client.rs [1296:1345]
fn test_reconstruct_file(test_case: TestCase, endpoint: &str) -> Result<()> {
let threadpool = ThreadPool::new()?;
// test reconstruct and sequential write
let test = test_case.clone();
let client = RemoteClient::new(endpoint, &None, &None, None, "", false);
let provider = BufferProvider::default();
let buf = provider.buf.clone();
let writer = OutputProvider::Buffer(provider);
let resp = threadpool.external_run_async_task(async move {
client
.reconstruct_file_to_writer_segmented(&test.file_hash, Some(test.file_range), &writer, None)
.await
})?;
assert_eq!(test.expect_error, resp.is_err());
if !test.expect_error {
assert_eq!(test.expected_data.len() as u64, resp.unwrap());
assert_eq!(test.expected_data, buf.value());
}
// test reconstruct and parallel write
let test = test_case;
let client = RemoteClient::new(endpoint, &None, &None, None, "", false);
let provider = BufferProvider::default();
let buf = provider.buf.clone();
let writer = OutputProvider::Buffer(provider);
let resp = threadpool.external_run_async_task(async move {
client
.reconstruct_file_to_writer_segmented_parallel_write(
&test.file_hash,
Some(test.file_range),
&writer,
None,
)
.await
})?;
assert_eq!(test.expect_error, resp.is_err());
if !test.expect_error {
assert_eq!(test.expected_data.len() as u64, resp.unwrap());
let value = buf.value();
assert_eq!(&test.expected_data[..100], &value[..100]);
let idx = test.expected_data.len() - 100;
assert_eq!(&test.expected_data[idx..], &value[idx..]);
assert_eq!(test.expected_data, value);
}
Ok(())
}