summaryrefslogtreecommitdiff
path: root/src/suite.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/suite.rs')
-rw-r--r--src/suite.rs19
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))
}