6 changed files with 166 additions and 107 deletions
@ -1,18 +1,152 @@ |
|||||||
use std::env; |
use std::env; |
||||||
use std::error::Error; |
|
||||||
use std::str::FromStr; |
use std::str::FromStr; |
||||||
|
use crate::log::expect_or_log; |
||||||
|
use crate::model::error::DeviceError; |
||||||
|
|
||||||
pub fn set(key: &str, val: &str) { |
pub fn set(key: &str, val: &str) { |
||||||
env::set_var(key, val); |
env::set_var(key, val); |
||||||
} |
} |
||||||
|
|
||||||
pub fn get(key: &str) -> Result<String, Box<dyn Error>> { |
pub fn get(key: &str) -> Result<String, DeviceError> { |
||||||
let ret = env::var(key)?; |
let ret = env::var(key)?; |
||||||
Ok(ret) |
Ok(ret) |
||||||
} |
} |
||||||
|
|
||||||
pub fn get_i64(key: &str) -> Result<i64, Box<dyn Error>> { |
pub fn get_i64(key: &str) -> Result<i64, DeviceError> { |
||||||
let str_env = env::var(key)?; |
let str_env = env::var(key)?; |
||||||
let ret = i64::from_str(&str_env)?; |
let ret = i64::from_str(&str_env)?; |
||||||
Ok(ret) |
Ok(ret) |
||||||
|
} |
||||||
|
|
||||||
|
pub fn get_prefix() -> String { |
||||||
|
let profile = expect_or_log(env::var("RUST_PROFILE"), "RUST_PROFILE is not set"); |
||||||
|
|
||||||
|
let prefix = match profile.as_str() { |
||||||
|
"dev" => "/dev", |
||||||
|
"local" => "/dev", |
||||||
|
"prod" => "/prod", |
||||||
|
_ => { |
||||||
|
expect_or_log(Err("Unexpected value"), &format!("Unexpected RUST_PROFILE value: {}", profile)) |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
prefix.to_string() |
||||||
|
} |
||||||
|
|
||||||
|
#[cfg(test)] |
||||||
|
mod tests { |
||||||
|
use super::*; |
||||||
|
use serial_test::serial; |
||||||
|
|
||||||
|
fn setup() { |
||||||
|
env::remove_var("RUST_PROFILE"); |
||||||
|
} |
||||||
|
|
||||||
|
fn teardown() { |
||||||
|
env::remove_var("RUST_PROFILE"); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
#[serial] |
||||||
|
fn test_set_and_get() { |
||||||
|
setup(); |
||||||
|
let key = "TEST_ENV_VAR"; |
||||||
|
let value = "test_value"; |
||||||
|
|
||||||
|
set(key, value); |
||||||
|
|
||||||
|
let result = get(key); |
||||||
|
assert!(result.is_ok()); |
||||||
|
assert_eq!(result.unwrap(), value); |
||||||
|
teardown(); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
#[serial] |
||||||
|
fn test_get_none_exist_ent_var() { |
||||||
|
setup(); |
||||||
|
let key = "NONE_EXIST_ENT_ENV_VAR"; |
||||||
|
|
||||||
|
env::remove_var(key); |
||||||
|
|
||||||
|
let result = get(key); |
||||||
|
assert!(result.is_err()); |
||||||
|
teardown(); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
#[serial] |
||||||
|
fn test_set_and_get_i64() { |
||||||
|
setup(); |
||||||
|
let key = "TEST_ENV_I64"; |
||||||
|
let value = "12345"; |
||||||
|
|
||||||
|
set(key, value); |
||||||
|
|
||||||
|
let result = get_i64(key); |
||||||
|
assert!(result.is_ok()); |
||||||
|
assert_eq!(result.unwrap(), 12345); |
||||||
|
teardown(); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
#[serial] |
||||||
|
fn test_get_i64_invalid_value() { |
||||||
|
setup(); |
||||||
|
let key = "TEST_ENV_I64_INVALID"; |
||||||
|
let value = "invalid_number"; |
||||||
|
|
||||||
|
set(key, value); |
||||||
|
|
||||||
|
let result = get_i64(key); |
||||||
|
assert!(result.is_err()); |
||||||
|
teardown(); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
#[serial] |
||||||
|
fn test_get_prefix_dev() { |
||||||
|
setup(); |
||||||
|
env::set_var("RUST_PROFILE", "dev"); |
||||||
|
assert_eq!(get_prefix(), "/dev"); |
||||||
|
teardown(); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
#[serial] |
||||||
|
fn test_get_prefix_prod() { |
||||||
|
setup(); |
||||||
|
env::set_var("RUST_PROFILE", "prod"); |
||||||
|
assert_eq!(get_prefix(), "/prod"); |
||||||
|
teardown(); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
#[serial] |
||||||
|
fn test_get_prefix_local() { |
||||||
|
setup(); |
||||||
|
env::set_var("RUST_PROFILE", "local"); |
||||||
|
assert_eq!(get_prefix(), "/dev"); |
||||||
|
teardown(); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
#[should_panic(expected = "Unexpected RUST_PROFILE value")] |
||||||
|
#[serial] |
||||||
|
fn test_get_prefix_unexpected_value() { |
||||||
|
setup(); |
||||||
|
let unexpected_profile = "abcdefg53546"; |
||||||
|
env::set_var("RUST_PROFILE", &unexpected_profile); |
||||||
|
get_prefix(); |
||||||
|
teardown(); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
#[should_panic(expected = "RUST_PROFILE is not set")] |
||||||
|
#[serial] |
||||||
|
fn test_get_prefix_not_set() { |
||||||
|
setup(); |
||||||
|
get_prefix(); |
||||||
|
teardown(); |
||||||
|
} |
||||||
} |
} |
||||||
Loading…
Reference in new issue