// Copyright 2020 Parity Technologies (UK) Ltd. // This file is part of Polkadot. // Polkadot is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Polkadot is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . //! Mocks for all the traits. use sp_io::TestExternalities; use sp_core::{H256}; use sp_runtime::{ Perbill, traits::{ BlakeTwo256, IdentityLookup, }, }; use primitives::v1::{BlockNumber, Header}; use frame_support::{ impl_outer_origin, impl_outer_dispatch, impl_outer_event, parameter_types, weights::Weight, traits::Randomness as RandomnessT, }; use crate::inclusion; /// A test runtime struct. #[derive(Clone, Eq, PartialEq)] pub struct Test; impl_outer_origin! { pub enum Origin for Test where system = system { } } impl_outer_dispatch! { pub enum Call for Test where origin: Origin { initializer::Initializer, } } impl_outer_event! { pub enum TestEvent for Test { system, inclusion, } } pub struct TestRandomness; impl RandomnessT for TestRandomness { fn random(_subject: &[u8]) -> H256 { Default::default() } } parameter_types! { pub const BlockHashCount: u32 = 250; pub const MaximumBlockWeight: Weight = 4 * 1024 * 1024; pub const MaximumBlockLength: u32 = 4 * 1024 * 1024; pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); } impl system::Trait for Test { type BaseCallFilter = (); type Origin = Origin; type Call = Call; type Index = u64; type BlockNumber = BlockNumber; type Hash = H256; type Hashing = BlakeTwo256; type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; type Event = TestEvent; type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); type BlockExecutionWeight = (); type ExtrinsicBaseWeight = (); type MaximumExtrinsicWeight = MaximumBlockWeight; type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); type ModuleToIndex = (); type AccountData = balances::AccountData; type OnNewAccount = (); type OnKilledAccount = (); type SystemWeightInfo = (); } impl crate::initializer::Trait for Test { type Randomness = TestRandomness; } impl crate::configuration::Trait for Test { } impl crate::paras::Trait for Test { } impl crate::scheduler::Trait for Test { } impl crate::inclusion::Trait for Test { type Event = TestEvent; } pub type System = system::Module; /// Mocked initializer. pub type Initializer = crate::initializer::Module; /// Mocked configuration. pub type Configuration = crate::configuration::Module; /// Mocked paras. pub type Paras = crate::paras::Module; /// Mocked scheduler. pub type Scheduler = crate::scheduler::Module; /// Mocked inclusion module. pub type Inclusion = crate::inclusion::Module; /// Create a new set of test externalities. pub fn new_test_ext(state: GenesisConfig) -> TestExternalities { let mut t = state.system.build_storage::().unwrap(); state.configuration.assimilate_storage(&mut t).unwrap(); state.paras.assimilate_storage(&mut t).unwrap(); t.into() } #[derive(Default)] pub struct GenesisConfig { pub system: system::GenesisConfig, pub configuration: crate::configuration::GenesisConfig, pub paras: crate::paras::GenesisConfig, }