diff options
Diffstat (limited to 'src/suite.rs')
-rw-r--r-- | src/suite.rs | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/suite.rs b/src/suite.rs index 435c476..0f49994 100644 --- a/src/suite.rs +++ b/src/suite.rs @@ -1,5 +1,7 @@ +use crate::daemon::DaemonManager; use crate::obnam::{Obnam, ObnamError}; use crate::result::{Measurement, OpMeasurements, Operation}; +use crate::server::{ObnamServer, ObnamServerError}; use crate::specification::{Create, FileCount}; use crate::step::Step; use log::{debug, info}; @@ -13,6 +15,7 @@ use walkdir::WalkDir; /// This manages temporary data created for the benchmarks, and /// executes individual steps in the suite. pub struct Suite { + manager: DaemonManager, benchmark: Option<Benchmark>, } @@ -38,11 +41,18 @@ pub enum SuiteError { /// Error managing an Obnam system. #[error(transparent)] Obnam(#[from] ObnamError), + + /// Error managing an Obnam server. + #[error(transparent)] + Server(#[from] ObnamServerError), } impl Suite { pub fn new() -> Result<Self, SuiteError> { - Ok(Self { benchmark: None }) + Ok(Self { + manager: DaemonManager::new(), + benchmark: None, + }) } /// Execute one step in the benchmark suite. @@ -54,7 +64,7 @@ impl Suite { let mut om = match step { Step::Start(name) => { assert!(self.benchmark.is_none()); - let mut benchmark = Benchmark::new(name)?; + let mut benchmark = Benchmark::new(name, &self.manager)?; let om = benchmark.start()?; self.benchmark = Some(benchmark); om @@ -104,13 +114,15 @@ struct Benchmark { // Obnam, and thereby delete any temporary files. We want to do // that intentionally, so that it can be measured. obnam: Option<Obnam>, + server: Option<ObnamServer>, } impl Benchmark { - fn new(name: &str) -> Result<Self, SuiteError> { + fn new(name: &str, manager: &DaemonManager) -> Result<Self, SuiteError> { Ok(Self { name: name.to_string(), obnam: Some(Obnam::new()?), + server: Some(ObnamServer::new(manager)?), }) } @@ -132,6 +144,7 @@ impl Benchmark { info!("ending benchmark {}", self.name); self.obnam().stop_server()?; self.obnam.take().unwrap(); // This destroys the Obnam + self.server.as_mut().unwrap().stop(); Ok(OpMeasurements::new(self.name(), Operation::Stop)) } |