use std::env;
use std::sync::LazyLock;
use crate::Config;
static TEST_CONFIG: LazyLock<TestConfig> = LazyLock::new(|| {
let admin_user = get_env_value("RSO_TEST_ADMIN_USER", "sys");
let admin_password = get_env_value("RSO_TEST_ADMIN_PASSWORD", "");
let user = get_env_value("RSO_TEST_MAIN_USER", "rsotest");
let password = get_env_value("RSO_TEST_MAIN_PASSWORD", "");
let connect_string = get_env_value("RSO_TEST_CONNECT_STRING", "");
let base_admin_config = Config::default()
.set_credentials(&admin_user, &admin_password)
.set_connect_string(&connect_string)
.expect("Invalid connect string");
let admin_config = if admin_user.to_lowercase() == "sys" {
base_admin_config.set_auth_mode(crate::AUTH_MODE_SYSDBA)
} else {
base_admin_config
};
crate::connect(admin_config.clone())
.expect("Unable to establish connection as test administrator.");
let config = Config::default()
.set_credentials(&user, &password)
.set_connect_string(&connect_string)
.expect("Invalid connect string");
TestConfig {
admin_user,
admin_password,
user,
password,
connect_string,
admin_config,
config,
}
});
#[doc(hidden)]
pub struct TestConfig {
pub admin_user: String,
pub admin_password: String,
pub user: String,
pub password: String,
pub connect_string: String,
pub admin_config: Config,
pub config: Config,
}
fn get_env_value(name: &str, default_value: &str) -> String {
let value = env::var_os(name);
if value.is_none() {
if !default_value.is_empty() {
return default_value.to_string();
}
panic!("Value for environment variable {name} is not set!");
}
value.unwrap().to_str().unwrap().to_string()
}
#[doc(hidden)]
pub fn get_test_config() -> &'static TestConfig {
&TEST_CONFIG
}