Skip to content
Snippets Groups Projects
Commit e2ded849 authored by Éloïs's avatar Éloïs
Browse files

[tests] conf: test fn get_module_conf_and_keys()

parent 996d49cf
No related branches found
No related tags found
1 merge request!256load conf from env vars as a priority
...@@ -27,6 +27,7 @@ serde_json = "1.0.*" ...@@ -27,6 +27,7 @@ serde_json = "1.0.*"
unwrap = "1.2.1" unwrap = "1.2.1"
[dev-dependencies] [dev-dependencies]
durs-module = { path = "../module", features = ["module-test"] }
maplit = "1.0.2" maplit = "1.0.2"
once_cell = "1.3.1" once_cell = "1.3.1"
......
...@@ -54,9 +54,7 @@ impl ModulesConf { ...@@ -54,9 +54,7 @@ impl ModulesConf {
) -> Result<(M::ModuleConf, Option<M::ModuleUserConf>), ModuleConfError> { ) -> Result<(M::ModuleConf, Option<M::ModuleUserConf>), ModuleConfError> {
let file_module_user_conf: M::ModuleUserConf = let file_module_user_conf: M::ModuleUserConf =
if let Some(module_conf_json) = module_conf_json { if let Some(module_conf_json) = module_conf_json {
let file_module_user_conf_opt: Option<M::ModuleUserConf> = serde_json::from_str(module_conf_json.to_string().as_str())?
serde_json::from_str(module_conf_json.to_string().as_str())?;
file_module_user_conf_opt.unwrap_or_default()
} else { } else {
M::ModuleUserConf::default() M::ModuleUserConf::default()
}; };
...@@ -66,7 +64,7 @@ impl ModulesConf { ...@@ -66,7 +64,7 @@ impl ModulesConf {
M::generate_module_conf( M::generate_module_conf(
currency_name, currency_name,
global_conf, global_conf,
Some(file_module_user_conf.merge(env_module_user_conf)), Some(env_module_user_conf.merge(file_module_user_conf)),
) )
} }
...@@ -117,18 +115,17 @@ pub fn get_module_conf_and_keys<M: DursModule<DuRsConf, DursMsg>>( ...@@ -117,18 +115,17 @@ pub fn get_module_conf_and_keys<M: DursModule<DuRsConf, DursMsg>>(
mod tests { mod tests {
use super::*; use super::*;
use crate::global_conf::v2::DuRsGlobalConfV2;
use crate::global_conf::DuRsGlobalConf;
use dup_crypto::keys::{ed25519, KeyPairEnum};
use durs_module::module_test::*;
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
use serde_json::json;
use std::sync::Mutex; use std::sync::Mutex;
// Empty mutex used to ensure that only one test runs at a time // Empty mutex used to ensure that only one test runs at a time
static MUTEX: Lazy<Mutex<()>> = Lazy::new(|| Mutex::new(())); static MUTEX: Lazy<Mutex<()>> = Lazy::new(|| Mutex::new(()));
#[derive(Debug, Default, Deserialize, PartialEq)]
struct TestModuleUserConf {
field1: Option<String>,
field2: Option<usize>,
}
#[inline] #[inline]
fn prefix() -> String { fn prefix() -> String {
format!("{}MODULE_TEST_", constants::DURS_ENV_PREFIX) format!("{}MODULE_TEST_", constants::DURS_ENV_PREFIX)
...@@ -143,13 +140,117 @@ mod tests { ...@@ -143,13 +140,117 @@ mod tests {
} }
} }
fn keypairs() -> DuniterKeyPairs {
DuniterKeyPairs {
network_keypair: KeyPairEnum::Ed25519(ed25519::Ed25519KeyPair::generate_random()),
member_keypair: None,
}
}
#[test]
fn test_get_empty_module_conf() -> Result<(), ModuleConfError> {
let _lock = MUTEX.lock().expect("MUTEX poisoned");
clear_env_vars();
let (confs, keys): ModuleConfsAndKeys<ModuleTest<DuRsConf, DursMsg>> =
get_module_conf_and_keys::<ModuleTest<DuRsConf, DursMsg>>(
None,
&DuRsGlobalConf::V2(DuRsGlobalConfV2::default()),
None,
keypairs(),
)?;
assert_eq!(
(
ModuleTestConf::default(),
Some(ModuleTestUserConf::default())
),
confs,
);
assert_eq!(RequiredKeysContent::None, keys,);
Ok(())
}
#[test]
fn test_get_module_conf_from_file() -> Result<(), ModuleConfError> {
let _lock = MUTEX.lock().expect("MUTEX poisoned");
clear_env_vars();
let json_conf = json!({
"field1": "toto",
"field2": 123,
});
let (confs, _): ModuleConfsAndKeys<ModuleTest<DuRsConf, DursMsg>> =
get_module_conf_and_keys::<ModuleTest<DuRsConf, DursMsg>>(
None,
&DuRsGlobalConf::V2(DuRsGlobalConfV2::default()),
Some(json_conf),
keypairs(),
)?;
assert_eq!(
(
ModuleTestConf {
field1: "toto".to_owned(),
field2: 123,
},
Some(ModuleTestUserConf {
field1: Some("toto".to_owned()),
field2: Some(123),
})
),
confs,
);
Ok(())
}
#[test]
fn test_get_module_conf_from_env_and_file() -> Result<(), ModuleConfError> {
let _lock = MUTEX.lock().expect("MUTEX poisoned");
clear_env_vars();
std::env::set_var(&format!("{}FIELD2", prefix()), "456");
let json_conf = json!({
"field1": "toto",
"field2": 123,
});
let (confs, _): ModuleConfsAndKeys<ModuleTest<DuRsConf, DursMsg>> =
get_module_conf_and_keys::<ModuleTest<DuRsConf, DursMsg>>(
None,
&DuRsGlobalConf::V2(DuRsGlobalConfV2::default()),
Some(json_conf),
keypairs(),
)?;
assert_eq!(
(
ModuleTestConf {
field1: "toto".to_owned(),
field2: 456,
},
Some(ModuleTestUserConf {
field1: Some("toto".to_owned()),
field2: Some(456),
})
),
confs,
);
Ok(())
}
#[test] #[test]
fn test_env_module_conf_without_env_vars() -> Result<(), ModuleConfError> { fn test_env_module_conf_without_env_vars() -> Result<(), ModuleConfError> {
let _lock = MUTEX.lock().expect("MUTEX poisoned"); let _lock = MUTEX.lock().expect("MUTEX poisoned");
clear_env_vars(); clear_env_vars();
assert_eq!( assert_eq!(
TestModuleUserConf::default(), ModuleTestUserConf::default(),
ModulesConf::get_env_module_user_conf(ModuleStaticName("module_test"))?, ModulesConf::get_env_module_user_conf(ModuleStaticName("module_test"))?,
); );
...@@ -165,7 +266,7 @@ mod tests { ...@@ -165,7 +266,7 @@ mod tests {
std::env::set_var(&format!("{}FIELD2", prefix()), "4"); std::env::set_var(&format!("{}FIELD2", prefix()), "4");
assert_eq!( assert_eq!(
TestModuleUserConf { ModuleTestUserConf {
field1: Some("toto".to_owned()), field1: Some("toto".to_owned()),
field2: Some(4), field2: Some(4),
}, },
...@@ -184,7 +285,7 @@ mod tests { ...@@ -184,7 +285,7 @@ mod tests {
std::env::set_var(&format!("{}FIELD2", prefix()), "toto"); std::env::set_var(&format!("{}FIELD2", prefix()), "toto");
if let Err(ModuleConfError::EnvyErr(_)) = ModulesConf::get_env_module_user_conf::< if let Err(ModuleConfError::EnvyErr(_)) = ModulesConf::get_env_module_user_conf::<
TestModuleUserConf, ModuleTestUserConf,
>(ModuleStaticName("module_test")) >(ModuleStaticName("module_test"))
{ {
Ok(()) Ok(())
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#![deny( #![deny(
clippy::option_unwrap_used, clippy::option_unwrap_used,
clippy::result_unwrap_used,
missing_docs, missing_docs,
missing_debug_implementations, missing_debug_implementations,
missing_copy_implementations, missing_copy_implementations,
......
...@@ -46,8 +46,10 @@ impl Merge for ModuleTestUserConf { ...@@ -46,8 +46,10 @@ impl Merge for ModuleTestUserConf {
/// Module test config /// Module test config
#[derive(Clone, Debug, Default, Deserialize, PartialEq)] #[derive(Clone, Debug, Default, Deserialize, PartialEq)]
pub struct ModuleTestConf { pub struct ModuleTestConf {
field1: String, /// Field 1
field2: usize, pub field1: String,
/// Field 2
pub field2: usize,
} }
#[derive(StructOpt, Debug, Clone)] #[derive(StructOpt, Debug, Clone)]
...@@ -79,12 +81,18 @@ impl<DC: DursConfTrait, M: ModuleMessage> DursModule<DC, M> for ModuleTest<DC, M ...@@ -79,12 +81,18 @@ impl<DC: DursConfTrait, M: ModuleMessage> DursModule<DC, M> for ModuleTest<DC, M
fn generate_module_conf( fn generate_module_conf(
_currency_name: Option<&CurrencyName>, _currency_name: Option<&CurrencyName>,
_global_conf: &<DC as DursConfTrait>::GlobalConf, _global_conf: &<DC as DursConfTrait>::GlobalConf,
_module_user_conf: Option<Self::ModuleUserConf>, module_user_conf_opt: Option<Self::ModuleUserConf>,
) -> Result<(Self::ModuleConf, Option<Self::ModuleUserConf>), ModuleConfError> { ) -> Result<(Self::ModuleConf, Option<Self::ModuleUserConf>), ModuleConfError> {
Ok(( let module_conf = if let Some(module_user_conf) = module_user_conf_opt.clone() {
ModuleTestConf::default(), ModuleTestConf {
Some(ModuleTestUserConf::default()), field1: module_user_conf.field1.unwrap_or_default(),
)) field2: module_user_conf.field2.unwrap_or_default(),
}
} else {
ModuleTestConf::default()
};
Ok((module_conf, module_user_conf_opt))
} }
fn exec_subcommand( fn exec_subcommand(
_soft_meta_datas: &SoftwareMetaDatas<DC>, _soft_meta_datas: &SoftwareMetaDatas<DC>,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment