diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/test-manager/src/config.rs | 37 | ||||
| -rw-r--r-- | test/test-manager/src/main.rs | 7 |
2 files changed, 35 insertions, 9 deletions
diff --git a/test/test-manager/src/config.rs b/test/test-manager/src/config.rs index 1d7c33021c..585e6c75df 100644 --- a/test/test-manager/src/config.rs +++ b/test/test-manager/src/config.rs @@ -10,12 +10,16 @@ use std::{ #[derive(thiserror::Error, Debug)] pub enum Error { + #[error("Could not find config dir")] + FindConfigDir, + #[error("Could not create config dir")] + CreateConfigDir(#[source] io::Error), #[error("Failed to read config")] - Read(io::Error), + Read(#[source] io::Error), #[error("Failed to parse config")] InvalidConfig(#[from] serde_json::Error), #[error("Failed to write config")] - Write(io::Error), + Write(#[source] io::Error), } #[derive(Default, Serialize, Deserialize, Clone)] @@ -72,7 +76,32 @@ pub struct ConfigFile { impl ConfigFile { /// Make config changes and save them to disk - pub async fn load_or_default<P: AsRef<Path>>(path: P) -> Result<Self, Error> { + pub async fn load_or_default() -> Result<Self, Error> { + Self::load_or_default_inner(Self::get_config_path()?).await + } + + /// Get configuration file path + fn get_config_path() -> Result<PathBuf, Error> { + Ok(Self::get_config_dir()?.join("config.json")) + } + + /// Get configuration file directory + fn get_config_dir() -> Result<PathBuf, Error> { + let dir = dirs::config_dir() + .ok_or(Error::FindConfigDir)? + .join("mullvad-test"); + Ok(dir) + } + + /// Create configuration file directory if it does not exist + async fn ensure_config_dir() -> Result<(), Error> { + tokio::fs::create_dir_all(Self::get_config_dir()?) + .await + .map_err(Error::CreateConfigDir) + } + + /// Make config changes and save them to disk + async fn load_or_default_inner<P: AsRef<Path>>(path: P) -> Result<Self, Error> { Ok(Self { path: path.as_ref().to_path_buf(), config: Config::load_or_default(path).await?, @@ -81,6 +110,8 @@ impl ConfigFile { /// Make config changes and save them to disk pub async fn edit(&mut self, edit: impl FnOnce(&mut Config)) -> Result<(), Error> { + Self::ensure_config_dir().await?; + edit(&mut self.config); self.config.save(&self.path).await } diff --git a/test/test-manager/src/main.rs b/test/test-manager/src/main.rs index 8dd56e6a03..79d239f4d0 100644 --- a/test/test-manager/src/main.rs +++ b/test/test-manager/src/main.rs @@ -151,12 +151,7 @@ async fn main() -> Result<()> { #[cfg(target_os = "linux")] container::relaunch_with_rootlesskit(args.get_vnc_port()).await; - let config_path = dirs::config_dir() - .context("Config directory not found. Can not load VM config")? - .join("mullvad-test") - .join("config.json"); - - let mut config = config::ConfigFile::load_or_default(config_path) + let mut config = config::ConfigFile::load_or_default() .await .context("Failed to load config")?; match args.cmd { |
