From e08fe8f6e066587b1d47f35d4787f9626385788e Mon Sep 17 00:00:00 2001 From: pavel-mukhanov Date: Wed, 26 Jun 2019 16:04:01 +0300 Subject: [PATCH] Add test for sync snapshot. --- tests/test_db.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/test_db.rs b/tests/test_db.rs index 47dac85..f0ec54c 100644 --- a/tests/test_db.rs +++ b/tests/test_db.rs @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +#![feature(thread_spawn_unchecked)] + extern crate libc; extern crate rocksdb; @@ -21,6 +23,7 @@ use libc::size_t; use rocksdb::{DBVector, Error, IteratorMode, Options, WriteBatch, DB}; use util::DBPath; +use std::thread; #[test] fn test_db_vector() { @@ -163,6 +166,36 @@ fn snapshot_test() { } } +#[test] +fn sync_snapshot_test() { + let path = DBPath::new("_rust_rocksdb_sync_snapshottest"); + { + let db = DB::open_default(&path).unwrap(); + + assert!(db.put(b"k1", b"v1").is_ok()); + assert!(db.put(b"k2", b"v2").is_ok()); + + let snapshot = db.snapshot(); + + // Unsafe here is safe, because `handler.join()` is called at the end of the + // method to ensure that snapshot will not outlive database. + let handler_1 = unsafe { + thread::Builder::new().spawn_unchecked(|| { + assert_eq!(snapshot.get(b"k1").unwrap().unwrap().to_utf8().unwrap(), "v1"); + }).unwrap() + }; + + let handler_2 = unsafe { + thread::Builder::new().spawn_unchecked(|| { + assert_eq!(snapshot.get(b"k2").unwrap().unwrap().to_utf8().unwrap(), "v2"); + }).unwrap() + }; + + handler_1.join().unwrap(); + handler_2.join().unwrap(); + } +} + #[test] fn set_option_test() { let path = DBPath::new("_rust_rocksdb_set_optionstest");