#![allow(dead_code)]
use ese_core::{CatalogEntry, DB_STATE_CLEAN_SHUTDOWN};
use ese_test_fixtures::{make_raw_header_page, EseFileBuilder, PageBuilder, PAGE_SIZE};
use std::io::Write as _;
use tempfile::NamedTempFile;
pub fn make_ese_header_page() -> Vec<u8> {
make_raw_header_page(0, DB_STATE_CLEAN_SHUTDOWN)
}
pub fn make_leaf_page_with_records(flags_extra: u32, records: &[Vec<u8>]) -> Vec<u8> {
debug_assert_eq!(
flags_extra, 0,
"non-zero flags_extra not supported via PageBuilder"
);
let mut builder = PageBuilder::new(PAGE_SIZE).leaf();
for rec in records {
builder = builder.add_record(rec);
}
builder.build()
}
#[allow(dead_code)]
pub fn make_parent_page_with_children(ese_children: &[u32]) -> Vec<u8> {
let mut builder = PageBuilder::new(PAGE_SIZE).parent();
for &ese_page in ese_children {
builder = builder.add_child_page(ese_page);
}
builder.build()
}
#[allow(dead_code)]
pub fn make_parent_page_with_prefixed_children(key_prefix: &[u8], ese_children: &[u32]) -> Vec<u8> {
let mut builder = PageBuilder::new(PAGE_SIZE).parent();
for &ese_page in ese_children {
let mut rec = key_prefix.to_vec();
rec.extend_from_slice(&ese_page.to_le_bytes());
builder = builder.add_record(&rec);
}
builder.build()
}
pub fn write_ese_file(pages: &[Vec<u8>]) -> NamedTempFile {
let mut tmp = NamedTempFile::new().expect("tempfile");
for page in pages {
tmp.write_all(page).expect("write page");
}
tmp
}
#[allow(dead_code)]
pub fn make_ese_with_catalog(entries: &[CatalogEntry]) -> NamedTempFile {
let mut catalog_builder = PageBuilder::new(PAGE_SIZE).leaf();
for entry in entries {
catalog_builder = catalog_builder.add_record(&entry.to_bytes());
}
let catalog_page = catalog_builder.build();
let padding = vec![0u8; PAGE_SIZE];
EseFileBuilder::new()
.add_page(padding.clone()) .add_page(padding.clone()) .add_page(padding.clone()) .add_page(padding) .add_page(catalog_page) .write()
}