solana_runtime/append_vec/
test_utils.rs

1//! Helpers for AppendVec tests and benches
2use {
3    super::StoredMeta,
4    rand::{distributions::Alphanumeric, Rng},
5    solana_sdk::{account::AccountSharedData, pubkey::Pubkey},
6    std::path::PathBuf,
7};
8
9pub struct TempFile {
10    pub path: PathBuf,
11}
12
13impl Drop for TempFile {
14    fn drop(&mut self) {
15        let path = std::mem::replace(&mut self.path, PathBuf::new());
16        let _ignored = std::fs::remove_file(path);
17    }
18}
19
20pub fn get_append_vec_dir() -> String {
21    std::env::var("FARF_DIR").unwrap_or_else(|_| "farf/append_vec_tests".to_string())
22}
23
24pub fn get_append_vec_path(path: &str) -> TempFile {
25    let out_dir = get_append_vec_dir();
26    let rand_string: String = rand::thread_rng()
27        .sample_iter(&Alphanumeric)
28        .take(30)
29        .collect();
30    let dir = format!("{}/{}", out_dir, rand_string);
31    let mut buf = PathBuf::new();
32    buf.push(&format!("{}/{}", dir, path));
33    std::fs::create_dir_all(dir).expect("Create directory failed");
34    TempFile { path: buf }
35}
36
37pub fn create_test_account(sample: usize) -> (StoredMeta, AccountSharedData) {
38    let data_len = sample % 256;
39    let mut account = AccountSharedData::new(sample as u64, 0, &Pubkey::default());
40    account.set_data((0..data_len).map(|_| data_len as u8).collect());
41    let stored_meta = StoredMeta {
42        write_version: 0,
43        pubkey: Pubkey::default(),
44        data_len: data_len as u64,
45    };
46    (stored_meta, account)
47}