Check for duplicate members in genesis of pallet-membership & pallet-collective (#9325)

* Ensure no duplicate members in collective and membership genesis

* Test build panics

* Massage comments

* Use btreeset
This commit is contained in:
Zeke Mostov
2021-07-13 01:01:11 -07:00
committed by GitHub
parent 56b8a89ea1
commit 28bc39de85
2 changed files with 30 additions and 1 deletions
+16 -1
View File
@@ -211,7 +211,13 @@ decl_storage! {
add_extra_genesis {
config(phantom): sp_std::marker::PhantomData<I>;
config(members): Vec<T::AccountId>;
build(|config| Module::<T, I>::initialize_members(&config.members))
build(|config| {
use sp_std::collections::btree_set::BTreeSet;
let members_set: BTreeSet<_> = config.members.iter().collect();
assert!(members_set.len() == config.members.len(), "Members cannot contain duplicate accounts.");
Module::<T, I>::initialize_members(&config.members)
});
}
}
@@ -1837,4 +1843,13 @@ mod tests {
]);
})
}
#[test]
#[should_panic(expected = "Members cannot contain duplicate accounts.")]
fn genesis_build_panics_with_duplicate_members() {
collective::GenesisConfig::<Test> {
members: vec![1, 2, 3, 1],
phantom: Default::default(),
}.build_storage().unwrap();
}
}
+14
View File
@@ -84,6 +84,11 @@ decl_storage! {
config(phantom): sp_std::marker::PhantomData<I>;
build(|config: &Self| {
let mut members = config.members.clone();
use sp_std::collections::btree_set::BTreeSet;
let members_set: BTreeSet<_> = config.members.iter().collect();
assert!(members_set.len() == config.members.len(), "Members cannot contain duplicate accounts.");
members.sort();
T::MembershipInitialized::initialize_members(&members);
<Members<T, I>>::put(members);
@@ -706,4 +711,13 @@ mod tests {
assert_eq!(PRIME.with(|m| *m.borrow()), Membership::prime());
});
}
#[test]
#[should_panic(expected = "Members cannot contain duplicate accounts.")]
fn genesis_build_panics_with_duplicate_members() {
pallet_membership::GenesisConfig::<Test> {
members: vec![1, 2, 3, 1],
phantom: Default::default(),
}.build_storage().unwrap();
}
}