Skip to content

Commit

Permalink
1953 defensive testing extrinsic (#1998)
Browse files Browse the repository at this point in the history
# Description

The `trigger_defensive` call has been added to the `root-testing`
pallet. The idea is to have this pallet running on `Rococo/Westend` and
use it to verify if the runtime monitoring works end-to-end.

To accomplish this, `trigger_defensive` dispatches an event when it is
called.

Closes #1953

# Checklist

- [x] My PR includes a detailed description as outlined in the
"Description" section above
- [ ] My PR follows the [labeling requirements](CONTRIBUTING.md#Process)
of this project (at minimum one label for `T`
  required)
- [ ] I have made corresponding changes to the documentation (if
applicable)
- [ ] I have added tests that prove my fix is effective or that my
feature works (if applicable)

You can remove the "Checklist" section once all have been checked. Thank
you for your contribution!

✄
-----------------------------------------------------------------------------

---------

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
  • Loading branch information
adelarja and ggwpez authored Oct 31, 2023
1 parent 64f4b15 commit 6e2f94f
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 9 deletions.
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions polkadot/runtime/rococo/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ pallet-vesting = { path = "../../../substrate/frame/vesting", default-features =
pallet-whitelist = { path = "../../../substrate/frame/whitelist", default-features = false }
pallet-xcm = { path = "../../xcm/pallet-xcm", default-features = false }
pallet-xcm-benchmarks = { path = "../../xcm/pallet-xcm-benchmarks", default-features = false, optional = true }
pallet-root-testing = { path = "../../../substrate/frame/root-testing", default-features = false }

frame-benchmarking = { path = "../../../substrate/frame/benchmarking", default-features = false, optional = true }
frame-try-runtime = { path = "../../../substrate/frame/try-runtime", default-features = false, optional = true }
Expand Down Expand Up @@ -161,6 +162,7 @@ std = [
"pallet-ranked-collective/std",
"pallet-recovery/std",
"pallet-referenda/std",
"pallet-root-testing/std",
"pallet-scheduler/std",
"pallet-session/std",
"pallet-society/std",
Expand Down Expand Up @@ -290,6 +292,7 @@ try-runtime = [
"pallet-ranked-collective/try-runtime",
"pallet-recovery/try-runtime",
"pallet-referenda/try-runtime",
"pallet-root-testing/try-runtime",
"pallet-scheduler/try-runtime",
"pallet-session/try-runtime",
"pallet-society/try-runtime",
Expand Down
7 changes: 7 additions & 0 deletions polkadot/runtime/rococo/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1230,6 +1230,10 @@ impl pallet_sudo::Config for Runtime {
type WeightInfo = weights::pallet_sudo::WeightInfo<Runtime>;
}

impl pallet_root_testing::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
}

impl pallet_asset_rate::Config for Runtime {
type WeightInfo = weights::pallet_asset_rate::WeightInfo<Runtime>;
type RuntimeEvent = RuntimeEvent;
Expand Down Expand Up @@ -1368,6 +1372,9 @@ construct_runtime! {
// State trie migration pallet, only temporary.
StateTrieMigration: pallet_state_trie_migration = 254,

// Root testing pallet.
RootTesting: pallet_root_testing::{Pallet, Call, Storage, Event<T>} = 249,

// Sudo.
Sudo: pallet_sudo::{Pallet, Call, Storage, Event<T>, Config<T>} = 255,
}
Expand Down
3 changes: 3 additions & 0 deletions polkadot/runtime/westend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ pallet-vesting = { path = "../../../substrate/frame/vesting", default-features =
pallet-whitelist = { path = "../../../substrate/frame/whitelist", default-features = false }
pallet-xcm = { path = "../../xcm/pallet-xcm", default-features = false }
pallet-xcm-benchmarks = { path = "../../xcm/pallet-xcm-benchmarks", default-features = false, optional = true }
pallet-root-testing = { path = "../../../substrate/frame/root-testing", default-features = false }

frame-benchmarking = { path = "../../../substrate/frame/benchmarking", default-features = false, optional = true }
frame-try-runtime = { path = "../../../substrate/frame/try-runtime", default-features = false, optional = true }
Expand Down Expand Up @@ -177,6 +178,7 @@ std = [
"pallet-proxy/std",
"pallet-recovery/std",
"pallet-referenda/std",
"pallet-root-testing/std",
"pallet-scheduler/std",
"pallet-session-benchmarking?/std",
"pallet-session/std",
Expand Down Expand Up @@ -315,6 +317,7 @@ try-runtime = [
"pallet-proxy/try-runtime",
"pallet-recovery/try-runtime",
"pallet-referenda/try-runtime",
"pallet-root-testing/try-runtime",
"pallet-scheduler/try-runtime",
"pallet-session/try-runtime",
"pallet-society/try-runtime",
Expand Down
7 changes: 7 additions & 0 deletions polkadot/runtime/westend/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1349,6 +1349,10 @@ impl pallet_nomination_pools::Config for Runtime {
type MaxPointsToBalance = MaxPointsToBalance;
}

impl pallet_root_testing::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
}

parameter_types! {
// The deposit configuration for the singed migration. Specially if you want to allow any signed account to do the migration (see `SignedFilter`, these deposits should be high)
pub const MigrationSignedDepositPerItem: Balance = 1 * CENTS;
Expand Down Expand Up @@ -1483,6 +1487,9 @@ construct_runtime! {

// Asset rate.
AssetRate: pallet_asset_rate::{Pallet, Call, Storage, Event<T>} = 101,

// Root testing pallet.
RootTesting: pallet_root_testing::{Pallet, Call, Storage, Event<T>} = 102,
}
}

Expand Down
4 changes: 3 additions & 1 deletion substrate/bin/node/runtime/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1014,7 +1014,9 @@ impl pallet_remark::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
}

impl pallet_root_testing::Config for Runtime {}
impl pallet_root_testing::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
}

parameter_types! {
pub const LaunchPeriod: BlockNumber = 28 * 24 * 60 * MINUTES;
Expand Down
24 changes: 21 additions & 3 deletions substrate/frame/root-testing/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@

#![cfg_attr(not(feature = "std"), no_std)]

use frame_support::dispatch::DispatchResult;
use sp_runtime::Perbill;
use frame_support::{dispatch::DispatchResult, sp_runtime::Perbill};

pub use pallet::*;

Expand All @@ -36,11 +35,21 @@ pub mod pallet {
use frame_system::pallet_prelude::*;

#[pallet::config]
pub trait Config: frame_system::Config {}
pub trait Config: frame_system::Config {
/// The overarching event type.
type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
}

#[pallet::pallet]
pub struct Pallet<T>(_);

#[pallet::event]
#[pallet::generate_deposit(pub(super) fn deposit_event)]
pub enum Event<T: Config> {
/// Event dispatched when the trigger_defensive extrinsic is called.
DefensiveTestCall,
}

#[pallet::call]
impl<T: Config> Pallet<T> {
/// A dispatch that will fill the block weight up to the given ratio.
Expand All @@ -50,5 +59,14 @@ pub mod pallet {
ensure_root(origin)?;
Ok(())
}

#[pallet::call_index(1)]
#[pallet::weight(0)]
pub fn trigger_defensive(origin: OriginFor<T>) -> DispatchResult {
ensure_root(origin)?;
frame_support::defensive!("root_testing::trigger_defensive was called.");
Self::deposit_event(Event::DefensiveTestCall);
Ok(())
}
}
}
6 changes: 3 additions & 3 deletions substrate/frame/support/src/traits/misc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,15 @@ impl VariantCount for () {
macro_rules! defensive {
() => {
frame_support::__private::log::error!(
target: "runtime",
target: "runtime::defensive",
"{}",
$crate::traits::DEFENSIVE_OP_PUBLIC_ERROR
);
debug_assert!(false, "{}", $crate::traits::DEFENSIVE_OP_INTERNAL_ERROR);
};
($error:expr $(,)?) => {
frame_support::__private::log::error!(
target: "runtime",
target: "runtime::defensive",
"{}: {:?}",
$crate::traits::DEFENSIVE_OP_PUBLIC_ERROR,
$error
Expand All @@ -72,7 +72,7 @@ macro_rules! defensive {
};
($error:expr, $proof:expr $(,)?) => {
frame_support::__private::log::error!(
target: "runtime",
target: "runtime::defensive",
"{}: {:?}: {:?}",
$crate::traits::DEFENSIVE_OP_PUBLIC_ERROR,
$error,
Expand Down
6 changes: 4 additions & 2 deletions substrate/frame/utility/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ frame_support::construct_runtime!(
System: frame_system::{Pallet, Call, Config<T>, Storage, Event<T>},
Timestamp: pallet_timestamp::{Call, Inherent},
Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>},
RootTesting: pallet_root_testing::{Pallet, Call, Storage},
RootTesting: pallet_root_testing::{Pallet, Call, Storage, Event<T>},
Council: pallet_collective::<Instance1>,
Utility: utility::{Pallet, Call, Event},
Example: example::{Pallet, Call},
Expand Down Expand Up @@ -187,7 +187,9 @@ impl pallet_balances::Config for Test {
type MaxHolds = ();
}

impl pallet_root_testing::Config for Test {}
impl pallet_root_testing::Config for Test {
type RuntimeEvent = RuntimeEvent;
}

impl pallet_timestamp::Config for Test {
type Moment = u64;
Expand Down

0 comments on commit 6e2f94f

Please sign in to comment.