From 326c345811aa4a253c374d57a1e20e5f4a3dc668 Mon Sep 17 00:00:00 2001 From: Tglman Date: Sat, 22 Jan 2022 13:55:58 +0000 Subject: [PATCH] test:add replace test and refactor for reduce specific test boilerplate --- src/database/abstraction/tests.rs | 65 ++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/src/database/abstraction/tests.rs b/src/database/abstraction/tests.rs index 313a55f3..b460db75 100644 --- a/src/database/abstraction/tests.rs +++ b/src/database/abstraction/tests.rs @@ -1,4 +1,6 @@ -use crate::database::{abstraction::Tree, Config}; +use crate::database::{abstraction::{DatabaseEngine, Tree}, Config}; +use std::sync::Arc; +use tempfile::{Builder, TempDir}; fn insert_get(tree: &dyn Tree) { let key = "key".as_bytes(); @@ -8,6 +10,19 @@ fn insert_get(tree: &dyn Tree) { assert_eq!(read, Some(value.to_owned())); } +fn insert_get_replace(tree: &dyn Tree) { + let key = "key".as_bytes(); + let value = "value".as_bytes(); + tree.insert(key, value).unwrap(); + let read = tree.get(key).unwrap(); + assert_eq!(read, Some(value.to_owned())); + + let value1 = "value1".as_bytes(); + tree.insert(key, value1).unwrap(); + let read = tree.get(key).unwrap(); + assert_eq!(read, Some(value1.to_owned())); +} + fn insert_get_remove(tree: &dyn Tree) { let key = "key".as_bytes(); let value = "value".as_bytes(); @@ -153,69 +168,75 @@ database_path = "{}" .unwrap() } +/// Make sure to keep the reference of the tree returned values for +/// the length of the test, to avoid early cleanups that may create test issues +fn open_tree(test_name: &str) -> (Arc, impl DatabaseEngine, TempDir) + where Arc: DatabaseEngine +{ + let db_folder = Builder::new().prefix(test_name).tempdir().unwrap(); + let config = empty_config(db_folder.path().to_str().unwrap()); + let instance = Arc::::open(&config).unwrap(); + let tree = instance.open_tree("test").unwrap(); + (tree, instance, db_folder) +} + #[cfg(feature = "sqlite")] mod sqlite { use super::*; - use crate::database::abstraction::{DatabaseEngine, Tree}; - use std::sync::Arc; - use tempfile::{Builder, TempDir}; - - /// Make sure to keep the reference of the tree returned values for - /// the length of the test, to avoid early cleanups that may create test issues - fn open_tree(test_name: &str) -> (Arc, impl DatabaseEngine, TempDir) { - let db_folder = Builder::new().prefix(test_name).tempdir().unwrap(); - let config = empty_config(db_folder.path().to_str().unwrap()); - let instance = Arc::::open(&config).unwrap(); - let tree = instance.open_tree("test").unwrap(); - (tree, instance, db_folder) - } + use crate::database::abstraction::sqlite::Engine; #[test] fn sqlite_insert_get() { - let (tree, _inst, _temp_dir) = open_tree("insert_get"); + let (tree, _inst, _temp_dir) = open_tree::("sqlite_insert_get"); insert_get(&*tree) } + + #[test] + fn sqlite_insert_replace_get() { + let (tree, _inst, _temp_dir) = open_tree::("sqlite_insert_get_replace"); + insert_get_replace(&*tree) + } #[test] fn sqlite_insert_get_remove() { - let (tree, _inst, _temp_dir) = open_tree("insert_get_remove"); + let (tree, _inst, _temp_dir) = open_tree::("sqlite_insert_get_remove"); insert_get_remove(&*tree) } #[test] fn sqlite_batch_insert_get() { - let (tree, _inst, _temp_dir) = open_tree("batch_insert_get"); + let (tree, _inst, _temp_dir) = open_tree::("sqlite_batch_insert_get"); batch_insert_get(&*tree) } #[test] fn sqlite_insert_iter() { - let (tree, _inst, _temp_dir) = open_tree("insert_iter"); + let (tree, _inst, _temp_dir) = open_tree::("sqlite_insert_iter"); insert_iter(&*tree) } #[test] fn sqlite_insert_iter_from() { - let (tree, _inst, _temp_dir) = open_tree("insert_iter_from"); + let (tree, _inst, _temp_dir) = open_tree::("sqlite_insert_iter_from"); insert_iter_from(&*tree) } #[test] fn sqlite_insert_iter_prefix() { - let (tree, _inst, _temp_dir) = open_tree("insert_iter_prefix"); + let (tree, _inst, _temp_dir) = open_tree::("sqlite_insert_iter_prefix"); insert_iter_prefix(&*tree) } #[test] fn sqlite_insert_clear() { - let (tree, _inst, _temp_dir) = open_tree("insert_iter_prefix"); + let (tree, _inst, _temp_dir) = open_tree::("sqlite_insert_iter_prefix"); insert_clear(&*tree) } #[test] fn sqlite_increment() { - let (tree, _inst, _temp_dir) = open_tree("increment"); + let (tree, _inst, _temp_dir) = open_tree::("sqlite_increment"); increment(&*tree) }