mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 05:11:02 +00:00
Tests for BridgeHub(s) <> remote GRANDPA chain (#2692)
So far the `bridge-hub-test-utils` contained a tests set for testing BridgeHub runtime that is bridging with the remote **parachain**. But we have https://github.com/paritytech/polkadot-sdk/pull/2540 coming, which would add Rococo <> Bulletin chain bridge (where Bulletin = standalone chain that is using GRANDPA finality). Then it'll be expanded to Polkadot BH as well. So this PR adds the same set of tests to the `bridge-hub-test-utils`, but for the case when remote chain is the chain with GRANDPA finality. There's a lot of changes in this PR - I'll describe some: - I've added `BasicParachainRuntime` trait to decrease number of lines we need to add to `where` clause. Could revert, but imo it is useful; - `cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_data` is a submodule for generating test data for the test sets. `from_parachain.rs` is used in tests for the case when remote chain is a parachain, `from_grandpa_chain.rs` - for the bridges with remote GRANDPA chains. `mod.rs` has some code, shared by both types of tests; - `cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_data` is a submodule with all test cases. The `mod.rs` has tests, suitable for all cases. There's also `wth_parachain.rs` and `with_grandpa_chain.rs` with the same meaning as above; - I've merged the "core" code of two previous tests - `relayed_incoming_message_works` and `complex_relay_extrinsic_works` into one single `relayed_incoming_message_works` test. So now we are always constructing extrinsics and are dispatching them using executive module (meaning all signed extensions are also tested). New test set is used here: https://github.com/paritytech/polkadot-sdk/pull/2540. Once this PR is merged, I'll merge that other PR with master to remove duplicate changes. I'm also planning to cleanup generic constraints + remove some unnecessary assumptions about used chains in a follow-up PRs. But for now I think this PR has enough changes, so don't want to complicate it even more. --- Breaking changes for the code that have used those tests before: - the `construct_and_apply_extrinsic` callback now accepts the `RuntimeCall` instead of the `pallet_utility::Call`; - the `construct_and_apply_extrinsic` now may be called multiple times for the single test, so make sure the `frame_system::CheckNonce` is correctly constructed; - all previous tests have been moved from `bridge_hub_test_utils::test_cases` to `bridge_hub_test_utils::test_cases::from_parachain` module; - there are several changes in test arguments - please refer to https://github.com/paritytech/polkadot-sdk/compare/sv-tests-for-bridge-with-remote-grandpa-chain?expand=1#diff-79a28d4d3e1749050341c2424f00c4c139825b1a20937767f83e58b95166735c for details.
This commit is contained in:
committed by
GitHub
parent
3c5fcbe637
commit
9ecb2d3391
@@ -32,7 +32,6 @@ use bridge_to_rococo_config::{
|
||||
};
|
||||
use codec::{Decode, Encode};
|
||||
use frame_support::{dispatch::GetDispatchInfo, parameter_types, traits::ConstU8};
|
||||
use frame_system::pallet_prelude::HeaderFor;
|
||||
use parachains_common::{westend::fee::WeightToFee, AccountId, AuraId, Balance};
|
||||
use sp_keyring::AccountKeyring::Alice;
|
||||
use sp_runtime::{
|
||||
@@ -52,13 +51,16 @@ fn construct_extrinsic(
|
||||
sender: sp_keyring::AccountKeyring,
|
||||
call: RuntimeCall,
|
||||
) -> UncheckedExtrinsic {
|
||||
let account_id = AccountId32::from(sender.public());
|
||||
let extra: SignedExtra = (
|
||||
frame_system::CheckNonZeroSender::<Runtime>::new(),
|
||||
frame_system::CheckSpecVersion::<Runtime>::new(),
|
||||
frame_system::CheckTxVersion::<Runtime>::new(),
|
||||
frame_system::CheckGenesis::<Runtime>::new(),
|
||||
frame_system::CheckEra::<Runtime>::from(Era::immortal()),
|
||||
frame_system::CheckNonce::<Runtime>::from(0),
|
||||
frame_system::CheckNonce::<Runtime>::from(
|
||||
frame_system::Pallet::<Runtime>::account(&account_id).nonce,
|
||||
),
|
||||
frame_system::CheckWeight::<Runtime>::new(),
|
||||
pallet_transaction_payment::ChargeTransactionPayment::<Runtime>::from(0),
|
||||
BridgeRejectObsoleteHeadersAndMessages::default(),
|
||||
@@ -68,7 +70,7 @@ fn construct_extrinsic(
|
||||
let signature = payload.using_encoded(|e| sender.sign(e));
|
||||
UncheckedExtrinsic::new_signed(
|
||||
call,
|
||||
AccountId32::from(sender.public()).into(),
|
||||
account_id.into(),
|
||||
Signature::Sr25519(signature.clone()),
|
||||
extra,
|
||||
)
|
||||
@@ -76,10 +78,9 @@ fn construct_extrinsic(
|
||||
|
||||
fn construct_and_apply_extrinsic(
|
||||
relayer_at_target: sp_keyring::AccountKeyring,
|
||||
batch: pallet_utility::Call<Runtime>,
|
||||
call: RuntimeCall,
|
||||
) -> sp_runtime::DispatchOutcome {
|
||||
let batch_call = RuntimeCall::Utility(batch);
|
||||
let xt = construct_extrinsic(relayer_at_target, batch_call);
|
||||
let xt = construct_extrinsic(relayer_at_target, call);
|
||||
let r = Executive::apply_extrinsic(xt);
|
||||
r.unwrap()
|
||||
}
|
||||
@@ -91,10 +92,6 @@ fn construct_and_estimate_extrinsic_fee(batch: pallet_utility::Call<Runtime>) ->
|
||||
TransactionPayment::compute_fee(xt.encoded_size() as _, &batch_info, 0)
|
||||
}
|
||||
|
||||
fn executive_init_block(header: &HeaderFor<Runtime>) {
|
||||
Executive::initialize_block(header)
|
||||
}
|
||||
|
||||
fn collator_session_keys() -> bridge_hub_test_utils::CollatorSessionKeys<Runtime> {
|
||||
bridge_hub_test_utils::CollatorSessionKeys::new(
|
||||
AccountId::from(Alice),
|
||||
@@ -222,10 +219,9 @@ fn message_dispatch_routing_works() {
|
||||
|
||||
#[test]
|
||||
fn relayed_incoming_message_works() {
|
||||
bridge_hub_test_utils::test_cases::relayed_incoming_message_works::<
|
||||
bridge_hub_test_utils::test_cases::from_parachain::relayed_incoming_message_works::<
|
||||
Runtime,
|
||||
AllPalletsWithoutSystem,
|
||||
XcmConfig,
|
||||
ParachainSystem,
|
||||
BridgeGrandpaRococoInstance,
|
||||
BridgeParachainRococoInstance,
|
||||
@@ -235,16 +231,18 @@ fn relayed_incoming_message_works() {
|
||||
collator_session_keys(),
|
||||
bp_bridge_hub_westend::BRIDGE_HUB_WESTEND_PARACHAIN_ID,
|
||||
bp_bridge_hub_rococo::BRIDGE_HUB_ROCOCO_PARACHAIN_ID,
|
||||
BridgeHubRococoChainId::get(),
|
||||
SIBLING_PARACHAIN_ID,
|
||||
Westend,
|
||||
XCM_LANE_FOR_ASSET_HUB_WESTEND_TO_ASSET_HUB_ROCOCO,
|
||||
|| (),
|
||||
construct_and_apply_extrinsic,
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
pub fn complex_relay_extrinsic_works() {
|
||||
bridge_hub_test_utils::test_cases::complex_relay_extrinsic_works::<
|
||||
bridge_hub_test_utils::test_cases::from_parachain::complex_relay_extrinsic_works::<
|
||||
Runtime,
|
||||
AllPalletsWithoutSystem,
|
||||
XcmConfig,
|
||||
@@ -261,10 +259,8 @@ pub fn complex_relay_extrinsic_works() {
|
||||
BridgeHubRococoChainId::get(),
|
||||
Westend,
|
||||
XCM_LANE_FOR_ASSET_HUB_WESTEND_TO_ASSET_HUB_ROCOCO,
|
||||
ExistentialDeposit::get(),
|
||||
executive_init_block,
|
||||
construct_and_apply_extrinsic,
|
||||
|| (),
|
||||
construct_and_apply_extrinsic,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -288,7 +284,7 @@ pub fn can_calculate_weight_for_paid_export_message_with_reserve_transfer() {
|
||||
|
||||
#[test]
|
||||
pub fn can_calculate_fee_for_complex_message_delivery_transaction() {
|
||||
let estimated = bridge_hub_test_utils::test_cases::can_calculate_fee_for_complex_message_delivery_transaction::<
|
||||
let estimated = bridge_hub_test_utils::test_cases::from_parachain::can_calculate_fee_for_complex_message_delivery_transaction::<
|
||||
Runtime,
|
||||
BridgeGrandpaRococoInstance,
|
||||
BridgeParachainRococoInstance,
|
||||
@@ -311,7 +307,7 @@ pub fn can_calculate_fee_for_complex_message_delivery_transaction() {
|
||||
|
||||
#[test]
|
||||
pub fn can_calculate_fee_for_complex_message_confirmation_transaction() {
|
||||
let estimated = bridge_hub_test_utils::test_cases::can_calculate_fee_for_complex_message_confirmation_transaction::<
|
||||
let estimated = bridge_hub_test_utils::test_cases::from_parachain::can_calculate_fee_for_complex_message_confirmation_transaction::<
|
||||
Runtime,
|
||||
BridgeGrandpaRococoInstance,
|
||||
BridgeParachainRococoInstance,
|
||||
|
||||
Reference in New Issue
Block a user