mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-20 04:41:04 +00:00
prep council election pallet for being dissolved (#11790)
* prep council election pallet for being dissolved + make it temporarily bounded * fix tests * fix * Update frame/elections-phragmen/src/lib.rs * fix bench?
This commit is contained in:
@@ -22,17 +22,12 @@
|
||||
use super::*;
|
||||
|
||||
use frame_benchmarking::{account, benchmarks, whitelist, BenchmarkError, BenchmarkResult};
|
||||
use frame_support::{
|
||||
dispatch::{DispatchResultWithPostInfo, UnfilteredDispatchable},
|
||||
traits::OnInitialize,
|
||||
};
|
||||
use frame_support::{dispatch::DispatchResultWithPostInfo, traits::OnInitialize};
|
||||
use frame_system::RawOrigin;
|
||||
|
||||
use crate::Pallet as Elections;
|
||||
|
||||
const BALANCE_FACTOR: u32 = 250;
|
||||
const MAX_VOTERS: u32 = 500;
|
||||
const MAX_CANDIDATES: u32 = 200;
|
||||
|
||||
type Lookup<T> = <<T as frame_system::Config>::Lookup as StaticLookup>::Source;
|
||||
|
||||
@@ -345,38 +340,6 @@ benchmarks! {
|
||||
))?;
|
||||
}
|
||||
|
||||
// -- Root ones
|
||||
#[extra] // this calls into phragmen and consumes a full block for now.
|
||||
remove_member_without_replacement_extra {
|
||||
// worse case is when we remove a member and we have no runner as a replacement. This
|
||||
// triggers phragmen again. The only parameter is how many candidates will compete for the
|
||||
// new slot.
|
||||
let c in 1 .. MAX_CANDIDATES;
|
||||
clean::<T>();
|
||||
|
||||
// fill only desired members. no runners-up.
|
||||
let all_members = fill_seats_up_to::<T>(T::DesiredMembers::get())?;
|
||||
assert_eq!(<Elections<T>>::members().len() as u32, T::DesiredMembers::get());
|
||||
|
||||
// submit a new one to compensate, with self-vote.
|
||||
let replacements = submit_candidates_with_self_vote::<T>(c, "new_candidate")?;
|
||||
|
||||
// create some voters for these replacements.
|
||||
distribute_voters::<T>(replacements, MAX_VOTERS, MAXIMUM_VOTE)?;
|
||||
|
||||
let to_remove = as_lookup::<T>(all_members[0].clone());
|
||||
}: remove_member(RawOrigin::Root, to_remove, false)
|
||||
verify {
|
||||
// must still have the desired number of members members.
|
||||
assert_eq!(<Elections<T>>::members().len() as u32, T::DesiredMembers::get());
|
||||
#[cfg(test)]
|
||||
{
|
||||
// reset members in between benchmark tests.
|
||||
use crate::tests::MEMBERS;
|
||||
MEMBERS.with(|m| *m.borrow_mut() = vec![]);
|
||||
}
|
||||
}
|
||||
|
||||
remove_member_with_replacement {
|
||||
// easy case. We have a runner up. Nothing will have that much of an impact. m will be
|
||||
// number of members and runners. There is always at least one runner.
|
||||
@@ -385,7 +348,7 @@ benchmarks! {
|
||||
|
||||
let _ = fill_seats_up_to::<T>(m)?;
|
||||
let removing = as_lookup::<T>(<Elections<T>>::members_ids()[0].clone());
|
||||
}: remove_member(RawOrigin::Root, removing, true)
|
||||
}: remove_member(RawOrigin::Root, removing, true, false)
|
||||
verify {
|
||||
// must still have enough members.
|
||||
assert_eq!(<Elections<T>>::members().len() as u32, T::DesiredMembers::get());
|
||||
@@ -397,39 +360,6 @@ benchmarks! {
|
||||
}
|
||||
}
|
||||
|
||||
remove_member_wrong_refund {
|
||||
// The root call by mistake indicated that this will have no replacement, while it has!
|
||||
// this has now consumed a lot of weight and need to refund.
|
||||
let m = T::DesiredMembers::get() + T::DesiredRunnersUp::get();
|
||||
clean::<T>();
|
||||
|
||||
let _ = fill_seats_up_to::<T>(m)?;
|
||||
let removing = as_lookup::<T>(<Elections<T>>::members_ids()[0].clone());
|
||||
let who = T::Lookup::lookup(removing.clone()).expect("member was added above");
|
||||
let call = Call::<T>::remove_member { who: removing, has_replacement: false }.encode();
|
||||
}: {
|
||||
assert_eq!(
|
||||
<Call<T> as Decode>::decode(&mut &*call)
|
||||
.expect("call is encoded above, encoding must be correct")
|
||||
.dispatch_bypass_filter(RawOrigin::Root.into())
|
||||
.unwrap_err()
|
||||
.error,
|
||||
Error::<T>::InvalidReplacement.into(),
|
||||
);
|
||||
}
|
||||
verify {
|
||||
// must still have enough members.
|
||||
assert_eq!(<Elections<T>>::members().len() as u32, T::DesiredMembers::get());
|
||||
// on fail, `who` must still be a member
|
||||
assert!(<Elections<T>>::members_ids().contains(&who));
|
||||
#[cfg(test)]
|
||||
{
|
||||
// reset members in between benchmark tests.
|
||||
use crate::tests::MEMBERS;
|
||||
MEMBERS.with(|m| *m.borrow_mut() = vec![]);
|
||||
}
|
||||
}
|
||||
|
||||
clean_defunct_voters {
|
||||
// total number of voters.
|
||||
let v in (MAX_VOTERS / 2) .. MAX_VOTERS;
|
||||
@@ -439,7 +369,7 @@ benchmarks! {
|
||||
// remove any previous stuff.
|
||||
clean::<T>();
|
||||
|
||||
let all_candidates = submit_candidates::<T>(v, "candidates")?;
|
||||
let all_candidates = submit_candidates::<T>(MAX_CANDIDATES, "candidates")?;
|
||||
distribute_voters::<T>(all_candidates, v, MAXIMUM_VOTE)?;
|
||||
|
||||
// all candidates leave.
|
||||
@@ -474,7 +404,7 @@ benchmarks! {
|
||||
let votes_per_voter = (e / v).min(MAXIMUM_VOTE as u32);
|
||||
|
||||
let all_candidates = submit_candidates_with_self_vote::<T>(c, "candidates")?;
|
||||
let _ = distribute_voters::<T>(all_candidates, v, votes_per_voter as usize)?;
|
||||
let _ = distribute_voters::<T>(all_candidates, v.saturating_sub(c), votes_per_voter as usize)?;
|
||||
}: {
|
||||
<Elections<T>>::on_initialize(T::TermDuration::get());
|
||||
}
|
||||
@@ -503,7 +433,11 @@ benchmarks! {
|
||||
let votes_per_voter = e / fixed_v;
|
||||
|
||||
let all_candidates = submit_candidates_with_self_vote::<T>(c, "candidates")?;
|
||||
let _ = distribute_voters::<T>(all_candidates, fixed_v, votes_per_voter as usize)?;
|
||||
let _ = distribute_voters::<T>(
|
||||
all_candidates,
|
||||
fixed_v - c,
|
||||
votes_per_voter as usize,
|
||||
)?;
|
||||
}: {
|
||||
<Elections<T>>::on_initialize(T::TermDuration::get());
|
||||
}
|
||||
@@ -525,7 +459,7 @@ benchmarks! {
|
||||
#[extra]
|
||||
election_phragmen_v {
|
||||
let v in 4 .. 16;
|
||||
let fixed_c = MAX_CANDIDATES;
|
||||
let fixed_c = MAX_CANDIDATES / 10;
|
||||
let fixed_e = 64;
|
||||
clean::<T>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user