diff --git a/polkadot/runtime/src/runtime/governance.rs b/polkadot/runtime/src/runtime/governance.rs index 9138a3eddf..80620d578f 100644 --- a/polkadot/runtime/src/runtime/governance.rs +++ b/polkadot/runtime/src/runtime/governance.rs @@ -189,7 +189,7 @@ mod tests { assert!(!session::validators().into_iter().position(|v| &v == &one).is_none()); // Block 1: Make proposal. Approve it. Era length changes. - with_env(|e| e.block_number = 1); + system::testing::set_block_number(1); public::propose(&one, &Proposal::StakingSetSessionsPerEra(2)); public::approve(&two, 1); staking::internal::check_new_era(); @@ -212,13 +212,13 @@ mod tests { assert!(!session::validators().into_iter().position(|v| &v == &one).is_none()); // Block 1: Make proposal. Fail it. - with_env(|e| e.block_number = 1); + system::testing::set_block_number(1); public::propose(&one, &Proposal::StakingSetSessionsPerEra(2)); staking::internal::check_new_era(); assert_eq!(staking::era_length(), 1); // Block 2: Make proposal. Approve it. It should change era length. - with_env(|e| e.block_number = 2); + system::testing::set_block_number(2); public::propose(&one, &Proposal::StakingSetSessionsPerEra(2)); public::approve(&two, 2); staking::internal::check_new_era(); @@ -241,7 +241,7 @@ mod tests { assert!(!session::validators().into_iter().position(|v| &v == &one).is_none()); // Block 1: Make proposal. Will have only 1 vote. No change. - with_env(|e| e.block_number = 1); + system::testing::set_block_number(1); public::propose(&one, &Proposal::StakingSetSessionsPerEra(2)); staking::internal::check_new_era(); assert_eq!(staking::era_length(), 1); @@ -264,7 +264,7 @@ mod tests { assert!(!session::validators().into_iter().position(|v| &v == &one).is_none()); // Block 1: Make proposal. Will have only 1 vote. No change. - with_env(|e| e.block_number = 1); + system::testing::set_block_number(1); public::propose(&one, &Proposal::StakingSetSessionsPerEra(2)); public::approve(&two, 0); staking::internal::check_new_era(); @@ -288,7 +288,7 @@ mod tests { assert!(!session::validators().into_iter().position(|v| &v == &one).is_none()); // Block 1: Make proposal. Will have only 1 vote. No change. - with_env(|e| e.block_number = 1); + system::testing::set_block_number(1); public::propose(&one, &Proposal::StakingSetSessionsPerEra(2)); public::approve(&two, 1); public::approve(&two, 1); @@ -313,7 +313,7 @@ mod tests { assert!(!session::validators().into_iter().position(|v| &v == &one).is_none()); // Block 1: Make proposal. Will have only 1 vote. No change. - with_env(|e| e.block_number = 1); + system::testing::set_block_number(1); public::propose(&one, &Proposal::StakingSetSessionsPerEra(2)); public::propose(&two, &Proposal::StakingSetSessionsPerEra(2)); staking::internal::check_new_era(); @@ -337,7 +337,7 @@ mod tests { assert!(!session::validators().into_iter().position(|v| &v == &one).is_none()); // Block 1: Make proposal. Will have only 1 vote. No change. - with_env(|e| e.block_number = 1); + system::testing::set_block_number(1); public::approve(&two, 1); staking::internal::check_new_era(); assert_eq!(staking::era_length(), 1); @@ -361,7 +361,7 @@ mod tests { assert!(!session::validators().into_iter().position(|v| &v == &one).is_none()); // Block 1: Make proposal. Will have only 1 vote. No change. - with_env(|e| e.block_number = 1); + system::testing::set_block_number(1); public::propose(&one, &Proposal::StakingSetSessionsPerEra(2)); public::approve(&four, 1); staking::internal::check_new_era(); diff --git a/polkadot/runtime/src/runtime/session.rs b/polkadot/runtime/src/runtime/session.rs index 01a5f78bbc..4eb5bf5055 100644 --- a/polkadot/runtime/src/runtime/session.rs +++ b/polkadot/runtime/src/runtime/session.rs @@ -217,46 +217,46 @@ mod tests { let mut t = simple_setup(); with_externalities(&mut t, || { // Block 1: Change to length 3; no visible change. - with_env(|e| e.block_number = 1); + system::testing::set_block_number(1); set_length(3); check_rotate_session(); assert_eq!(length(), 2); assert_eq!(current_index(), 0); // Block 2: Length now changed to 3. Index incremented. - with_env(|e| e.block_number = 2); + system::testing::set_block_number(2); set_length(3); check_rotate_session(); assert_eq!(length(), 3); assert_eq!(current_index(), 1); // Block 3: Length now changed to 3. Index incremented. - with_env(|e| e.block_number = 3); + system::testing::set_block_number(3); check_rotate_session(); assert_eq!(length(), 3); assert_eq!(current_index(), 1); // Block 4: Change to length 2; no visible change. - with_env(|e| e.block_number = 4); + system::testing::set_block_number(4); set_length(2); check_rotate_session(); assert_eq!(length(), 3); assert_eq!(current_index(), 1); // Block 5: Length now changed to 2. Index incremented. - with_env(|e| e.block_number = 5); + system::testing::set_block_number(5); check_rotate_session(); assert_eq!(length(), 2); assert_eq!(current_index(), 2); // Block 6: No change. - with_env(|e| e.block_number = 6); + system::testing::set_block_number(6); check_rotate_session(); assert_eq!(length(), 2); assert_eq!(current_index(), 2); // Block 7: Next index. - with_env(|e| e.block_number = 7); + system::testing::set_block_number(7); check_rotate_session(); assert_eq!(length(), 2); assert_eq!(current_index(), 3); @@ -268,17 +268,17 @@ mod tests { let mut t = simple_setup(); with_externalities(&mut t, || { // Block 1: No change - with_env(|e| e.block_number = 1); + system::testing::set_block_number(1); check_rotate_session(); assert_eq!(consensus::authorities(), vec![[11u8; 32], [21u8; 32]]); // Block 2: Session rollover, but no change. - with_env(|e| e.block_number = 2); + system::testing::set_block_number(2); check_rotate_session(); assert_eq!(consensus::authorities(), vec![[11u8; 32], [21u8; 32]]); // Block 3: Set new key for validator 2; no visible change. - with_env(|e| e.block_number = 3); + system::testing::set_block_number(3); set_key(&[20; 32], &[22; 32]); assert_eq!(consensus::authorities(), vec![[11u8; 32], [21u8; 32]]); @@ -286,7 +286,7 @@ mod tests { assert_eq!(consensus::authorities(), vec![[11u8; 32], [21u8; 32]]); // Block 4: Session rollover, authority 2 changes. - with_env(|e| e.block_number = 4); + system::testing::set_block_number(4); check_rotate_session(); assert_eq!(consensus::authorities(), vec![[11u8; 32], [22u8; 32]]); }); diff --git a/polkadot/runtime/src/runtime/staking.rs b/polkadot/runtime/src/runtime/staking.rs index cca0a92718..7ed94b9202 100644 --- a/polkadot/runtime/src/runtime/staking.rs +++ b/polkadot/runtime/src/runtime/staking.rs @@ -310,7 +310,7 @@ mod tests { assert_eq!(session::validators(), vec![[10u8; 32], [20u8; 32]]); // Block 1: Add three validators. No obvious change. - with_env(|e| e.block_number = 1); + system::testing::set_block_number(1); stake(&one); stake(&two); stake(&four); @@ -318,39 +318,39 @@ mod tests { assert_eq!(session::validators(), vec![[10u8; 32], [20u8; 32]]); // Block 2: New validator set now. - with_env(|e| e.block_number = 2); + system::testing::set_block_number(2); check_new_era(); assert_eq!(session::validators(), vec![four.clone(), two.clone()]); // Block 3: Unstake highest, introduce another staker. No change yet. - with_env(|e| e.block_number = 3); + system::testing::set_block_number(3); stake(&three); unstake(&four); check_new_era(); // Block 4: New era - validators change. - with_env(|e| e.block_number = 4); + system::testing::set_block_number(4); check_new_era(); assert_eq!(session::validators(), vec![three.clone(), two.clone()]); // Block 5: Transfer stake from highest to lowest. No change yet. - with_env(|e| e.block_number = 5); + system::testing::set_block_number(5); transfer(&four, &one, 40); check_new_era(); // Block 6: Lowest now validator. - with_env(|e| e.block_number = 6); + system::testing::set_block_number(6); check_new_era(); assert_eq!(session::validators(), vec![one.clone(), three.clone()]); // Block 7: Unstake three. No change yet. - with_env(|e| e.block_number = 7); + system::testing::set_block_number(7); unstake(&three); check_new_era(); assert_eq!(session::validators(), vec![one.clone(), three.clone()]); // Block 8: Back to one and two. - with_env(|e| e.block_number = 8); + system::testing::set_block_number(8); check_new_era(); assert_eq!(session::validators(), vec![one.clone(), two.clone()]); }); @@ -369,21 +369,21 @@ mod tests { assert_eq!(current_era(), 0u64); // Block 1: No change. - with_env(|e| e.block_number = 1); + system::testing::set_block_number(1); check_new_era(); assert_eq!(sessions_per_era(), 2u64); assert_eq!(last_era_length_change(), 0u64); assert_eq!(current_era(), 0u64); // Block 2: Simple era change. - with_env(|e| e.block_number = 2); + system::testing::set_block_number(2); check_new_era(); assert_eq!(sessions_per_era(), 2u64); assert_eq!(last_era_length_change(), 0u64); assert_eq!(current_era(), 1u64); // Block 3: Schedule an era length change; no visible changes. - with_env(|e| e.block_number = 3); + system::testing::set_block_number(3); set_sessions_per_era(3); check_new_era(); assert_eq!(sessions_per_era(), 2u64); @@ -391,28 +391,28 @@ mod tests { assert_eq!(current_era(), 1u64); // Block 4: Era change kicks in. - with_env(|e| e.block_number = 4); + system::testing::set_block_number(4); check_new_era(); assert_eq!(sessions_per_era(), 3u64); assert_eq!(last_era_length_change(), 4u64); assert_eq!(current_era(), 2u64); // Block 5: No change. - with_env(|e| e.block_number = 5); + system::testing::set_block_number(5); check_new_era(); assert_eq!(sessions_per_era(), 3u64); assert_eq!(last_era_length_change(), 4u64); assert_eq!(current_era(), 2u64); // Block 6: No change. - with_env(|e| e.block_number = 6); + system::testing::set_block_number(6); check_new_era(); assert_eq!(sessions_per_era(), 3u64); assert_eq!(last_era_length_change(), 4u64); assert_eq!(current_era(), 2u64); // Block 7: Era increment. - with_env(|e| e.block_number = 7); + system::testing::set_block_number(7); check_new_era(); assert_eq!(sessions_per_era(), 3u64); assert_eq!(last_era_length_change(), 4u64); diff --git a/polkadot/runtime/src/runtime/system.rs b/polkadot/runtime/src/runtime/system.rs index c7972c949a..935f801924 100644 --- a/polkadot/runtime/src/runtime/system.rs +++ b/polkadot/runtime/src/runtime/system.rs @@ -264,6 +264,15 @@ fn info_expect_equal_hash(given: &Hash, expected: &Hash) { } } +#[cfg(any(feature = "std", test))] +pub mod testing { + use super::*; + + pub fn set_block_number(n: BlockNumber) { + with_env(|e| e.block_number = n); + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm index 7072339a07..3b3fb8f78c 100644 Binary files a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm and b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm differ diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm index 57be086703..cb08a3c72b 100644 Binary files a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm and b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm differ