#[allow(dead_code)]
mod common;
use common::*;
use hyperfile::file::hyper::Hyper;
use hyperfile::file::flags::FileFlags;
use hyperfile::file::mode::FileMode;
use hyperfile::config::HyperFileRuntimeConfig;
use hyperfile::staging::{config::StagingConfig, s3::S3Staging};
use hyperfile::segment::SegmentReadWrite;
async fn write_one_segment_then_open(payload_len: usize) {
let client = make_client().await;
let tf = TestFile::new(&client).await;
{
let mut hyper = Hyper::fs_open_or_create_with_default_opt(
&client, tf.uri(), FileFlags::rdwr(), FileMode::default_file(),
).await.expect("create");
let n = hyper.fs_write(0, &vec![0xAAu8; payload_len]).await.expect("write");
assert_eq!(n, payload_len);
let _ = hyper.fs_flush().await.expect("flush");
let _ = hyper.fs_release().await.expect("release");
}
let staging = S3Staging::from(
&client,
StagingConfig::new_s3_uri(tf.uri(), None),
HyperFileRuntimeConfig::default(),
).await.expect("staging");
let ss = staging.open(1).await
.unwrap_or_else(|e| panic!("open segid 1 for a {payload_len}-byte payload: {e}"));
let block_size = 4096;
let expect_blocks = (payload_len / block_size) as u32;
assert_eq!(ss.hdr.s_ndatablk, expect_blocks,
"summary should list {expect_blocks} data blocks");
assert!(ss.hdr.s_bytes as usize >= std::mem::size_of_val(&ss.hdr),
"s_bytes ({}) must cover at least the header", ss.hdr.s_bytes);
assert_eq!(ss.hdr.s_cno, 1, "segment should report its own segid");
tf.cleanup(&client).await;
}
#[tokio::test]
#[ignore]
async fn segment_open_smaller_than_fetch_size() {
let _ = env_logger::try_init();
write_one_segment_then_open(4096).await; write_one_segment_then_open(8192).await; }
#[tokio::test]
#[ignore]
async fn segment_open_at_and_above_fetch_size() {
let _ = env_logger::try_init();
write_one_segment_then_open(512 * 1024).await; write_one_segment_then_open(1024 * 1024).await; write_one_segment_then_open(16 * 1024 * 1024).await; }