velarixdb 0.0.17

An LSM Storage Engine focused on reduced IO amplification
Documentation
#[cfg(test)]
mod tests {
    use crate::consts::{SIZE_OF_U32, SUMMARY_FILE_NAME};
    use crate::sst::Summary;
    use crate::tests::workload::SSTContructor;
    use tempfile::tempdir;

    #[tokio::test]
    async fn test_summary_new() {
        let root = tempdir().unwrap();
        let path = root.path().join("summary_new");

        let summary = Summary::new(path.to_owned());

        assert_eq!(summary.smallest_key, vec![]);
        assert_eq!(summary.biggest_key, vec![]);
        assert_eq!(summary.path, path.join(format!("{}.db", SUMMARY_FILE_NAME)));
    }

    #[tokio::test]
    async fn test_summary_recover() {
        let sst = SSTContructor::generate_ssts(1).await[0].to_owned();

        let mut recovered_summary = Summary::new(sst.dir);
        let res = recovered_summary.recover().await;
        assert!(res.is_ok());
        assert!(!recovered_summary.biggest_key.is_empty());
        assert!(!recovered_summary.smallest_key.is_empty());
    }

    #[tokio::test]
    async fn test_summary_write() {
        let sst = SSTContructor::generate_ssts(1).await[0].to_owned();

        let mut recovered_summary = Summary::new(sst.dir.to_owned());
        let res = recovered_summary.recover().await;
        assert!(res.is_ok());
        assert!(recovered_summary.write_to_file().await.is_ok())
    }

    #[tokio::test]
    async fn test_summary_serialize() {
        let root = tempdir().unwrap();
        let path = root.path().join("summary_write");

        let mut summary = Summary::new(path);
        summary.biggest_key = vec![1, 2, 3];
        summary.smallest_key = vec![0, 2, 3];

        let expected_entry_len =
            SIZE_OF_U32 + SIZE_OF_U32 + summary.biggest_key.len() + summary.smallest_key.len();
        let serialized_entry = summary.serialize();

        assert_eq!(serialized_entry.len(), expected_entry_len);
    }
}