From 756b7a3e679e0f31526e579fa4636a4c86c9ffa6 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Thu, 8 Sep 2016 12:27:13 +0200 Subject: [PATCH] test folder-deleting guards --- ethcore/src/snapshot/service.rs | 2 +- ethcore/src/snapshot/tests/service.rs | 49 +++++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/ethcore/src/snapshot/service.rs b/ethcore/src/snapshot/service.rs index c5d82ace0..d7f42919b 100644 --- a/ethcore/src/snapshot/service.rs +++ b/ethcore/src/snapshot/service.rs @@ -296,7 +296,7 @@ impl Service { fn replace_client_db(&self) -> Result<(), Error> { let our_db = self.restoration_db(); - try!(self.db_restore.restore_db(our_db.to_str().unwrap())); + try!(self.db_restore.restore_db(our_db.to_string_lossy())); Ok(()) } diff --git a/ethcore/src/snapshot/tests/service.rs b/ethcore/src/snapshot/tests/service.rs index 0660668cc..268f7b842 100644 --- a/ethcore/src/snapshot/tests/service.rs +++ b/ethcore/src/snapshot/tests/service.rs @@ -21,7 +21,7 @@ use std::sync::Arc; use client::{BlockChainClient, Client}; use ids::BlockID; use snapshot::service::{Service, ServiceParams}; -use snapshot::SnapshotService; +use snapshot::{self, ManifestData, SnapshotService}; use spec::Spec; use tests::helpers::generate_dummy_client_with_spec_and_data; @@ -29,6 +29,14 @@ use devtools::RandomTempPath; use io::IoChannel; use util::kvdb::DatabaseConfig; +struct NoopDBRestore; + +impl snapshot::DatabaseRestore for NoopDBRestore { + fn restore_db(&self, _new_db: &str) -> Result<(), ::error::Error> { + Ok(()) + } +} + #[test] fn restored_is_equivalent() { const NUM_BLOCKS: u32 = 400; @@ -93,4 +101,41 @@ fn restored_is_equivalent() { assert_eq!(block1, block2); } -} \ No newline at end of file +} + +#[test] +fn guards_delete_folders() { + let spec = Spec::new_null(); + let path = RandomTempPath::create_dir(); + let mut path = path.as_path().clone(); + let service_params = ServiceParams { + engine: spec.engine.clone(), + genesis_block: spec.genesis_block(), + db_config: DatabaseConfig::with_columns(::db::NUM_COLUMNS), + pruning: ::util::journaldb::Algorithm::Archive, + channel: IoChannel::disconnected(), + snapshot_root: path.clone(), + db_restore: Arc::new(NoopDBRestore), + }; + + let service = Service::new(service_params).unwrap(); + path.push("restoration"); + + let manifest = ManifestData { + state_hashes: vec![], + block_hashes: vec![], + block_number: 0, + block_hash: Default::default(), + state_root: Default::default(), + }; + + service.init_restore(manifest).unwrap(); + + assert!(path.exists()); + + drop(service); + + assert!(!path.exists()); +} + +#[test]