diff options
Diffstat (limited to 'src/server.rs')
-rw-r--r-- | src/server.rs | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/server.rs b/src/server.rs index 9a809a5..26f418b 100644 --- a/src/server.rs +++ b/src/server.rs @@ -3,6 +3,7 @@ use crate::tlsgen::{Tls, TlsError}; use log::debug; use rand::random; use serde::Serialize; +use std::ffi::OsStr; use std::ops::Range; use std::path::{Path, PathBuf}; use std::time::Instant; @@ -18,6 +19,9 @@ pub enum ObnamServerError { #[error("took too long to pick a random port for server")] Port, + #[error("error creating chunks directory: {0}")] + ChunksDir(std::io::Error), + #[error("failed to create temporary directory for server: {0}")] TempDir(std::io::Error), @@ -40,11 +44,12 @@ pub struct ObnamServer { tempdir: TempDir, chunks: PathBuf, daemon: Option<Daemon>, + url: String, } impl ObnamServer { pub fn new(manager: &DaemonManager) -> Result<Self, ObnamServerError> { - debug!("creating ObamServer"); + debug!("creating ObnamServer"); let tempdir = tempdir().map_err(ObnamServerError::TempDir)?; let config_filename = tempdir.path().join("server.yaml"); let chunks = tempdir.path().join("chunks"); @@ -55,22 +60,37 @@ impl ObnamServer { write(&tls_key, tls.key())?; write(&tls_cert, tls.cert())?; + std::fs::create_dir(&chunks).map_err(ObnamServerError::ChunksDir)?; + let port = pick_port()?; + debug!("server listens on port {}", port); let config = ServerConfig::new(port, chunks.clone(), tls_key, tls_cert); config.write(&config_filename)?; let daemon = manager - .start(&["/bin/sleep", "1000"]) + .start( + &[ + OsStr::new("/usr/bin/obnam-server"), + OsStr::new(&config_filename), + ], + Path::new("server.out"), + Path::new("server.log"), + ) .map_err(ObnamServerError::Daemon)?; Ok(Self { tempdir, chunks, daemon: Some(daemon), + url: format!("https://localhost:{}", port), }) } + pub fn url(&self) -> String { + self.url.clone() + } + pub fn stop(&mut self) { self.daemon.take(); } @@ -115,7 +135,9 @@ impl ServerConfig { } fn write(&self, filename: &Path) -> Result<(), ObnamServerError> { - std::fs::write(filename, serde_yaml::to_string(self).unwrap()) + let config = serde_yaml::to_string(self).unwrap(); + debug!("server config:\n{}\n(end config)", config); + std::fs::write(filename, &config) .map_err(|err| ObnamServerError::WriteConfig(filename.to_path_buf(), err))?; Ok(()) } |