use crate::adapters::ssh::SshCredentials;
use crate::domain::backup::BackupConfig;
use crate::domain::grafana::GrafanaConfig;
use crate::domain::https::HttpsConfig;
use crate::domain::prometheus::PrometheusConfig;
use crate::domain::provider::ProviderConfig;
use crate::domain::tracker::TrackerConfig;
use crate::domain::{EnvironmentName, InstanceName};
#[derive(Debug, Clone)]
pub struct EnvironmentParams {
pub environment_name: EnvironmentName,
pub instance_name: InstanceName,
pub provider_config: ProviderConfig,
pub ssh_credentials: SshCredentials,
pub ssh_port: u16,
pub tracker_config: TrackerConfig,
pub prometheus_config: Option<PrometheusConfig>,
pub grafana_config: Option<GrafanaConfig>,
pub https_config: Option<HttpsConfig>,
pub backup_config: Option<BackupConfig>,
}
impl EnvironmentParams {
#[must_use]
#[allow(clippy::too_many_arguments)]
pub fn new(
environment_name: EnvironmentName,
instance_name: InstanceName,
provider_config: ProviderConfig,
ssh_credentials: SshCredentials,
ssh_port: u16,
tracker_config: TrackerConfig,
prometheus_config: Option<PrometheusConfig>,
grafana_config: Option<GrafanaConfig>,
https_config: Option<HttpsConfig>,
backup_config: Option<BackupConfig>,
) -> Self {
Self {
environment_name,
instance_name,
provider_config,
ssh_credentials,
ssh_port,
tracker_config,
prometheus_config,
grafana_config,
https_config,
backup_config,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::domain::provider::LxdConfig;
use crate::domain::ProfileName;
use crate::shared::Username;
use std::path::PathBuf;
fn sample_ssh_credentials() -> SshCredentials {
let project_root = env!("CARGO_MANIFEST_DIR");
SshCredentials::new(
PathBuf::from(format!("{project_root}/fixtures/testing_rsa")),
PathBuf::from(format!("{project_root}/fixtures/testing_rsa.pub")),
Username::new("torrust").unwrap(),
)
}
fn sample_tracker_config() -> TrackerConfig {
TrackerConfig::default()
}
#[test]
fn it_should_create_environment_params_with_all_fields() {
let params = EnvironmentParams::new(
EnvironmentName::new("test-env").unwrap(),
InstanceName::new("test-instance".to_string()).unwrap(),
ProviderConfig::Lxd(LxdConfig {
profile_name: ProfileName::new("lxd-test").unwrap(),
}),
sample_ssh_credentials(),
22,
sample_tracker_config(),
None,
None,
None,
None,
);
assert_eq!(params.environment_name.as_str(), "test-env");
assert_eq!(params.instance_name.as_str(), "test-instance");
assert_eq!(params.ssh_port, 22);
}
#[test]
fn it_should_provide_named_field_access() {
let params = EnvironmentParams::new(
EnvironmentName::new("prod").unwrap(),
InstanceName::new("prod-vm".to_string()).unwrap(),
ProviderConfig::Lxd(LxdConfig {
profile_name: ProfileName::new("lxd-prod").unwrap(),
}),
sample_ssh_credentials(),
2222,
sample_tracker_config(),
None,
None,
None,
None,
);
let _name: &EnvironmentName = ¶ms.environment_name;
let _instance: &InstanceName = ¶ms.instance_name;
let _provider: &ProviderConfig = ¶ms.provider_config;
let _ssh: &SshCredentials = ¶ms.ssh_credentials;
let _port: u16 = params.ssh_port;
let _tracker: &TrackerConfig = ¶ms.tracker_config;
let _prometheus: &Option<PrometheusConfig> = ¶ms.prometheus_config;
let _grafana: &Option<GrafanaConfig> = ¶ms.grafana_config;
let _https: &Option<HttpsConfig> = ¶ms.https_config;
}
}