Skip to content

Commit 084220c

Browse files
committed
Error when staking settings are missing a value
1 parent 464c99f commit 084220c

File tree

1 file changed

+47
-9
lines changed

1 file changed

+47
-9
lines changed

common/src/chain/config/regtest.rs

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,9 @@ impl FromStr for GenesisStakingSettings {
109109
type Err = GenesisStakingSettingsInputErrors;
110110

111111
fn from_str(settings: &str) -> Result<Self, Self::Err> {
112-
let mut settings_parts = settings
112+
let settings_parts = settings
113113
.split(',')
114-
.filter_map(|s| s.split_once(':'))
114+
.filter_map(|s| s.split_once(':').or(if s.is_empty() { None } else { Some((s, "")) }))
115115
.map(|(k, v)| (k.trim(), v.trim()))
116116
.collect::<HashMap<&str, &str>>();
117117

@@ -162,13 +162,25 @@ impl FromStr for GenesisStakingSettings {
162162

163163
impl Display for GenesisStakingSettings {
164164
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
165-
write!(
166-
f,
167-
"pool_id:{},stake_private_key:{},vrf_private_key:{}",
168-
self.pool_id().hex_encode(),
169-
self.stake_private_key().hex_encode(),
170-
self.vrf_private_key().hex_encode()
171-
)
165+
let mut values = vec![];
166+
167+
let pool_id = self.pool_id().hex_encode();
168+
let stake_private_key = self.stake_private_key().hex_encode();
169+
let vrf_private_key = self.vrf_private_key().hex_encode();
170+
171+
if !pool_id.is_empty() {
172+
values.push(format!("pool_id:{}", pool_id))
173+
}
174+
175+
if !stake_private_key.is_empty() {
176+
values.push(format!("stake_private_key:{}", stake_private_key))
177+
}
178+
179+
if !vrf_private_key.is_empty() {
180+
values.push(format!("vrf_private_key:{}", vrf_private_key))
181+
}
182+
183+
write!(f, "{}", values.join(","))
172184
}
173185
}
174186

@@ -263,6 +275,32 @@ mod test {
263275
);
264276
}
265277

278+
#[test]
279+
fn missing_value() {
280+
let result = GenesisStakingSettings::from_str("key");
281+
282+
assert_eq!(
283+
result,
284+
Err(GenesisStakingSettingsInputErrors::UnknownParameter(
285+
"key".to_string()
286+
)),
287+
"Missing value was valid"
288+
);
289+
}
290+
291+
#[test]
292+
fn empty_value() {
293+
let result = GenesisStakingSettings::from_str("key:");
294+
295+
assert_eq!(
296+
result,
297+
Err(GenesisStakingSettingsInputErrors::UnknownParameter(
298+
"key".to_string()
299+
)),
300+
"Empty value was valid"
301+
);
302+
}
303+
266304
#[test]
267305
fn invalid_pool_id() {
268306
let result = GenesisStakingSettings::from_str("pool_id:invalid_value");

0 commit comments

Comments
 (0)