Skip to content

Commit

Permalink
add test
Browse files Browse the repository at this point in the history
  • Loading branch information
pepoviola committed Jan 31, 2025
1 parent eb88ff6 commit 77dbdb3
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 28 deletions.
67 changes: 44 additions & 23 deletions crates/configuration/src/parachain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -979,6 +979,50 @@ mod tests {
assert!(!parachain_config.is_evm_based());
}

#[test]
fn parachain_config_builder_should_works_when_genesis_state_generator_contains_args() {
let parachain_config = ParachainConfigBuilder::new(Default::default())
.with_id(1000)
.with_chain("myparachain")
.with_genesis_state_generator("generator_state --simple-flag --flag=value")
.with_collator(|collator| {
collator
.with_name("collator")
.with_command("command")
.validator(true)
})
.build()
.unwrap();

assert_eq!(
parachain_config
.genesis_state_generator()
.unwrap()
.cmd()
.as_str(),
"generator_state"
);

assert_eq!(
parachain_config
.genesis_state_generator()
.unwrap()
.args()
.len(),
2
);

let args = parachain_config.genesis_state_generator().unwrap().args();

assert_eq!(
args,
&vec![
Arg::Flag("--simple-flag".into()),
Arg::Option("--flag".into(), "value".into())
]
);
}

#[test]
fn parachain_config_builder_should_fails_and_returns_an_error_if_chain_is_invalid() {
let errors = ParachainConfigBuilder::new(Default::default())
Expand Down Expand Up @@ -1094,29 +1138,6 @@ mod tests {
);
}

#[test]
fn parachain_config_builder_should_fails_and_returns_an_error_if_genesis_state_generator_is_invalid(
) {
let errors = ParachainConfigBuilder::new(Default::default())
.with_id(1000)
.with_chain("myparachain")
.with_genesis_state_generator("invalid command")
.with_collator(|collator| {
collator
.with_name("collator")
.with_command("command")
.validator(true)
})
.build()
.unwrap_err();

assert_eq!(errors.len(), 1);
assert_eq!(
errors.first().unwrap().to_string(),
"parachain[1000].genesis_state_generator: 'invalid command' shouldn't contains whitespace"
);
}

#[test]
fn parachain_config_builder_should_fails_and_returns_an_error_if_bootnodes_addresses_are_invalid(
) {
Expand Down
3 changes: 3 additions & 0 deletions crates/configuration/src/shared/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ pub enum ConversionError {

#[error("can't be empty")]
CantBeEmpty,

#[error("deserialize error")]
DeserializeError(String),
}

/// A validation error for shared types across fields.
Expand Down
20 changes: 15 additions & 5 deletions crates/configuration/src/shared/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ use std::{
use anyhow::anyhow;
use lazy_static::lazy_static;
use regex::Regex;
use serde::{de, Deserialize, Deserializer, Serialize};
use serde::{
de::{self, IntoDeserializer},
Deserialize, Deserializer, Serialize,
};
use support::constants::{INFAILABLE, PREFIX_CANT_BE_NONE, SHOULD_COMPILE, THIS_IS_A_BUG};
use url::Url;

Expand Down Expand Up @@ -235,10 +238,17 @@ impl TryFrom<&str> for CommandWithCustomArgs {
}

let mut parts = value.split_whitespace().collect::<Vec<&str>>();
Ok(Self(
parts.remove(0).try_into().unwrap(),
parts.into_iter().map(|x| x.into()).collect(),
))
let cmd = parts.remove(0).try_into().unwrap();
let args = parts
.iter()
.map(|x| {
Arg::deserialize(x.into_deserializer()).map_err(|_: serde_json::Error| {
ConversionError::DeserializeError(String::from(*x))
})
})
.collect::<Result<Vec<Arg>, _>>()?;

Ok(Self(cmd, args))
}
}
impl Default for CommandWithCustomArgs {
Expand Down

0 comments on commit 77dbdb3

Please sign in to comment.