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