changeset 231:6d4bfbfcf023

version: Share make_version() test function.
author Lewin Bormann <lbo@spheniscida.de>
date Sun, 10 Sep 2017 14:06:15 +0200
parents 188a52d70d4e
children e036f49847d0
files src/version.rs
diffstat 1 files changed, 51 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/src/version.rs	Sun Sep 10 14:05:44 2017 +0200
+++ b/src/version.rs	Sun Sep 10 14:06:15 2017 +0200
@@ -417,29 +417,24 @@
 }
 
 #[cfg(test)]
-mod tests {
+pub mod testutil {
     use super::*;
-
-    use std::default::Default;
-    use std::path::Path;
-
     use cmp::DefaultCmp;
     use env::Env;
-    use error::Result;
     use mem_env::MemEnv;
-    use merging_iter::MergingIter;
     use options::Options;
     use table_builder::TableBuilder;
-    use table_cache::{table_name, TableCache};
-    use test_util::{test_iterator_properties, LdbIteratorIter};
-    use types::share;
+    use table_cache::table_name;
+    use types::{share, FileMetaData, FileNum};
+
+    use std::path::Path;
 
-    fn new_file(num: u64,
-                smallest: &[u8],
-                smallestix: u64,
-                largest: &[u8],
-                largestix: u64)
-                -> FileMetaHandle {
+    pub fn new_file(num: u64,
+                    smallest: &[u8],
+                    smallestix: u64,
+                    largest: &[u8],
+                    largestix: u64)
+                    -> FileMetaHandle {
         share(FileMetaData {
             allowed_seeks: 10,
             size: 163840,
@@ -451,11 +446,11 @@
 
     /// write_table creates a table with the given number and contents (must be sorted!) in the
     /// memenv. The sequence numbers given to keys start with startseq.
-    fn write_table(me: &MemEnv,
-                   contents: &[(&[u8], &[u8])],
-                   startseq: u64,
-                   num: u64)
-                   -> FileMetaHandle {
+    pub fn write_table(me: &MemEnv,
+                       contents: &[(&[u8], &[u8])],
+                       startseq: u64,
+                       num: FileNum)
+                       -> FileMetaHandle {
         let dst = me.open_writable_file(Path::new(&table_name("db", num, "ldb"))).unwrap();
         let mut seq = startseq;
         let keys: Vec<Vec<u8>> = contents.iter()
@@ -480,11 +475,13 @@
         f
     }
 
-    fn make_version() -> Version {
-        time_test!("make_version");
+    pub fn make_version() -> (Version, Options) {
         let mut opts = Options::default();
         let env = MemEnv::new();
 
+        // The different levels overlap in a sophisticated manner to be able to test compactions
+        // and so on.
+
         // Level 0 (overlapping)
         let f1: &[(&[u8], &[u8])] = &[("aaa".as_bytes(), "val1".as_bytes()),
                                       ("aab".as_bytes(), "val2".as_bytes()),
@@ -505,10 +502,10 @@
         let t4 = write_table(&env, f4, 10, 4);
         let f5: &[(&[u8], &[u8])] = &[("eaa".as_bytes(), "val1".as_bytes()),
                                       ("eab".as_bytes(), "val2".as_bytes()),
-                                      ("eba".as_bytes(), "val3".as_bytes())];
+                                      ("fab".as_bytes(), "val3".as_bytes())];
         let t5 = write_table(&env, f5, 13, 5);
         // Level 2
-        let f6: &[(&[u8], &[u8])] = &[("faa".as_bytes(), "val1".as_bytes()),
+        let f6: &[(&[u8], &[u8])] = &[("cab".as_bytes(), "val1".as_bytes()),
                                       ("fab".as_bytes(), "val2".as_bytes()),
                                       ("fba".as_bytes(), "val3".as_bytes())];
         let t6 = write_table(&env, f6, 16, 6);
@@ -526,18 +523,38 @@
 
 
         opts.set_env(Box::new(env));
-        let cache = TableCache::new("db", opts, 100);
+        let cache = TableCache::new("db", opts.clone(), 100);
         let mut v = Version::new(share(cache), Rc::new(Box::new(DefaultCmp)));
         v.files[0] = vec![t1, t2];
         v.files[1] = vec![t3, t4, t5];
         v.files[2] = vec![t6, t7];
         v.files[3] = vec![t8, t9];
-        v
+        (v, opts)
     }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use super::testutil::*;
+
+    use std::default::Default;
+    use std::path::Path;
+
+    use cmp::DefaultCmp;
+    use env::Env;
+    use error::Result;
+    use mem_env::MemEnv;
+    use merging_iter::MergingIter;
+    use options::Options;
+    use table_builder::TableBuilder;
+    use table_cache::{table_name, TableCache};
+    use test_util::{test_iterator_properties, LdbIteratorIter};
+    use types::share;
 
     #[test]
     fn test_version_concat_iter() {
-        let v = make_version();
+        let v = make_version().0;
 
         let expected_entries = vec![0, 9, 6, 4];
         for l in 1..4 {
@@ -549,14 +566,14 @@
 
     #[test]
     fn test_version_concat_iter_properties() {
-        let v = make_version();
+        let v = make_version().0;
         let iter = v.new_concat_iter(3);
         test_iterator_properties(iter);
     }
 
     #[test]
     fn test_version_all_iters() {
-        let v = make_version();
+        let v = make_version().0;
         let iters = v.new_iters().unwrap();
         let mut opt = Options::default();
         opt.set_comparator(Box::new(InternalKeyCmp(Rc::new(Box::new(DefaultCmp)))));
@@ -575,7 +592,7 @@
 
     #[test]
     fn test_version_get_simple() {
-        let v = make_version();
+        let v = make_version().0;
         let cases: &[(&[u8], u64, Result<Option<Vec<u8>>>)] =
             &[("aaa".as_bytes(), 0, Ok(None)),
               ("aaa".as_bytes(), 1, Ok(Some("val1".as_bytes().to_vec()))),
@@ -599,7 +616,7 @@
 
     #[test]
     fn test_version_overlap_in_level() {
-        let v = make_version();
+        let v = make_version().0;
 
         for &(level, (k1, k2), want) in &[(0, ("000".as_bytes(), "003".as_bytes()), false),
                                           (0, ("aa0".as_bytes(), "abx".as_bytes()), true),
@@ -617,7 +634,7 @@
 
     #[test]
     fn test_version_overlapping_inputs() {
-        let v = make_version();
+        let v = make_version().0;
 
         time_test!("overlapping-inputs");
         {
@@ -660,7 +677,7 @@
 
     #[test]
     fn test_version_record_read_sample() {
-        let mut v = make_version();
+        let mut v = make_version().0;
         let k = LookupKey::new("aab".as_bytes(), MAX_SEQUENCE_NUMBER);
         let only_in_one = LookupKey::new("cax".as_bytes(), MAX_SEQUENCE_NUMBER);