util tests use kvdb_memorydb instead of kvdb_rocksdb, closes #6739

This commit is contained in:
debris 2017-10-13 17:10:03 +02:00
parent b277c3810f
commit da8bf76c15
7 changed files with 97 additions and 150 deletions

1
Cargo.lock generated
View File

@ -905,7 +905,6 @@ dependencies = [
"heapsize 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"kvdb 0.1.0", "kvdb 0.1.0",
"kvdb-memorydb 0.1.0", "kvdb-memorydb 0.1.0",
"kvdb-rocksdb 0.1.0",
"libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"lru-cache 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "lru-cache 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",

View File

@ -36,7 +36,6 @@ util-error = { path = "error" }
kvdb = { path = "kvdb" } kvdb = { path = "kvdb" }
[dev-dependencies] [dev-dependencies]
kvdb-rocksdb = { path = "kvdb-rocksdb" }
kvdb-memorydb = { path = "kvdb-memorydb" } kvdb-memorydb = { path = "kvdb-memorydb" }
[features] [features]

View File

@ -55,13 +55,6 @@ impl ArchiveDB {
} }
} }
/// Create a new instance with an anonymous temporary database.
#[cfg(test)]
fn new_temp() -> ArchiveDB {
let backing = Arc::new(::kvdb_memorydb::in_memory(0));
Self::new(backing, None)
}
fn payload(&self, key: &H256) -> Option<DBValue> { fn payload(&self, key: &H256) -> Option<DBValue> {
self.backing.get(self.column, key).expect("Low-level database error. Some issue with your hard disk?") self.backing.get(self.column, key).expect("Low-level database error. Some issue with your hard disk?")
} }
@ -206,18 +199,16 @@ mod tests {
#![cfg_attr(feature="dev", allow(blacklisted_name))] #![cfg_attr(feature="dev", allow(blacklisted_name))]
#![cfg_attr(feature="dev", allow(similar_names))] #![cfg_attr(feature="dev", allow(similar_names))]
use std::path::Path;
use keccak::keccak; use keccak::keccak;
use hashdb::{HashDB, DBValue}; use hashdb::{HashDB, DBValue};
use super::*; use super::*;
use journaldb::traits::JournalDB; use journaldb::traits::JournalDB;
use kvdb_rocksdb::Database; use kvdb_memorydb::in_memory;
use bigint::hash::H32;
#[test] #[test]
fn insert_same_in_fork() { fn insert_same_in_fork() {
// history is 1 // history is 1
let mut jdb = ArchiveDB::new_temp(); let mut jdb = ArchiveDB::new(Arc::new(in_memory(0)), None);
let x = jdb.insert(b"X"); let x = jdb.insert(b"X");
jdb.commit_batch(1, &keccak(b"1"), None).unwrap(); jdb.commit_batch(1, &keccak(b"1"), None).unwrap();
@ -239,7 +230,7 @@ mod tests {
#[test] #[test]
fn long_history() { fn long_history() {
// history is 3 // history is 3
let mut jdb = ArchiveDB::new_temp(); let mut jdb = ArchiveDB::new(Arc::new(in_memory(0)), None);
let h = jdb.insert(b"foo"); let h = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
assert!(jdb.contains(&h)); assert!(jdb.contains(&h));
@ -257,7 +248,7 @@ mod tests {
#[test] #[test]
#[should_panic] #[should_panic]
fn multiple_owed_removal_not_allowed() { fn multiple_owed_removal_not_allowed() {
let mut jdb = ArchiveDB::new_temp(); let mut jdb = ArchiveDB::new(Arc::new(in_memory(0)), None);
let h = jdb.insert(b"foo"); let h = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
assert!(jdb.contains(&h)); assert!(jdb.contains(&h));
@ -271,7 +262,7 @@ mod tests {
#[test] #[test]
fn complex() { fn complex() {
// history is 1 // history is 1
let mut jdb = ArchiveDB::new_temp(); let mut jdb = ArchiveDB::new(Arc::new(in_memory(0)), None);
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
let bar = jdb.insert(b"bar"); let bar = jdb.insert(b"bar");
@ -303,7 +294,7 @@ mod tests {
#[test] #[test]
fn fork() { fn fork() {
// history is 1 // history is 1
let mut jdb = ArchiveDB::new_temp(); let mut jdb = ArchiveDB::new(Arc::new(in_memory(0)), None);
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
let bar = jdb.insert(b"bar"); let bar = jdb.insert(b"bar");
@ -329,7 +320,7 @@ mod tests {
#[test] #[test]
fn overwrite() { fn overwrite() {
// history is 1 // history is 1
let mut jdb = ArchiveDB::new_temp(); let mut jdb = ArchiveDB::new(Arc::new(in_memory(0)), None);
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
@ -348,7 +339,7 @@ mod tests {
#[test] #[test]
fn fork_same_key() { fn fork_same_key() {
// history is 1 // history is 1
let mut jdb = ArchiveDB::new_temp(); let mut jdb = ArchiveDB::new(Arc::new(in_memory(0)), None);
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
@ -362,19 +353,13 @@ mod tests {
assert!(jdb.contains(&foo)); assert!(jdb.contains(&foo));
} }
fn new_db(dir: &Path) -> ArchiveDB {
let db = Database::open_default(dir.to_str().unwrap()).unwrap();
ArchiveDB::new(Arc::new(db), None)
}
#[test] #[test]
fn reopen() { fn reopen() {
let mut dir = ::std::env::temp_dir(); let shared_db = Arc::new(in_memory(0));
dir.push(H32::random().hex());
let bar = H256::random(); let bar = H256::random();
let foo = { let foo = {
let mut jdb = new_db(&dir); let mut jdb = ArchiveDB::new(shared_db.clone(), None);
// history is 1 // history is 1
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
jdb.emplace(bar.clone(), DBValue::from_slice(b"bar")); jdb.emplace(bar.clone(), DBValue::from_slice(b"bar"));
@ -383,13 +368,13 @@ mod tests {
}; };
{ {
let mut jdb = new_db(&dir); let mut jdb = ArchiveDB::new(shared_db.clone(), None);
jdb.remove(&foo); jdb.remove(&foo);
jdb.commit_batch(1, &keccak(b"1"), Some((0, keccak(b"0")))).unwrap(); jdb.commit_batch(1, &keccak(b"1"), Some((0, keccak(b"0")))).unwrap();
} }
{ {
let mut jdb = new_db(&dir); let mut jdb = ArchiveDB::new(shared_db, None);
assert!(jdb.contains(&foo)); assert!(jdb.contains(&foo));
assert!(jdb.contains(&bar)); assert!(jdb.contains(&bar));
jdb.commit_batch(2, &keccak(b"2"), Some((1, keccak(b"1")))).unwrap(); jdb.commit_batch(2, &keccak(b"2"), Some((1, keccak(b"1")))).unwrap();
@ -398,11 +383,10 @@ mod tests {
#[test] #[test]
fn reopen_remove() { fn reopen_remove() {
let mut dir = ::std::env::temp_dir(); let shared_db = Arc::new(in_memory(0));
dir.push(H32::random().hex());
let foo = { let foo = {
let mut jdb = new_db(&dir); let mut jdb = ArchiveDB::new(shared_db.clone(), None);
// history is 1 // history is 1
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
@ -416,7 +400,7 @@ mod tests {
}; };
{ {
let mut jdb = new_db(&dir); let mut jdb = ArchiveDB::new(shared_db, None);
jdb.remove(&foo); jdb.remove(&foo);
jdb.commit_batch(3, &keccak(b"3"), Some((2, keccak(b"2")))).unwrap(); jdb.commit_batch(3, &keccak(b"3"), Some((2, keccak(b"2")))).unwrap();
assert!(jdb.contains(&foo)); assert!(jdb.contains(&foo));
@ -428,10 +412,9 @@ mod tests {
#[test] #[test]
fn reopen_fork() { fn reopen_fork() {
let mut dir = ::std::env::temp_dir(); let shared_db = Arc::new(in_memory(0));
dir.push(H32::random().hex());
let (foo, _, _) = { let (foo, _, _) = {
let mut jdb = new_db(&dir); let mut jdb = ArchiveDB::new(shared_db.clone(), None);
// history is 1 // history is 1
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
let bar = jdb.insert(b"bar"); let bar = jdb.insert(b"bar");
@ -446,7 +429,7 @@ mod tests {
}; };
{ {
let mut jdb = new_db(&dir); let mut jdb = ArchiveDB::new(shared_db, None);
jdb.commit_batch(2, &keccak(b"2b"), Some((1, keccak(b"1b")))).unwrap(); jdb.commit_batch(2, &keccak(b"2b"), Some((1, keccak(b"1b")))).unwrap();
assert!(jdb.contains(&foo)); assert!(jdb.contains(&foo));
} }
@ -454,17 +437,17 @@ mod tests {
#[test] #[test]
fn returns_state() { fn returns_state() {
let temp = ::devtools::RandomTempPath::new(); let shared_db = Arc::new(in_memory(0));
let key = { let key = {
let mut jdb = new_db(temp.as_path().as_path()); let mut jdb = ArchiveDB::new(shared_db.clone(), None);
let key = jdb.insert(b"foo"); let key = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
key key
}; };
{ {
let jdb = new_db(temp.as_path().as_path()); let jdb = ArchiveDB::new(shared_db, None);
let state = jdb.state(&key); let state = jdb.state(&key);
assert!(state.is_some()); assert!(state.is_some());
} }
@ -472,9 +455,7 @@ mod tests {
#[test] #[test]
fn inject() { fn inject() {
let temp = ::devtools::RandomTempPath::new(); let mut jdb = ArchiveDB::new(Arc::new(in_memory(0)), None);
let mut jdb = new_db(temp.as_path().as_path());
let key = jdb.insert(b"dog"); let key = jdb.insert(b"dog");
jdb.inject_batch().unwrap(); jdb.inject_batch().unwrap();

View File

@ -140,13 +140,6 @@ impl EarlyMergeDB {
} }
} }
/// Create a new instance with an anonymous temporary database.
#[cfg(test)]
fn new_temp() -> EarlyMergeDB {
let backing = Arc::new(::kvdb_memorydb::in_memory(0));
Self::new(backing, None)
}
fn morph_key(key: &H256, index: u8) -> Bytes { fn morph_key(key: &H256, index: u8) -> Bytes {
let mut ret = (&**key).to_owned(); let mut ret = (&**key).to_owned();
ret.push(index); ret.push(index);
@ -554,19 +547,17 @@ mod tests {
#![cfg_attr(feature="dev", allow(blacklisted_name))] #![cfg_attr(feature="dev", allow(blacklisted_name))]
#![cfg_attr(feature="dev", allow(similar_names))] #![cfg_attr(feature="dev", allow(similar_names))]
use std::path::Path;
use keccak::keccak; use keccak::keccak;
use hashdb::{HashDB, DBValue}; use hashdb::{HashDB, DBValue};
use super::*; use super::*;
use super::super::traits::JournalDB; use super::super::traits::JournalDB;
use ethcore_logger::init_log; use ethcore_logger::init_log;
use kvdb_rocksdb::{DatabaseConfig}; use kvdb_memorydb::in_memory;
use bigint::hash::H32;
#[test] #[test]
fn insert_same_in_fork() { fn insert_same_in_fork() {
// history is 1 // history is 1
let mut jdb = EarlyMergeDB::new_temp(); let mut jdb = new_db();
let x = jdb.insert(b"X"); let x = jdb.insert(b"X");
jdb.commit_batch(1, &keccak(b"1"), None).unwrap(); jdb.commit_batch(1, &keccak(b"1"), None).unwrap();
@ -595,7 +586,7 @@ mod tests {
#[test] #[test]
fn insert_older_era() { fn insert_older_era() {
let mut jdb = EarlyMergeDB::new_temp(); let mut jdb = new_db();
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0a"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0a"), None).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -616,7 +607,7 @@ mod tests {
#[test] #[test]
fn long_history() { fn long_history() {
// history is 3 // history is 3
let mut jdb = EarlyMergeDB::new_temp(); let mut jdb = new_db();
let h = jdb.insert(b"foo"); let h = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -639,7 +630,7 @@ mod tests {
#[test] #[test]
fn complex() { fn complex() {
// history is 1 // history is 1
let mut jdb = EarlyMergeDB::new_temp(); let mut jdb = new_db();
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
let bar = jdb.insert(b"bar"); let bar = jdb.insert(b"bar");
@ -682,7 +673,7 @@ mod tests {
#[test] #[test]
fn fork() { fn fork() {
// history is 1 // history is 1
let mut jdb = EarlyMergeDB::new_temp(); let mut jdb = new_db();
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
let bar = jdb.insert(b"bar"); let bar = jdb.insert(b"bar");
@ -714,7 +705,7 @@ mod tests {
#[test] #[test]
fn overwrite() { fn overwrite() {
// history is 1 // history is 1
let mut jdb = EarlyMergeDB::new_temp(); let mut jdb = new_db();
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
@ -737,7 +728,7 @@ mod tests {
#[test] #[test]
fn fork_same_key_one() { fn fork_same_key_one() {
let mut jdb = EarlyMergeDB::new_temp(); let mut jdb = new_db();
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -762,7 +753,7 @@ mod tests {
#[test] #[test]
fn fork_same_key_other() { fn fork_same_key_other() {
let mut jdb = EarlyMergeDB::new_temp(); let mut jdb = new_db();
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -787,7 +778,7 @@ mod tests {
#[test] #[test]
fn fork_ins_del_ins() { fn fork_ins_del_ins() {
let mut jdb = EarlyMergeDB::new_temp(); let mut jdb = new_db();
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -818,20 +809,18 @@ mod tests {
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
} }
fn new_db(path: &Path) -> EarlyMergeDB { fn new_db() -> EarlyMergeDB {
let config = DatabaseConfig::with_columns(Some(1)); let backing = Arc::new(in_memory(0));
let backing = Arc::new(::kvdb_rocksdb::Database::open(&config, path.to_str().unwrap()).unwrap()); EarlyMergeDB::new(backing, None)
EarlyMergeDB::new(backing, Some(0))
} }
#[test] #[test]
fn reopen() { fn reopen() {
let mut dir = ::std::env::temp_dir(); let shared_db = Arc::new(in_memory(0));
dir.push(H32::random().hex());
let bar = H256::random(); let bar = H256::random();
let foo = { let foo = {
let mut jdb = new_db(&dir); let mut jdb = EarlyMergeDB::new(shared_db.clone(), None);
// history is 1 // history is 1
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
jdb.emplace(bar.clone(), DBValue::from_slice(b"bar")); jdb.emplace(bar.clone(), DBValue::from_slice(b"bar"));
@ -841,14 +830,14 @@ mod tests {
}; };
{ {
let mut jdb = new_db(&dir); let mut jdb = EarlyMergeDB::new(shared_db.clone(), None);
jdb.remove(&foo); jdb.remove(&foo);
jdb.commit_batch(1, &keccak(b"1"), Some((0, keccak(b"0")))).unwrap(); jdb.commit_batch(1, &keccak(b"1"), Some((0, keccak(b"0")))).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
} }
{ {
let mut jdb = new_db(&dir); let mut jdb = EarlyMergeDB::new(shared_db, None);
assert!(jdb.contains(&foo)); assert!(jdb.contains(&foo));
assert!(jdb.contains(&bar)); assert!(jdb.contains(&bar));
jdb.commit_batch(2, &keccak(b"2"), Some((1, keccak(b"1")))).unwrap(); jdb.commit_batch(2, &keccak(b"2"), Some((1, keccak(b"1")))).unwrap();
@ -861,7 +850,7 @@ mod tests {
fn insert_delete_insert_delete_insert_expunge() { fn insert_delete_insert_delete_insert_expunge() {
init_log(); init_log();
let mut jdb = EarlyMergeDB::new_temp(); let mut jdb = new_db();
// history is 4 // history is 4
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
@ -887,7 +876,7 @@ mod tests {
#[test] #[test]
fn forked_insert_delete_insert_delete_insert_expunge() { fn forked_insert_delete_insert_delete_insert_expunge() {
init_log(); init_log();
let mut jdb = EarlyMergeDB::new_temp(); let mut jdb = new_db();
// history is 4 // history is 4
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
@ -933,7 +922,7 @@ mod tests {
#[test] #[test]
fn broken_assert() { fn broken_assert() {
let mut jdb = EarlyMergeDB::new_temp(); let mut jdb = new_db();
// history is 1 // history is 1
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
@ -962,7 +951,7 @@ mod tests {
#[test] #[test]
fn reopen_test() { fn reopen_test() {
let mut jdb = EarlyMergeDB::new_temp(); let mut jdb = new_db();
// history is 4 // history is 4
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
@ -997,13 +986,11 @@ mod tests {
fn reopen_remove_three() { fn reopen_remove_three() {
init_log(); init_log();
let mut dir = ::std::env::temp_dir(); let shared_db = Arc::new(in_memory(0));
dir.push(H32::random().hex());
let foo = keccak(b"foo"); let foo = keccak(b"foo");
{ {
let mut jdb = new_db(&dir); let mut jdb = EarlyMergeDB::new(shared_db.clone(), None);
// history is 1 // history is 1
jdb.insert(b"foo"); jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
@ -1025,7 +1012,7 @@ mod tests {
// incantation to reopen the db // incantation to reopen the db
}; { }; {
let mut jdb = new_db(&dir); let mut jdb = EarlyMergeDB::new(shared_db.clone(), None);
jdb.remove(&foo); jdb.remove(&foo);
jdb.commit_batch(4, &keccak(b"4"), Some((2, keccak(b"2")))).unwrap(); jdb.commit_batch(4, &keccak(b"4"), Some((2, keccak(b"2")))).unwrap();
@ -1034,7 +1021,7 @@ mod tests {
// incantation to reopen the db // incantation to reopen the db
}; { }; {
let mut jdb = new_db(&dir); let mut jdb = EarlyMergeDB::new(shared_db.clone(), None);
jdb.commit_batch(5, &keccak(b"5"), Some((3, keccak(b"3")))).unwrap(); jdb.commit_batch(5, &keccak(b"5"), Some((3, keccak(b"3")))).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -1042,7 +1029,7 @@ mod tests {
// incantation to reopen the db // incantation to reopen the db
}; { }; {
let mut jdb = new_db(&dir); let mut jdb = EarlyMergeDB::new(shared_db, None);
jdb.commit_batch(6, &keccak(b"6"), Some((4, keccak(b"4")))).unwrap(); jdb.commit_batch(6, &keccak(b"6"), Some((4, keccak(b"4")))).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -1052,10 +1039,10 @@ mod tests {
#[test] #[test]
fn reopen_fork() { fn reopen_fork() {
let mut dir = ::std::env::temp_dir(); let shared_db = Arc::new(in_memory(0));
dir.push(H32::random().hex());
let (foo, bar, baz) = { let (foo, bar, baz) = {
let mut jdb = new_db(&dir); let mut jdb = EarlyMergeDB::new(shared_db.clone(), None);
// history is 1 // history is 1
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
let bar = jdb.insert(b"bar"); let bar = jdb.insert(b"bar");
@ -1073,7 +1060,7 @@ mod tests {
}; };
{ {
let mut jdb = new_db(&dir); let mut jdb = EarlyMergeDB::new(shared_db, None);
jdb.commit_batch(2, &keccak(b"2b"), Some((1, keccak(b"1b")))).unwrap(); jdb.commit_batch(2, &keccak(b"2b"), Some((1, keccak(b"1b")))).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
assert!(jdb.contains(&foo)); assert!(jdb.contains(&foo));
@ -1084,9 +1071,7 @@ mod tests {
#[test] #[test]
fn inject() { fn inject() {
let temp = ::devtools::RandomTempPath::new(); let mut jdb = new_db();
let mut jdb = new_db(temp.as_path().as_path());
let key = jdb.insert(b"dog"); let key = jdb.insert(b"dog");
jdb.inject_batch().unwrap(); jdb.inject_batch().unwrap();

View File

@ -117,13 +117,6 @@ impl OverlayRecentDB {
} }
} }
/// Create a new instance with an anonymous temporary database.
#[cfg(test)]
pub fn new_temp() -> OverlayRecentDB {
let backing = Arc::new(::kvdb_memorydb::in_memory(0));
Self::new(backing, None)
}
#[cfg(test)] #[cfg(test)]
fn can_reconstruct_refs(&self) -> bool { fn can_reconstruct_refs(&self) -> bool {
let reconstructed = Self::read_overlay(&*self.backing, self.column); let reconstructed = Self::read_overlay(&*self.backing, self.column);
@ -462,24 +455,22 @@ mod tests {
#![cfg_attr(feature="dev", allow(blacklisted_name))] #![cfg_attr(feature="dev", allow(blacklisted_name))]
#![cfg_attr(feature="dev", allow(similar_names))] #![cfg_attr(feature="dev", allow(similar_names))]
use std::path::Path;
use keccak::keccak; use keccak::keccak;
use super::*; use super::*;
use hashdb::{HashDB, DBValue}; use hashdb::{HashDB, DBValue};
use ethcore_logger::init_log; use ethcore_logger::init_log;
use journaldb::JournalDB; use journaldb::JournalDB;
use kvdb_rocksdb::Database; use kvdb_memorydb::in_memory;
use bigint::hash::H32;
fn new_db(path: &Path) -> OverlayRecentDB { fn new_db() -> OverlayRecentDB {
let backing = Arc::new(Database::open_default(path.to_str().unwrap()).unwrap()); let backing = Arc::new(in_memory(0));
OverlayRecentDB::new(backing, None) OverlayRecentDB::new(backing, None)
} }
#[test] #[test]
fn insert_same_in_fork() { fn insert_same_in_fork() {
// history is 1 // history is 1
let mut jdb = OverlayRecentDB::new_temp(); let mut jdb = new_db();
let x = jdb.insert(b"X"); let x = jdb.insert(b"X");
jdb.commit_batch(1, &keccak(b"1"), None).unwrap(); jdb.commit_batch(1, &keccak(b"1"), None).unwrap();
@ -509,7 +500,7 @@ mod tests {
#[test] #[test]
fn long_history() { fn long_history() {
// history is 3 // history is 3
let mut jdb = OverlayRecentDB::new_temp(); let mut jdb = new_db();
let h = jdb.insert(b"foo"); let h = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -532,7 +523,7 @@ mod tests {
#[test] #[test]
fn complex() { fn complex() {
// history is 1 // history is 1
let mut jdb = OverlayRecentDB::new_temp(); let mut jdb = new_db();
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
let bar = jdb.insert(b"bar"); let bar = jdb.insert(b"bar");
@ -575,7 +566,7 @@ mod tests {
#[test] #[test]
fn fork() { fn fork() {
// history is 1 // history is 1
let mut jdb = OverlayRecentDB::new_temp(); let mut jdb = new_db();
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
let bar = jdb.insert(b"bar"); let bar = jdb.insert(b"bar");
@ -607,7 +598,7 @@ mod tests {
#[test] #[test]
fn overwrite() { fn overwrite() {
// history is 1 // history is 1
let mut jdb = OverlayRecentDB::new_temp(); let mut jdb = new_db();
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
@ -629,7 +620,7 @@ mod tests {
#[test] #[test]
fn fork_same_key_one() { fn fork_same_key_one() {
let mut jdb = OverlayRecentDB::new_temp(); let mut jdb = new_db();
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -654,7 +645,7 @@ mod tests {
#[test] #[test]
fn fork_same_key_other() { fn fork_same_key_other() {
let mut jdb = OverlayRecentDB::new_temp(); let mut jdb = new_db();
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -680,7 +671,7 @@ mod tests {
#[test] #[test]
fn fork_ins_del_ins() { fn fork_ins_del_ins() {
let mut jdb = OverlayRecentDB::new_temp(); let mut jdb = new_db();
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -714,12 +705,11 @@ mod tests {
#[test] #[test]
fn reopen() { fn reopen() {
let mut dir = ::std::env::temp_dir(); let shared_db = Arc::new(in_memory(0));
dir.push(H32::random().hex());
let bar = H256::random(); let bar = H256::random();
let foo = { let foo = {
let mut jdb = new_db(&dir); let mut jdb = OverlayRecentDB::new(shared_db.clone(), None);
// history is 1 // history is 1
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
jdb.emplace(bar.clone(), DBValue::from_slice(b"bar")); jdb.emplace(bar.clone(), DBValue::from_slice(b"bar"));
@ -729,14 +719,14 @@ mod tests {
}; };
{ {
let mut jdb = new_db(&dir); let mut jdb = OverlayRecentDB::new(shared_db.clone(), None);
jdb.remove(&foo); jdb.remove(&foo);
jdb.commit_batch(1, &keccak(b"1"), Some((0, keccak(b"0")))).unwrap(); jdb.commit_batch(1, &keccak(b"1"), Some((0, keccak(b"0")))).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
} }
{ {
let mut jdb = new_db(&dir); let mut jdb = OverlayRecentDB::new(shared_db.clone(), None);
assert!(jdb.contains(&foo)); assert!(jdb.contains(&foo));
assert!(jdb.contains(&bar)); assert!(jdb.contains(&bar));
jdb.commit_batch(2, &keccak(b"2"), Some((1, keccak(b"1")))).unwrap(); jdb.commit_batch(2, &keccak(b"2"), Some((1, keccak(b"1")))).unwrap();
@ -748,7 +738,7 @@ mod tests {
#[test] #[test]
fn insert_delete_insert_delete_insert_expunge() { fn insert_delete_insert_delete_insert_expunge() {
init_log(); init_log();
let mut jdb = OverlayRecentDB::new_temp(); let mut jdb = new_db();
// history is 4 // history is 4
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
@ -774,7 +764,7 @@ mod tests {
#[test] #[test]
fn forked_insert_delete_insert_delete_insert_expunge() { fn forked_insert_delete_insert_delete_insert_expunge() {
init_log(); init_log();
let mut jdb = OverlayRecentDB::new_temp(); let mut jdb = new_db();
// history is 4 // history is 4
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
@ -820,7 +810,7 @@ mod tests {
#[test] #[test]
fn broken_assert() { fn broken_assert() {
let mut jdb = OverlayRecentDB::new_temp(); let mut jdb = new_db();
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
jdb.commit_batch(1, &keccak(b"1"), Some((0, keccak(b"0")))).unwrap(); jdb.commit_batch(1, &keccak(b"1"), Some((0, keccak(b"0")))).unwrap();
@ -848,7 +838,7 @@ mod tests {
#[test] #[test]
fn reopen_test() { fn reopen_test() {
let mut jdb = OverlayRecentDB::new_temp(); let mut jdb = new_db();
// history is 4 // history is 4
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
@ -882,13 +872,11 @@ mod tests {
fn reopen_remove_three() { fn reopen_remove_three() {
init_log(); init_log();
let mut dir = ::std::env::temp_dir(); let shared_db = Arc::new(in_memory(0));
dir.push(H32::random().hex());
let foo = keccak(b"foo"); let foo = keccak(b"foo");
{ {
let mut jdb = new_db(&dir); let mut jdb = OverlayRecentDB::new(shared_db.clone(), None);
// history is 1 // history is 1
jdb.insert(b"foo"); jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
@ -910,7 +898,7 @@ mod tests {
// incantation to reopen the db // incantation to reopen the db
}; { }; {
let mut jdb = new_db(&dir); let mut jdb = OverlayRecentDB::new(shared_db.clone(), None);
jdb.remove(&foo); jdb.remove(&foo);
jdb.commit_batch(4, &keccak(b"4"), Some((2, keccak(b"2")))).unwrap(); jdb.commit_batch(4, &keccak(b"4"), Some((2, keccak(b"2")))).unwrap();
@ -919,7 +907,7 @@ mod tests {
// incantation to reopen the db // incantation to reopen the db
}; { }; {
let mut jdb = new_db(&dir); let mut jdb = OverlayRecentDB::new(shared_db.clone(), None);
jdb.commit_batch(5, &keccak(b"5"), Some((3, keccak(b"3")))).unwrap(); jdb.commit_batch(5, &keccak(b"5"), Some((3, keccak(b"3")))).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -927,7 +915,7 @@ mod tests {
// incantation to reopen the db // incantation to reopen the db
}; { }; {
let mut jdb = new_db(&dir); let mut jdb = OverlayRecentDB::new(shared_db, None);
jdb.commit_batch(6, &keccak(b"6"), Some((4, keccak(b"4")))).unwrap(); jdb.commit_batch(6, &keccak(b"6"), Some((4, keccak(b"4")))).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -937,10 +925,10 @@ mod tests {
#[test] #[test]
fn reopen_fork() { fn reopen_fork() {
let mut dir = ::std::env::temp_dir(); let shared_db = Arc::new(in_memory(0));
dir.push(H32::random().hex());
let (foo, bar, baz) = { let (foo, bar, baz) = {
let mut jdb = new_db(&dir); let mut jdb = OverlayRecentDB::new(shared_db.clone(), None);
// history is 1 // history is 1
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
let bar = jdb.insert(b"bar"); let bar = jdb.insert(b"bar");
@ -958,7 +946,7 @@ mod tests {
}; };
{ {
let mut jdb = new_db(&dir); let mut jdb = OverlayRecentDB::new(shared_db, None);
jdb.commit_batch(2, &keccak(b"2b"), Some((1, keccak(b"1b")))).unwrap(); jdb.commit_batch(2, &keccak(b"2b"), Some((1, keccak(b"1b")))).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
assert!(jdb.contains(&foo)); assert!(jdb.contains(&foo));
@ -969,7 +957,7 @@ mod tests {
#[test] #[test]
fn insert_older_era() { fn insert_older_era() {
let mut jdb = OverlayRecentDB::new_temp(); let mut jdb = new_db();
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0a"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0a"), None).unwrap();
assert!(jdb.can_reconstruct_refs()); assert!(jdb.can_reconstruct_refs());
@ -989,9 +977,7 @@ mod tests {
#[test] #[test]
fn inject() { fn inject() {
let temp = ::devtools::RandomTempPath::new(); let mut jdb = new_db();
let mut jdb = new_db(temp.as_path().as_path());
let key = jdb.insert(b"dog"); let key = jdb.insert(b"dog");
jdb.inject_batch().unwrap(); jdb.inject_batch().unwrap();
@ -1004,10 +990,10 @@ mod tests {
#[test] #[test]
fn earliest_era() { fn earliest_era() {
let temp = ::devtools::RandomTempPath::new(); let shared_db = Arc::new(in_memory(0));
// empty DB // empty DB
let mut jdb = new_db(temp.as_path().as_path()); let mut jdb = OverlayRecentDB::new(shared_db.clone(), None);
assert!(jdb.earliest_era().is_none()); assert!(jdb.earliest_era().is_none());
// single journalled era. // single journalled era.
@ -1041,7 +1027,7 @@ mod tests {
// reconstructed: no journal entries. // reconstructed: no journal entries.
drop(jdb); drop(jdb);
let jdb = new_db(temp.as_path().as_path()); let jdb = OverlayRecentDB::new(shared_db, None);
assert_eq!(jdb.earliest_era(), None); assert_eq!(jdb.earliest_era(), None);
} }
} }

View File

@ -75,13 +75,6 @@ impl RefCountedDB {
column: col, column: col,
} }
} }
/// Create a new instance with an anonymous temporary database.
#[cfg(test)]
fn new_temp() -> RefCountedDB {
let backing = Arc::new(::kvdb_memorydb::in_memory(0));
Self::new(backing, None)
}
} }
impl HashDB for RefCountedDB { impl HashDB for RefCountedDB {
@ -217,13 +210,19 @@ mod tests {
use keccak::keccak; use keccak::keccak;
use hashdb::{HashDB, DBValue}; use hashdb::{HashDB, DBValue};
use kvdb_memorydb::in_memory;
use super::*; use super::*;
use super::super::traits::JournalDB; use super::super::traits::JournalDB;
fn new_db() -> RefCountedDB {
let backing = Arc::new(in_memory(0));
RefCountedDB::new(backing, None)
}
#[test] #[test]
fn long_history() { fn long_history() {
// history is 3 // history is 3
let mut jdb = RefCountedDB::new_temp(); let mut jdb = new_db();
let h = jdb.insert(b"foo"); let h = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
assert!(jdb.contains(&h)); assert!(jdb.contains(&h));
@ -241,7 +240,7 @@ mod tests {
#[test] #[test]
fn latest_era_should_work() { fn latest_era_should_work() {
// history is 3 // history is 3
let mut jdb = RefCountedDB::new_temp(); let mut jdb = new_db();
assert_eq!(jdb.latest_era(), None); assert_eq!(jdb.latest_era(), None);
let h = jdb.insert(b"foo"); let h = jdb.insert(b"foo");
jdb.commit_batch(0, &keccak(b"0"), None).unwrap(); jdb.commit_batch(0, &keccak(b"0"), None).unwrap();
@ -260,7 +259,7 @@ mod tests {
#[test] #[test]
fn complex() { fn complex() {
// history is 1 // history is 1
let mut jdb = RefCountedDB::new_temp(); let mut jdb = new_db();
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
let bar = jdb.insert(b"bar"); let bar = jdb.insert(b"bar");
@ -298,7 +297,7 @@ mod tests {
#[test] #[test]
fn fork() { fn fork() {
// history is 1 // history is 1
let mut jdb = RefCountedDB::new_temp(); let mut jdb = new_db();
let foo = jdb.insert(b"foo"); let foo = jdb.insert(b"foo");
let bar = jdb.insert(b"bar"); let bar = jdb.insert(b"bar");
@ -325,7 +324,7 @@ mod tests {
#[test] #[test]
fn inject() { fn inject() {
let mut jdb = RefCountedDB::new_temp(); let mut jdb = new_db();
let key = jdb.insert(b"dog"); let key = jdb.insert(b"dog");
jdb.inject_batch().unwrap(); jdb.inject_batch().unwrap();

View File

@ -112,8 +112,6 @@ extern crate util_error as error;
#[cfg(test)] #[cfg(test)]
extern crate kvdb_memorydb; extern crate kvdb_memorydb;
#[cfg(test)]
extern crate kvdb_rocksdb;
#[macro_use] #[macro_use]
extern crate log as rlog; extern crate log as rlog;