block-db 0.2.0

Local, multi-threaded, durable byte DB.
Documentation
// Authors: Robert Lopez

use crate::{
    ConfirmDestructiveAction,
    tests::{test_db::TestDB, util::random_bytes},
    util::fs::DirectoryIter,
};

#[tokio::test]
async fn delete_data_files() {
    let chunk_size = 100;
    let max_file_size = 1_000;

    let test_db = TestDB::open("delete_data_files", Some(chunk_size), Some(max_file_size))
        .await
        .unwrap();

    macro_rules! assert_data_file_count_is {
        ($n:expr) => {
            match DirectoryIter::new(&test_db.block_db.path.join("data_files")).await {
                Ok(mut data_files_dir_iter) => {
                    let mut count = 0;

                    while let Some(_) = data_files_dir_iter.next().await.unwrap() {
                        count += 1;
                    }

                    assert_eq!(count, $n, "Invalid DataFile count");
                }
                _ => {
                    assert_eq!(0, $n, "Invalid DataFileCount");
                }
            }
        };
    }

    let data_file_id = test_db
        .block_db
        .write(random_bytes(max_file_size))
        .await
        .unwrap()
        .data_file_id;

    test_db
        .block_db
        .write(random_bytes(max_file_size))
        .await
        .unwrap()
        .data_file_id;

    test_db
        .block_db
        .delete_data_file(data_file_id, ConfirmDestructiveAction::IKnowWhatImDoing)
        .await
        .unwrap();

    assert_data_file_count_is!(1);

    for _ in 0..10 {
        test_db
            .block_db
            .write(random_bytes(max_file_size))
            .await
            .unwrap()
            .data_file_id;
    }

    test_db
        .block_db
        .delete_data_files(ConfirmDestructiveAction::IKnowWhatImDoing)
        .await
        .unwrap();

    assert_data_file_count_is!(0);

    test_db.cleanup().await.unwrap();
}