From 823db2e17e165677f58eddf2e579bd8c534f2869 Mon Sep 17 00:00:00 2001 From: Adrian Heine Date: Thu, 28 Jun 2018 13:43:48 +0200 Subject: [PATCH] Fix tests, remove unused IfAlreadyPresent --- src/schema.rs | 22 +++-- src/symbols/hook.rs | 14 +++ src/symbols/if_already_present.rs | 144 ------------------------------ src/symbols/mod.rs | 9 +- src/symbols/user.rs | 2 +- 5 files changed, 34 insertions(+), 157 deletions(-) delete mode 100644 src/symbols/if_already_present.rs diff --git a/src/schema.rs b/src/schema.rs index af3e942..6c481a7 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -180,7 +180,7 @@ mod test { use std::fmt; use loggers::Logger; - use symbols::Symbol; + use symbols::{Action, OwnedSymbolAction, Symbol, SymbolAction}; use schema::SymbolRunner; use schema::InitializingSymbolRunner; @@ -206,13 +206,21 @@ mod test { _target_reached: &'a Fn() -> Result> } - impl<'a> Symbol for DummySymbol<'a> { + impl<'b> Symbol for DummySymbol<'b> { fn target_reached(&self) -> Result> { (self._target_reached)() } fn execute(&self) -> Result<(), Box> { (self._execute)() } + + fn as_action<'a>(&'a self, runner: &'a SymbolRunner) -> Box { + Box::new(SymbolAction::new(runner, self)) + } + + fn into_action<'a>(self: Box, runner: &'a SymbolRunner) -> Box where Self: 'a { + Box::new(OwnedSymbolAction::new(runner, *self)) + } } impl<'a> fmt::Display for DummySymbol<'a> { @@ -248,14 +256,14 @@ mod test { #[test] fn nothing_needed_to_be_done() { - let result = InitializingSymbolRunner.run_symbol( &mut DummyLogger::new(), &DummySymbol::new(&|| Ok(true), &|| Ok(())) ); + let result = InitializingSymbolRunner::new(DummyLogger::new()).run_symbol(&DummySymbol::new(&|| Ok(true), &|| Ok(()))); assert!(result.is_ok()); } #[test] fn everything_is_ok() { let first = RefCell::new(true); - let result = InitializingSymbolRunner.run_symbol( &mut DummyLogger::new(), &DummySymbol::new(&|| { + let result = InitializingSymbolRunner::new(DummyLogger::new()).run_symbol(&DummySymbol::new(&|| { let mut _first = first.borrow_mut(); Ok(if *_first { *_first = false; @@ -263,13 +271,13 @@ mod test { } else { false }) - }, &|| Ok(())) ); + }, &|| Ok(()))); assert!(result.is_ok()); } #[test] fn executing_did_not_change_state() { - let result = InitializingSymbolRunner.run_symbol( &mut DummyLogger::new(), &DummySymbol::new(&|| Ok(false), &|| Ok(()))); + let result = InitializingSymbolRunner::new(DummyLogger::new()).run_symbol(&DummySymbol::new(&|| Ok(false), &|| Ok(()))); assert_eq!( result.unwrap_err().description(), "Target not reached after executing symbol" @@ -278,7 +286,7 @@ mod test { #[test] fn executing_did_not_work() { - let err = InitializingSymbolRunner.run_symbol( &mut DummyLogger::new(), &DummySymbol::new(&|| Ok(false), &|| Err(Box::new(DummySymbolError::Error(()))) )).unwrap_err(); + let err = InitializingSymbolRunner::new(DummyLogger::new()).run_symbol(&DummySymbol::new(&|| Ok(false), &|| Err(Box::new(DummySymbolError::Error(()))))).unwrap_err(); assert_eq!(err.description(), "Description"); } } diff --git a/src/symbols/hook.rs b/src/symbols/hook.rs index 011d6b1..8147242 100644 --- a/src/symbols/hook.rs +++ b/src/symbols/hook.rs @@ -70,6 +70,13 @@ mod test { impl Symbol for ErrSymbol { fn target_reached(&self) -> Result> { Err(self.0.clone().into()) } fn execute(&self) -> Result<(), Box> { Err(self.0.clone().into()) } + fn as_action<'a>(&'a self, runner: &'a SymbolRunner) -> Box { + Box::new(SymbolAction::new(runner, self)) + } + + fn into_action<'a>(self: Box, runner: &'a SymbolRunner) -> Box where Self: 'a { + Box::new(OwnedSymbolAction::new(runner, *self)) + } } impl fmt::Display for ErrSymbol { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error>{ write!(f, "") } } @@ -77,6 +84,13 @@ mod test { impl Symbol for OkSymbol { fn target_reached(&self) -> Result> { Ok(self.0) } fn execute(&self) -> Result<(), Box> { Ok(()) } + fn as_action<'a>(&'a self, runner: &'a SymbolRunner) -> Box { + Box::new(SymbolAction::new(runner, self)) + } + + fn into_action<'a>(self: Box, runner: &'a SymbolRunner) -> Box where Self: 'a { + Box::new(OwnedSymbolAction::new(runner, *self)) + } } impl fmt::Display for OkSymbol { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error>{ write!(f, "") } } diff --git a/src/symbols/if_already_present.rs b/src/symbols/if_already_present.rs deleted file mode 100644 index 61d46db..0000000 --- a/src/symbols/if_already_present.rs +++ /dev/null @@ -1,144 +0,0 @@ -use std::error::Error; -use std::fmt; - -use resources::Resource; -use symbols::{Action, OwnedSymbolAction, Symbol, SymbolAction, SymbolRunner}; - -pub struct IfAlreadyPresent where A: Symbol, B: Symbol { - a: A, - b: B -} - -impl IfAlreadyPresent where A: Symbol, B: Symbol { - pub fn new(a: A, b: B) -> Self { - IfAlreadyPresent { a: a, b: b } - } -} - -impl Symbol for IfAlreadyPresent where A: Symbol, B: Symbol { - fn target_reached(&self) -> Result> { - self.a.target_reached().and_then(|reached| if reached { self.b.target_reached() } else { Ok(reached) }) - } - - fn execute(&self) -> Result<(), Box> { - // Execute a & b if a is not reached - // Execute b if a was reached and b isn't - if !try!(self.a.target_reached()) { - try!(self.a.execute()); - self.b.execute() - } else if !try!(self.b.target_reached()) { - self.b.execute() - } else { - Ok(()) - } - } - - fn get_prerequisites(&self) -> Vec { - let mut r = vec![]; - r.extend(self.a.get_prerequisites().into_iter()); - r.extend(self.b.get_prerequisites().into_iter()); - r - } - - fn provides(&self) -> Option> { - let mut r = vec![]; - if let Some(provides) = self.a.provides() { - r.extend(provides.into_iter()); - } - if let Some(provides) = self.b.provides() { - r.extend(provides.into_iter()); - } - if r.len() > 0 { Some(r) } else { None } - } - - fn as_action<'a>(&'a self, runner: &'a SymbolRunner) -> Box { - Box::new(SymbolAction::new(runner, self)) - } - - fn into_action<'a>(self: Box, runner: &'a SymbolRunner) -> Box where Self: 'a { - Box::new(OwnedSymbolAction::new(runner, *self)) - } -} - -impl fmt::Display for IfAlreadyPresent where A: Symbol, B: Symbol { - fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error>{ - write!(f, "IfAlreadyPresent {} and then {}", self.a, self.b) - } -} - -#[cfg(test)] -mod test { - use std::error::Error; - use std::fmt; - - use symbols::{Action, OwnedSymbolAction, Symbol, SymbolAction, SymbolRunner}; - use symbols::if_already_present::IfAlreadyPresent; - - struct ErrSymbol(String); - impl Symbol for ErrSymbol { - fn target_reached(&self) -> Result> { Err(self.0.clone().into()) } - fn execute(&self) -> Result<(), Box> { Err(self.0.clone().into()) } - } - impl fmt::Display for ErrSymbol { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error>{ write!(f, "") } } - - struct OkSymbol(bool); - impl Symbol for OkSymbol { - fn target_reached(&self) -> Result> { Ok(self.0) } - fn execute(&self) -> Result<(), Box> { Ok(()) } - } - impl fmt::Display for OkSymbol { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error>{ write!(f, "") } } - - #[test] - fn first_target_reached_fails() { - let res = IfAlreadyPresent::new(ErrSymbol("first".into()), ErrSymbol("second".into())).target_reached(); - assert_eq!(res.unwrap_err().description(), "first"); - } - - #[test] - fn first_target_not_reached() { - let res = IfAlreadyPresent::new(OkSymbol(false), ErrSymbol("second".into())).target_reached(); - assert_eq!(res.unwrap(), false); - } - - #[test] - fn second_target_reached_fails() { - let res = IfAlreadyPresent::new(OkSymbol(true), ErrSymbol("second".into())).target_reached(); - assert_eq!(res.unwrap_err().description(), "second"); - } - - #[test] - fn second_target_not_reached() { - let res = IfAlreadyPresent::new(OkSymbol(true), OkSymbol(false)).target_reached(); - assert_eq!(res.unwrap(), false); - } - - #[test] - fn everything_reached() { - let res = IfAlreadyPresent::new(OkSymbol(true), OkSymbol(true)).target_reached(); - assert_eq!(res.unwrap(), true); - } - - #[test] - fn first_execute_fails() { - let res = IfAlreadyPresent::new(ErrSymbol("first".into()), ErrSymbol("second".into())).execute(); - assert_eq!(res.unwrap_err().description(), "first"); - } - - #[test] - fn second_execute_fails_but_isnt_run() { - let res = IfAlreadyPresent::new(OkSymbol(false), ErrSymbol("second".into())).execute(); - assert_eq!(res.unwrap(), ()); - } - - #[test] - fn second_execute_fails() { - let res = IfAlreadyPresent::new(OkSymbol(true), ErrSymbol("second".into())).execute(); - assert_eq!(res.unwrap_err().description(), "second"); - } - - #[test] - fn everything_executes() { - let res = IfAlreadyPresent::new(OkSymbol(true), OkSymbol(true)).execute(); - assert_eq!(res.unwrap(), ()); - } -} diff --git a/src/symbols/mod.rs b/src/symbols/mod.rs index 449015e..de16eaf 100644 --- a/src/symbols/mod.rs +++ b/src/symbols/mod.rs @@ -31,13 +31,13 @@ pub trait Symbol: Display { } // SymbolAction -struct SymbolAction<'a, S: Symbol + 'a> { +pub struct SymbolAction<'a, S: Symbol + 'a> { runner: &'a SymbolRunner, symbol: &'a S } impl<'a, S: Symbol> SymbolAction<'a, S> { - fn new(runner: &'a SymbolRunner, symbol: &'a S) -> Self { + pub fn new(runner: &'a SymbolRunner, symbol: &'a S) -> Self { Self { runner: runner, symbol: symbol } } } @@ -48,13 +48,13 @@ impl<'a, S: Symbol> Action for SymbolAction<'a, S> { } } -struct OwnedSymbolAction<'a, S: Symbol + 'a> { +pub struct OwnedSymbolAction<'a, S: Symbol + 'a> { runner: &'a SymbolRunner, symbol: S } impl<'a, S: Symbol + 'a> OwnedSymbolAction<'a, S> { - fn new(runner: &'a SymbolRunner, symbol: S) -> Self { + pub fn new(runner: &'a SymbolRunner, symbol: S) -> Self { Self { runner: runner, symbol: symbol } } } @@ -71,7 +71,6 @@ pub mod factory; pub mod file; pub mod git; pub mod hook; -pub mod if_already_present; pub mod list; pub mod mariadb; pub mod nginx; diff --git a/src/symbols/user.rs b/src/symbols/user.rs index 0d4888c..032857f 100644 --- a/src/symbols/user.rs +++ b/src/symbols/user.rs @@ -165,7 +165,7 @@ mod test { use std::fmt; use command_runner::StdCommandRunner; - use symbols::{Action, OwnedSymbolAction, Symbol, SymbolAction, SymbolRunner}; + use symbols::Symbol; use symbols::user::User; use symbols::user::UserAdder; use symbols::user::UserAdderError;