A library for writing host-specific, single-binary configuration management and deployment tools
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
1.7 KiB

  1. use schematics::resources::{Cert, Csr, GitCheckout};
  2. use schematics::schema::SymbolRunner;
  3. use schematics::symbols::Symbol;
  4. use schematics::Setup;
  5. use std::cell::RefCell;
  6. use std::error::Error;
  7. use std::fmt::Debug;
  8. use std::rc::Rc;
  9. struct TestSymbolRunner {
  10. count: Rc<RefCell<usize>>,
  11. }
  12. impl SymbolRunner for TestSymbolRunner {
  13. fn run_symbol<S: Symbol + Debug>(
  14. &self,
  15. _symbol: &S,
  16. _force: bool,
  17. ) -> Result<bool, Box<dyn Error>> {
  18. *self.count.borrow_mut() += 1;
  19. Ok(false)
  20. }
  21. }
  22. #[test]
  23. fn runs_only_once() {
  24. let count = Rc::new(RefCell::new(0));
  25. let runner = TestSymbolRunner {
  26. count: Rc::clone(&count),
  27. };
  28. let mut setup = Setup::new(runner);
  29. assert_eq!(
  30. (setup.add(Csr("somehost")).unwrap().0)
  31. .as_ref()
  32. .to_str()
  33. .unwrap(),
  34. "/etc/ssl/local_certs/somehost.csr",
  35. );
  36. assert_eq!(
  37. (setup.add(Csr("somehost")).unwrap().0)
  38. .as_ref()
  39. .to_str()
  40. .unwrap(),
  41. "/etc/ssl/local_certs/somehost.csr",
  42. );
  43. assert_eq!(*count.borrow(), 2 + 5); // Key and CSR + 5 dirs
  44. }
  45. #[test]
  46. fn can_create_an_acme_cert() {
  47. let count = Rc::new(RefCell::new(0));
  48. let runner = TestSymbolRunner {
  49. count: Rc::clone(&count),
  50. };
  51. let mut setup = Setup::new(runner);
  52. assert_eq!(
  53. (setup.add(Cert("somehost")).unwrap().0)
  54. .as_ref()
  55. .to_str()
  56. .unwrap(),
  57. "/etc/ssl/local_certs/somehost.crt",
  58. );
  59. assert_eq!(*count.borrow(), 15);
  60. }
  61. #[test]
  62. fn can_create_a_git_checkout() {
  63. let count = Rc::new(RefCell::new(0));
  64. let runner = TestSymbolRunner {
  65. count: Rc::clone(&count),
  66. };
  67. let mut setup = Setup::new(runner);
  68. setup
  69. .add(GitCheckout(
  70. "/tmp/somepath".into(),
  71. "/tmp/some_src_repo",
  72. "master",
  73. ))
  74. .unwrap();
  75. assert_eq!(*count.borrow(), 3);
  76. }