use schematics::resources::{Cert, Csr, GitCheckout}; use schematics::schema::SymbolRunner; use schematics::symbols::Symbol; use schematics::Setup; use std::cell::RefCell; use std::error::Error; use std::fmt::Debug; use std::rc::Rc; struct TestSymbolRunner { count: Rc>, } impl SymbolRunner for TestSymbolRunner { fn run_symbol( &self, _symbol: &S, _force: bool, ) -> Result> { *self.count.borrow_mut() += 1; Ok(false) } } #[test] fn runs_only_once() { let count = Rc::new(RefCell::new(0)); let runner = TestSymbolRunner { count: Rc::clone(&count), }; let mut setup = Setup::new(runner); assert_eq!( (setup.add(Csr("somehost")).unwrap().0) .as_ref() .to_str() .unwrap(), "/etc/ssl/local_certs/somehost.csr", ); assert_eq!( (setup.add(Csr("somehost")).unwrap().0) .as_ref() .to_str() .unwrap(), "/etc/ssl/local_certs/somehost.csr", ); assert_eq!(*count.borrow(), 2 + 5); // Key and CSR + 5 dirs } #[test] fn can_create_an_acme_cert() { let count = Rc::new(RefCell::new(0)); let runner = TestSymbolRunner { count: Rc::clone(&count), }; let mut setup = Setup::new(runner); assert_eq!( (setup.add(Cert("somehost")).unwrap().0) .as_ref() .to_str() .unwrap(), "/etc/ssl/local_certs/somehost.crt", ); assert_eq!(*count.borrow(), 19); } #[test] fn can_create_a_git_checkout() { let count = Rc::new(RefCell::new(0)); let runner = TestSymbolRunner { count: Rc::clone(&count), }; let mut setup = Setup::new(runner); setup .add(GitCheckout( "/tmp/somepath".into(), "/tmp/some_src_repo", "master", )) .unwrap(); assert_eq!(*count.borrow(), 3); }