mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-15 18:31:05 +00:00
Final tests.
This commit is contained in:
@@ -43,7 +43,7 @@ pub fn enact_proposal(proposal: Proposal) {
|
|||||||
staking::privileged::force_new_era()
|
staking::privileged::force_new_era()
|
||||||
}
|
}
|
||||||
Proposal::DemocracyCancelReferendum(ref_index) => {
|
Proposal::DemocracyCancelReferendum(ref_index) => {
|
||||||
democracy::privileged::clear_referendum(ref_index)
|
democracy::privileged::cancel_referendum(ref_index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,8 +190,11 @@ pub mod internal {
|
|||||||
pub fn end_block(now: BlockNumber) {
|
pub fn end_block(now: BlockNumber) {
|
||||||
while let Some((proposal, proposal_hash)) = take_proposal_if_expiring_at(now) {
|
while let Some((proposal, proposal_hash)) = take_proposal_if_expiring_at(now) {
|
||||||
let tally = take_tally(&proposal_hash);
|
let tally = take_tally(&proposal_hash);
|
||||||
if let (&Proposal::DemocracyCancelReferendum(ref_index), (_, 0 ,0)) = (&proposal, tally) {
|
println!("Executing proposal {:?} {:?}", proposal, tally);
|
||||||
democracy::privileged::clear_referendum(ref_index);
|
if let &Proposal::DemocracyCancelReferendum(ref_index) = &proposal {
|
||||||
|
if let (_, 0, 0) = tally {
|
||||||
|
democracy::privileged::cancel_referendum(ref_index);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if tally.0 > tally.1 + tally.2 {
|
if tally.0 > tally.1 + tally.2 {
|
||||||
kill_veto_of(&proposal_hash);
|
kill_veto_of(&proposal_hash);
|
||||||
@@ -211,7 +214,7 @@ pub mod testing {
|
|||||||
use runtime_io::{twox_128, TestExternalities};
|
use runtime_io::{twox_128, TestExternalities};
|
||||||
use keyring::Keyring::{Alice, Bob, Charlie};
|
use keyring::Keyring::{Alice, Bob, Charlie};
|
||||||
use codec::Joiner;
|
use codec::Joiner;
|
||||||
use runtime::council;
|
use runtime::{council, democracy};
|
||||||
|
|
||||||
pub fn externalities() -> TestExternalities {
|
pub fn externalities() -> TestExternalities {
|
||||||
let expiry: BlockNumber = 10;
|
let expiry: BlockNumber = 10;
|
||||||
@@ -222,7 +225,8 @@ pub mod testing {
|
|||||||
(Charlie.into(), expiry)
|
(Charlie.into(), expiry)
|
||||||
]),
|
]),
|
||||||
twox_128(COOLOFF_PERIOD).to_vec() => vec![].and(&2u64),
|
twox_128(COOLOFF_PERIOD).to_vec() => vec![].and(&2u64),
|
||||||
twox_128(VOTING_PERIOD).to_vec() => vec![].and(&1u64)
|
twox_128(VOTING_PERIOD).to_vec() => vec![].and(&1u64),
|
||||||
|
twox_128(democracy::VOTING_PERIOD).to_vec() => vec![].and(&3u64)
|
||||||
];
|
];
|
||||||
council::testing::externalities()
|
council::testing::externalities()
|
||||||
.into_iter().chain(extras.into_iter()).collect()
|
.into_iter().chain(extras.into_iter()).collect()
|
||||||
@@ -264,6 +268,68 @@ mod tests {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn referendum_cancellation_should_work_when_unanimous() {
|
||||||
|
with_externalities(&mut new_test_ext(), || {
|
||||||
|
with_env(|e| e.block_number = 1);
|
||||||
|
let proposal = Proposal::StakingSetBondingDuration(42);
|
||||||
|
democracy::privileged::start_referendum(proposal.clone(), VoteThreshold::SuperMajorityApprove);
|
||||||
|
assert_eq!(democracy::active_referendums(), vec![(0, 4, proposal, VoteThreshold::SuperMajorityApprove)]);
|
||||||
|
|
||||||
|
let cancellation = Proposal::DemocracyCancelReferendum(0);
|
||||||
|
let hash = cancellation.blake2_256();
|
||||||
|
public::propose(Alice, &cancellation);
|
||||||
|
public::vote(Bob, &hash, true);
|
||||||
|
public::vote(Charlie, &hash, true);
|
||||||
|
assert_eq!(proposals(), vec![(2, hash)]);
|
||||||
|
internal::end_block(1);
|
||||||
|
|
||||||
|
with_env(|e| e.block_number = 2);
|
||||||
|
internal::end_block(2);
|
||||||
|
assert_eq!(democracy::active_referendums(), vec![]);
|
||||||
|
assert_eq!(staking::bonding_duration(), 0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn referendum_cancellation_should_fail_when_not_unanimous() {
|
||||||
|
with_externalities(&mut new_test_ext(), || {
|
||||||
|
with_env(|e| e.block_number = 1);
|
||||||
|
let proposal = Proposal::StakingSetBondingDuration(42);
|
||||||
|
democracy::privileged::start_referendum(proposal.clone(), VoteThreshold::SuperMajorityApprove);
|
||||||
|
|
||||||
|
let cancellation = Proposal::DemocracyCancelReferendum(0);
|
||||||
|
let hash = cancellation.blake2_256();
|
||||||
|
public::propose(Alice, &cancellation);
|
||||||
|
public::vote(Bob, &hash, true);
|
||||||
|
public::vote(Charlie, &hash, false);
|
||||||
|
internal::end_block(1);
|
||||||
|
|
||||||
|
with_env(|e| e.block_number = 2);
|
||||||
|
internal::end_block(2);
|
||||||
|
assert_eq!(democracy::active_referendums(), vec![(0, 4, proposal, VoteThreshold::SuperMajorityApprove)]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn referendum_cancellation_should_fail_when_abstentions() {
|
||||||
|
with_externalities(&mut new_test_ext(), || {
|
||||||
|
with_env(|e| e.block_number = 1);
|
||||||
|
let proposal = Proposal::StakingSetBondingDuration(42);
|
||||||
|
democracy::privileged::start_referendum(proposal.clone(), VoteThreshold::SuperMajorityApprove);
|
||||||
|
|
||||||
|
let cancellation = Proposal::DemocracyCancelReferendum(0);
|
||||||
|
let hash = cancellation.blake2_256();
|
||||||
|
public::propose(Alice, &cancellation);
|
||||||
|
public::vote(Bob, &hash, true);
|
||||||
|
internal::end_block(1);
|
||||||
|
|
||||||
|
with_env(|e| e.block_number = 2);
|
||||||
|
internal::end_block(2);
|
||||||
|
assert_eq!(democracy::active_referendums(), vec![(0, 4, proposal, VoteThreshold::SuperMajorityApprove)]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn veto_should_work() {
|
fn veto_should_work() {
|
||||||
with_externalities(&mut new_test_ext(), || {
|
with_externalities(&mut new_test_ext(), || {
|
||||||
@@ -326,8 +392,7 @@ mod tests {
|
|||||||
with_env(|e| e.block_number = 4);
|
with_env(|e| e.block_number = 4);
|
||||||
internal::end_block(4);
|
internal::end_block(4);
|
||||||
assert_eq!(proposals().len(), 0);
|
assert_eq!(proposals().len(), 0);
|
||||||
assert_eq!(democracy::active_referendums(), vec![(0, 5, Proposal::StakingSetBondingDuration(42), VoteThreshold::SimpleMajority)]);
|
assert_eq!(democracy::active_referendums(), vec![(0, 7, Proposal::StakingSetBondingDuration(42), VoteThreshold::SimpleMajority)]);
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -390,7 +455,7 @@ mod tests {
|
|||||||
with_env(|e| e.block_number = 2);
|
with_env(|e| e.block_number = 2);
|
||||||
internal::end_block(2);
|
internal::end_block(2);
|
||||||
assert_eq!(proposals().len(), 0);
|
assert_eq!(proposals().len(), 0);
|
||||||
assert_eq!(democracy::active_referendums(), vec![(0, 3, Proposal::StakingSetBondingDuration(42), VoteThreshold::SuperMajorityAgainst)]);
|
assert_eq!(democracy::active_referendums(), vec![(0, 5, Proposal::StakingSetBondingDuration(42), VoteThreshold::SuperMajorityAgainst)]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -407,7 +472,7 @@ mod tests {
|
|||||||
with_env(|e| e.block_number = 2);
|
with_env(|e| e.block_number = 2);
|
||||||
internal::end_block(2);
|
internal::end_block(2);
|
||||||
assert_eq!(proposals().len(), 0);
|
assert_eq!(proposals().len(), 0);
|
||||||
assert_eq!(democracy::active_referendums(), vec![(0, 3, Proposal::StakingSetBondingDuration(42), VoteThreshold::SimpleMajority)]);
|
assert_eq!(democracy::active_referendums(), vec![(0, 5, Proposal::StakingSetBondingDuration(42), VoteThreshold::SimpleMajority)]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -233,11 +233,8 @@ pub mod privileged {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Remove a referendum.
|
/// Remove a referendum.
|
||||||
pub fn clear_referendum(ref_index: ReferendumIndex) {
|
pub fn cancel_referendum(ref_index: ReferendumIndex) {
|
||||||
for v in voters_for(ref_index) {
|
clear_referendum(ref_index);
|
||||||
storage::kill(&(v, ref_index).to_keyed_vec(VOTE_OF));
|
|
||||||
}
|
|
||||||
storage::kill(&ref_index.to_keyed_vec(VOTERS_FOR));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,9 +244,7 @@ pub mod internal {
|
|||||||
use dispatch::enact_proposal;
|
use dispatch::enact_proposal;
|
||||||
|
|
||||||
/// Current era is ending; we should finish up any proposals.
|
/// Current era is ending; we should finish up any proposals.
|
||||||
pub fn end_block() {
|
pub fn end_block(now: BlockNumber) {
|
||||||
let now = system::block_number();
|
|
||||||
|
|
||||||
// pick out another public referendum if it's time.
|
// pick out another public referendum if it's time.
|
||||||
if now % launch_period() == 0 {
|
if now % launch_period() == 0 {
|
||||||
let mut public_props = public_props();
|
let mut public_props = public_props();
|
||||||
@@ -274,7 +269,7 @@ pub mod internal {
|
|||||||
for (index, _, proposal, vote_threshold) in maturing_referendums_at(now) {
|
for (index, _, proposal, vote_threshold) in maturing_referendums_at(now) {
|
||||||
let (approve, against) = tally(index);
|
let (approve, against) = tally(index);
|
||||||
let total_stake = staking::total_stake();
|
let total_stake = staking::total_stake();
|
||||||
privileged::clear_referendum(index);
|
clear_referendum(index);
|
||||||
if vote_threshold.approved(approve, against, total_stake) {
|
if vote_threshold.approved(approve, against, total_stake) {
|
||||||
enact_proposal(proposal);
|
enact_proposal(proposal);
|
||||||
}
|
}
|
||||||
@@ -299,6 +294,15 @@ fn inject_referendum(
|
|||||||
ref_index
|
ref_index
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Remove all info on a referendum.
|
||||||
|
fn clear_referendum(ref_index: ReferendumIndex) {
|
||||||
|
storage::kill(&ref_index.to_keyed_vec(REFERENDUM_INFO_OF));
|
||||||
|
storage::kill(&ref_index.to_keyed_vec(VOTERS_FOR));
|
||||||
|
for v in voters_for(ref_index) {
|
||||||
|
storage::kill(&(v, ref_index).to_keyed_vec(VOTE_OF));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod testing {
|
pub mod testing {
|
||||||
use super::*;
|
use super::*;
|
||||||
@@ -399,7 +403,7 @@ mod tests {
|
|||||||
with_externalities(&mut t, || {
|
with_externalities(&mut t, || {
|
||||||
with_env(|e| e.block_number = 1);
|
with_env(|e| e.block_number = 1);
|
||||||
public::propose(&alice, &Proposal::StakingSetSessionsPerEra(2), 1u64);
|
public::propose(&alice, &Proposal::StakingSetSessionsPerEra(2), 1u64);
|
||||||
democracy::internal::end_block();
|
democracy::internal::end_block(system::block_number());
|
||||||
|
|
||||||
with_env(|e| e.block_number = 2);
|
with_env(|e| e.block_number = 2);
|
||||||
let r = 0;
|
let r = 0;
|
||||||
@@ -410,7 +414,7 @@ mod tests {
|
|||||||
assert_eq!(vote_of(&alice, r), Some(true));
|
assert_eq!(vote_of(&alice, r), Some(true));
|
||||||
assert_eq!(tally(r), (10, 0));
|
assert_eq!(tally(r), (10, 0));
|
||||||
|
|
||||||
democracy::internal::end_block();
|
democracy::internal::end_block(system::block_number());
|
||||||
staking::internal::check_new_era();
|
staking::internal::check_new_era();
|
||||||
|
|
||||||
assert_eq!(staking::era_length(), 2u64);
|
assert_eq!(staking::era_length(), 2u64);
|
||||||
@@ -451,7 +455,7 @@ mod tests {
|
|||||||
public::second(&eve, 0);
|
public::second(&eve, 0);
|
||||||
public::second(&eve, 0);
|
public::second(&eve, 0);
|
||||||
public::second(&eve, 0);
|
public::second(&eve, 0);
|
||||||
democracy::internal::end_block();
|
democracy::internal::end_block(system::block_number());
|
||||||
assert_eq!(staking::balance(&alice), 10u64);
|
assert_eq!(staking::balance(&alice), 10u64);
|
||||||
assert_eq!(staking::balance(&bob), 20u64);
|
assert_eq!(staking::balance(&bob), 20u64);
|
||||||
assert_eq!(staking::balance(&eve), 50u64);
|
assert_eq!(staking::balance(&eve), 50u64);
|
||||||
@@ -506,23 +510,23 @@ mod tests {
|
|||||||
public::propose(&alice, &Proposal::StakingSetBondingDuration(2), 2u64);
|
public::propose(&alice, &Proposal::StakingSetBondingDuration(2), 2u64);
|
||||||
public::propose(&alice, &Proposal::StakingSetBondingDuration(4), 4u64);
|
public::propose(&alice, &Proposal::StakingSetBondingDuration(4), 4u64);
|
||||||
public::propose(&alice, &Proposal::StakingSetBondingDuration(3), 3u64);
|
public::propose(&alice, &Proposal::StakingSetBondingDuration(3), 3u64);
|
||||||
democracy::internal::end_block();
|
democracy::internal::end_block(system::block_number());
|
||||||
|
|
||||||
with_env(|e| e.block_number = 1);
|
with_env(|e| e.block_number = 1);
|
||||||
public::vote(&alice, 0, true);
|
public::vote(&alice, 0, true);
|
||||||
democracy::internal::end_block();
|
democracy::internal::end_block(system::block_number());
|
||||||
staking::internal::check_new_era();
|
staking::internal::check_new_era();
|
||||||
assert_eq!(staking::bonding_duration(), 4u64);
|
assert_eq!(staking::bonding_duration(), 4u64);
|
||||||
|
|
||||||
with_env(|e| e.block_number = 2);
|
with_env(|e| e.block_number = 2);
|
||||||
public::vote(&alice, 1, true);
|
public::vote(&alice, 1, true);
|
||||||
democracy::internal::end_block();
|
democracy::internal::end_block(system::block_number());
|
||||||
staking::internal::check_new_era();
|
staking::internal::check_new_era();
|
||||||
assert_eq!(staking::bonding_duration(), 3u64);
|
assert_eq!(staking::bonding_duration(), 3u64);
|
||||||
|
|
||||||
with_env(|e| e.block_number = 3);
|
with_env(|e| e.block_number = 3);
|
||||||
public::vote(&alice, 2, true);
|
public::vote(&alice, 2, true);
|
||||||
democracy::internal::end_block();
|
democracy::internal::end_block(system::block_number());
|
||||||
staking::internal::check_new_era();
|
staking::internal::check_new_era();
|
||||||
assert_eq!(staking::bonding_duration(), 2u64);
|
assert_eq!(staking::bonding_duration(), 2u64);
|
||||||
});
|
});
|
||||||
@@ -542,13 +546,31 @@ mod tests {
|
|||||||
assert_eq!(vote_of(&alice, r), Some(true));
|
assert_eq!(vote_of(&alice, r), Some(true));
|
||||||
assert_eq!(tally(r), (10, 0));
|
assert_eq!(tally(r), (10, 0));
|
||||||
|
|
||||||
democracy::internal::end_block();
|
democracy::internal::end_block(system::block_number());
|
||||||
staking::internal::check_new_era();
|
staking::internal::check_new_era();
|
||||||
|
|
||||||
assert_eq!(staking::era_length(), 2u64);
|
assert_eq!(staking::era_length(), 2u64);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn cancel_referendum_should_work() {
|
||||||
|
let alice = Keyring::Alice.to_raw_public();
|
||||||
|
let mut t = new_test_ext();
|
||||||
|
|
||||||
|
with_externalities(&mut t, || {
|
||||||
|
with_env(|e| e.block_number = 1);
|
||||||
|
let r = inject_referendum(1, Proposal::StakingSetSessionsPerEra(2), VoteThreshold::SuperMajorityApprove);
|
||||||
|
public::vote(&alice, r, true);
|
||||||
|
privileged::cancel_referendum(r);
|
||||||
|
|
||||||
|
democracy::internal::end_block(system::block_number());
|
||||||
|
staking::internal::check_new_era();
|
||||||
|
|
||||||
|
assert_eq!(staking::era_length(), 1u64);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn simple_failing_should_work() {
|
fn simple_failing_should_work() {
|
||||||
let alice = Keyring::Alice.to_raw_public();
|
let alice = Keyring::Alice.to_raw_public();
|
||||||
@@ -563,7 +585,7 @@ mod tests {
|
|||||||
assert_eq!(vote_of(&alice, r), Some(false));
|
assert_eq!(vote_of(&alice, r), Some(false));
|
||||||
assert_eq!(tally(r), (0, 10));
|
assert_eq!(tally(r), (0, 10));
|
||||||
|
|
||||||
democracy::internal::end_block();
|
democracy::internal::end_block(system::block_number());
|
||||||
staking::internal::check_new_era();
|
staking::internal::check_new_era();
|
||||||
|
|
||||||
assert_eq!(staking::era_length(), 1u64);
|
assert_eq!(staking::era_length(), 1u64);
|
||||||
@@ -593,7 +615,7 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(tally(r), (110, 100));
|
assert_eq!(tally(r), (110, 100));
|
||||||
|
|
||||||
democracy::internal::end_block();
|
democracy::internal::end_block(system::block_number());
|
||||||
staking::internal::check_new_era();
|
staking::internal::check_new_era();
|
||||||
|
|
||||||
assert_eq!(staking::era_length(), 2u64);
|
assert_eq!(staking::era_length(), 2u64);
|
||||||
@@ -619,7 +641,7 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(tally(r), (60, 50));
|
assert_eq!(tally(r), (60, 50));
|
||||||
|
|
||||||
democracy::internal::end_block();
|
democracy::internal::end_block(system::block_number());
|
||||||
staking::internal::check_new_era();
|
staking::internal::check_new_era();
|
||||||
|
|
||||||
assert_eq!(staking::era_length(), 1u64);
|
assert_eq!(staking::era_length(), 1u64);
|
||||||
@@ -649,7 +671,7 @@ mod tests {
|
|||||||
|
|
||||||
assert_eq!(tally(r), (100, 50));
|
assert_eq!(tally(r), (100, 50));
|
||||||
|
|
||||||
democracy::internal::end_block();
|
democracy::internal::end_block(system::block_number());
|
||||||
staking::internal::check_new_era();
|
staking::internal::check_new_era();
|
||||||
|
|
||||||
assert_eq!(staking::era_length(), 2u64);
|
assert_eq!(staking::era_length(), 2u64);
|
||||||
|
|||||||
Reference in New Issue
Block a user