This repository was archived by the owner on Nov 15, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
add integration tests to xcm-builder #3537
Merged
Merged
Changes from all commits
Commits
Show all changes
37 commits
Select commit
Hold shift + click to select a range
5018eb5
add integration tests to xcm-builder
apopiak 29b7b04
add an integration test for reserve_transfer_assets
apopiak ee9b9c7
add query holding and teleport tests
apopiak 7a09753
formatting
apopiak d1539f6
add to barrier doc comments and fix doc tests warnings
apopiak d9ebc77
use more realistic barrier for integration tests
apopiak ec426b9
improve imports
apopiak 32b67ca
adjust base xcm weight and existential deposit to be in line with Kusama
apopiak 7881628
remove AnyNetwork
apopiak 5e8507f
add more comments and remove unnecessary code
apopiak cea48f9
Merge branch 'apopiak/xcm-integration-tests' of github.com:paritytech…
apopiak 24b79ec
move mock into separate file
apopiak 4aba2d6
reduce imports
apopiak 114ef4e
update cargo.lock
apopiak 97fb7a8
remove reserve transfer test from xcm builder integration tests
apopiak 21a7e74
reword barrier doc comment
apopiak aababe1
elaborate on QueryHolding test scenario
apopiak 2b63830
add an integration test for reserve based transfers from parachain to…
apopiak eed0fbc
add teleport tests
apopiak dc2a1bf
fix failing teleport filter tests
apopiak 5dd3744
Update xcm/xcm-builder/src/integration_tests.rs
apopiak 3b63468
Update xcm/xcm-builder/src/integration_tests.rs
apopiak 26e7f53
Update xcm/xcm-builder/src/integration_tests.rs
apopiak 4bd50a7
Move integration tests to tests/ directory
KiChjang 75d0971
Merge remote-tracking branch 'origin/master' into apopiak/xcm-integra…
KiChjang f8a4847
Fix merge
KiChjang e3605c5
Replace All wildcard with a concrete seed amount
KiChjang 4266a94
Rename SEED_AMOUNT to REGISTER_AMOUNT
KiChjang 412ce69
Fix compilation error
KiChjang 72975eb
Check for teleport destination first before checking out assets
KiChjang 0d17e0a
Fix unit test
KiChjang 304fd94
Do not run tests in integration mock
KiChjang ab81960
Add a permissive assets filter for teleportation
KiChjang 2fba6af
Remove check for teleport location in InitiateTeleport XCM
KiChjang fd51b75
Remove defunct test
KiChjang 1f15e4b
Apply suggestions from code review
apopiak dcd947b
Reword comment
apopiak File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode
8000
characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,211 @@ | ||
// Copyright 2021 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 <http://www.gnu.org/licenses/>. | ||
|
||
use frame_support::{construct_runtime, parameter_types, traits::Everything, weights::Weight}; | ||
use sp_core::H256; | ||
use sp_runtime::{testing::Header, traits::IdentityLookup, AccountId32}; | ||
use sp_std::cell::RefCell; | ||
|
||
use polkadot_parachain::primitives::Id as ParaId; | ||
use polkadot_runtime_parachains::{configuration, origin, shared}; | ||
use xcm::latest::{opaque, prelude::*}; | ||
use xcm_executor::XcmExecutor; | ||
|
||
use xcm_builder::{ | ||
AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, | ||
ChildParachainAsNative, ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, | ||
CurrencyAdapter as XcmCurrencyAdapter, FixedRateOfFungible, FixedWeightBounds, | ||
IsChildSystemParachain, IsConcrete, LocationInverter, SignedAccountId32AsNative, | ||
SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, | ||
}; | ||
|
||
pub type AccountId = AccountId32; | ||
pub type Balance = u128; | ||
|
||
thread_local! { | ||
pub static SENT_XCM: RefCell<Vec<(MultiLocation, opaque::Xcm)>> = RefCell::new(Vec::new()); | ||
} | ||
pub fn sent_xcm() -> Vec<(MultiLocation, opaque::Xcm)> { | ||
SENT_XCM.with(|q| (*q.borrow()).clone()) | ||
} | ||
pub struct TestSendXcm; | ||
impl SendXcm for TestSendXcm { | ||
fn send_xcm(dest: MultiLocation, msg: opaque::Xcm) -> XcmResult { | ||
SENT_XCM.with(|q| q.borrow_mut().push((dest, msg))); | ||
Ok(()) | ||
} | ||
} | ||
|
||
// copied from kusama constants | ||
pub const UNITS: Balance = 1_000_000_000_000; | ||
pub const CENTS: Balance = UNITS / 30_000; | ||
|
||
parameter_types! { | ||
pub const BlockHashCount: u64 = 250; | ||
} | ||
|
||
impl frame_system::Config for Runtime { | ||
type Origin = Origin; | ||
type Call = Call; | ||
type Index = u64; | ||
type BlockNumber = u64; | ||
type Hash = H256; | ||
type Hashing = ::sp_runtime::traits::BlakeTwo256; | ||
type AccountId = AccountId; | ||
type Lookup = IdentityLookup<Self::AccountId>; | ||
type Header = Header; | ||
type Event = Event; | ||
type BlockHashCount = BlockHashCount; | ||
type BlockWeights = (); | ||
type BlockLength = (); | ||
type Version = (); | ||
type PalletInfo = PalletInfo; | ||
type AccountData = pallet_balances::AccountData<Balance>; | ||
type > | ||
type > | ||
type DbWeight = (); | ||
type BaseCallFilter = Everything; | ||
type SystemWeightInfo = (); | ||
type SS58Prefix = (); | ||
type > | ||
} | ||
|
||
parameter_types! { | ||
pub ExistentialDeposit: Balance = 1 * CENTS; | ||
pub const MaxLocks: u32 = 50; | ||
pub const MaxReserves: u32 = 50; | ||
} | ||
|
||
impl pallet_balances::Config for Runtime { | ||
type MaxLocks = MaxLocks; | ||
type Balance = Balance; | ||
type Event = Event; | ||
type DustRemoval = (); | ||
type ExistentialDeposit = ExistentialDeposit; | ||
type AccountStore = System; | ||
type WeightInfo = (); | ||
type MaxReserves = MaxReserves; | ||
type ReserveIdentifier = [u8; 8]; | ||
} | ||
|
||
impl shared::Config for Runtime {} | ||
|
||
impl configuration::Config for Runtime {} | ||
|
||
// aims to closely emulate the Kusama XcmConfig | ||
parameter_types! { | ||
pub const KsmLocation: MultiLocation = MultiLocation::here(); | ||
pub const KusamaNetwork: NetworkId = NetworkId::Kusama; | ||
pub Ancestry: MultiLocation = Here.into(); | ||
pub CheckAccount: AccountId = XcmPallet::check_account(); | ||
} | ||
|
||
pub type SovereignAccountOf = | ||
(ChildParachainConvertsVia<ParaId, AccountId>, AccountId32Aliases<KusamaNetwork, AccountId>); | ||
|
||
pub type LocalAssetTransactor = XcmCurrencyAdapter< | ||
Balances, | ||
IsConcrete<KsmLocation>, | ||
SovereignAccountOf, | ||
AccountId, | ||
CheckAccount, | ||
>; | ||
|
||
type LocalOriginConverter = ( | ||
SovereignSignedViaLocation<SovereignAccountOf, Origin>, | ||
ChildParachainAsNative<origin::Origin, Origin>, | ||
SignedAccountId32AsNative<KusamaNetwork, Origin>, | ||
ChildSystemParachainAsSuperuser<ParaId, Origin>, | ||
); | ||
|
||
parameter_types! { | ||
pub const BaseXcmWeight: Weight = 1_000_000_000; | ||
pub KsmPerSecond: (AssetId, u128) = (KsmLocation::get().into(), 1); | ||
} | ||
|
||
pub type Barrier = ( | ||
TakeWeightCredit, | ||
AllowTopLevelPaidExecutionFrom<Everything>, | ||
// Unused/Untested | ||
AllowUnpaidExecutionFrom<IsChildSystemParachain<ParaId>>, | ||
); | ||
|
||
parameter_types! { | ||
pub const KusamaForStatemint: (MultiAssetFilter, MultiLocation) = | ||
(MultiAssetFilter::Wild(WildMultiAsset::AllOf { id: Concrete(MultiLocation::here()), fun: WildFungible }), X1(Parachain(1000)).into()); | ||
} | ||
pub type TrustedTeleporters = (xcm_builder::Case<KusamaForStatemint>,); | ||
|
||
pub struct XcmConfig; | ||
impl xcm_executor::Config for XcmConfig { | ||
type Call = Call; | ||
type XcmSender = TestSendXcm; | ||
type AssetTransactor = LocalAssetTransactor; | ||
type OriginConverter = LocalOriginConverter; | ||
type IsReserve = (); | ||
type IsTeleporter = TrustedTeleporters; | ||
type LocationInverter = LocationInverter<Ancestry>; | ||
type Barrier = Barrier; | ||
type Weigher = FixedWeightBounds<BaseXcmWeight, Call>; | ||
type Trader = FixedRateOfFungible<KsmPerSecond, ()>; | ||
type ResponseHandler = (); | ||
} | ||
|
||
pub type LocalOriginToLocation = SignedToAccountId32<Origin, AccountId, KusamaNetwork>; | ||
|
||
impl pallet_xcm::Config for Runtime { | ||
type Event = Event; | ||
type LocationInverter = LocationInverter<Ancestry>; | ||
type SendXcmOrigin = xcm_builder::EnsureXcmOrigin<Origin, LocalOriginToLocation>; | ||
type XcmRouter = TestSendXcm; | ||
// Anyone can execute XCM messages locally... | ||
type ExecuteXcmOrigin = xcm_builder::EnsureXcmOrigin<Origin, LocalOriginToLocation>; | ||
type XcmExecuteFilter = (); | ||
type XcmExecutor = XcmExecutor<XcmConfig>; | ||
type XcmTeleportFilter = Everything; | ||
type XcmReserveTransferFilter = Everything; | ||
type Weigher = FixedWeightBounds<BaseXcmWeight, Call>; | ||
} | ||
|
||
impl origin::Config for Runtime {} | ||
|
||
type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Runtime>; | ||
type Block = frame_system::mocking::MockBlock<Runtime>; | ||
|
||
construct_runtime!( | ||
pub enum Runtime where | ||
Block = Block, | ||
NodeBlock = Block, | ||
UncheckedExtrinsic = UncheckedExtrinsic, | ||
{ | ||
System: frame_system::{Pallet, Call, Storage, Config, Event<T>}, | ||
Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>}, | ||
ParasOrigin: origin::{Pallet, Origin}, | ||
XcmPallet: pallet_xcm::{Pallet, Call, Storage, Event<T>}, | ||
} | ||
); | ||
|
||
pub fn kusama_like_with_balances(balances: Vec<(AccountId, Balance)>) -> sp_io::TestExternalities { | ||
let mut t = frame_system::GenesisConfig::default().build_storage::<Runtime>().unwrap(); | ||
|
||
pallet_balances::GenesisConfig::<Runtime> { balances } | ||
.assimilate_storage(&mut t) | ||
.unwrap(); | ||
|
||
let mut ext = sp_io::TestExternalities::new(t); | ||
ext.execute_with(|| System::set_block_number(1)); | ||
ext | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.