From e3c4ce6f58b6086270dd7fdf9d140fd82998228b Mon Sep 17 00:00:00 2001 From: miirc Date: Sun, 8 Nov 2020 07:16:03 -0500 Subject: [PATCH] Open existing store file --- src/storage/store.rs | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/storage/store.rs b/src/storage/store.rs index 15bc220..fc715f9 100644 --- a/src/storage/store.rs +++ b/src/storage/store.rs @@ -1,3 +1,4 @@ +#![allow(unused)] use std::fs; use std::io::{prelude::*, Error, ErrorKind}; @@ -28,11 +29,13 @@ impl Store { } let mut f = fs::OpenOptions::new() .append(true) - .read(true) .create(true) .open(&self.path)?; - match f.read(&mut self.buffer) { - Ok(_) => Ok(()), + match fs::read(&self.path) { + Ok(buff) => { + self.buffer = buff; + Ok(()) + } Err(err) => Err(err), } } @@ -53,16 +56,20 @@ mod tests { fs::create_dir_all(TMP_DIR) } - fn setup_tmp_file(name: &str, buf: Option>) -> Result<(), io::Error> { + fn setup_tmp_file(name: &str, buf: Option>) -> Result { setup_tmp_dir()?; let t = SystemTime::now() .duration_since(SystemTime::UNIX_EPOCH) .unwrap(); let now = format!("{}-{:?}", name, t); let path = format_file_name(&now); - match buf { - Some(c) => fs::write(path, c), - None => fs::write(path, ""), + let result = match buf { + Some(c) => fs::write(path.clone(), c), + None => fs::write(path.clone(), ""), + }; + match result { + Err(err) => Err(err), + _ => Ok(path), } } @@ -71,7 +78,7 @@ mod tests { } #[test] - fn test_store_new() { + fn returns_new_store() { let s = Store::new(); let e = Store { path: String::default(), @@ -81,9 +88,9 @@ mod tests { } #[test] - fn test_store_from() { + fn returns_store_with_path() { let path = String::from("foo"); - let s = Store::from(path.to_owned()); + let s = Store::from(path.clone()); let e = Store { path: path, buffer: vec![], @@ -92,7 +99,7 @@ mod tests { } #[test] - fn test_store_open_no_path() { + fn store_open_errors_with_empty_path() { let mut s = Store::new(); let resp = s.open(); assert_eq!(true, resp.is_err()); @@ -101,7 +108,7 @@ mod tests { } #[test] - fn test_store_open_create() { + fn store_open_creates_new_file() { setup_tmp_dir().unwrap(); let t = SystemTime::now() .duration_since(SystemTime::UNIX_EPOCH) @@ -115,4 +122,15 @@ mod tests { assert_eq!(eb, s.buffer); teardown_tmp_file(&now); } + + #[test] + fn store_open_loads_existing_file() { + let buf: Vec = "i exist".as_bytes().to_vec(); + let p = setup_tmp_file("store_load_existing", Some(buf.clone())); + assert_eq!(true, p.is_ok()); + let mut s = Store::from(p.unwrap()); + let resp = s.open(); + assert_eq!(true, resp.is_ok()); + assert_eq!(buf, s.buffer); + } }