@@ -838,21 +838,23 @@ mod tests {
838838 mock:: * ,
839839 } ;
840840 use bp_messages:: {
841- DeliveredMessages , InboundLaneData , MessageNonce , OutboundLaneData , UnrewardedRelayer ,
842- UnrewardedRelayersState ,
841+ DeliveredMessages , InboundLaneData , MessageNonce , MessagesOperatingMode , OutboundLaneData ,
842+ UnrewardedRelayer , UnrewardedRelayersState ,
843843 } ;
844844 use bp_parachains:: { BestParaHeadHash , ParaInfo } ;
845845 use bp_polkadot_core:: parachains:: { ParaHeadsProof , ParaId } ;
846- use bp_runtime:: HeaderId ;
846+ use bp_runtime:: { BasicOperatingMode , HeaderId } ;
847847 use bp_test_utils:: { make_default_justification, test_keyring} ;
848848 use frame_support:: {
849849 assert_storage_noop, parameter_types,
850850 traits:: { fungible:: Mutate , ReservableCurrency } ,
851851 weights:: Weight ,
852852 } ;
853- use pallet_bridge_grandpa:: { Call as GrandpaCall , StoredAuthoritySet } ;
854- use pallet_bridge_messages:: Call as MessagesCall ;
855- use pallet_bridge_parachains:: { Call as ParachainsCall , RelayBlockHash } ;
853+ use pallet_bridge_grandpa:: { Call as GrandpaCall , Pallet as GrandpaPallet , StoredAuthoritySet } ;
854+ use pallet_bridge_messages:: { Call as MessagesCall , Pallet as MessagesPallet } ;
855+ use pallet_bridge_parachains:: {
856+ Call as ParachainsCall , Pallet as ParachainsPallet , RelayBlockHash ,
857+ } ;
856858 use sp_runtime:: {
857859 traits:: { ConstU64 , Header as HeaderT } ,
858860 transaction_validity:: { InvalidTransaction , ValidTransaction } ,
@@ -1592,6 +1594,99 @@ mod tests {
15921594 } ) ;
15931595 }
15941596
1597+ #[ test]
1598+ fn ext_rejects_batch_with_grandpa_finality_proof_when_grandpa_pallet_is_halted ( ) {
1599+ run_test ( || {
1600+ initialize_environment ( 100 , 100 , 100 ) ;
1601+
1602+ GrandpaPallet :: < TestRuntime , ( ) > :: set_operating_mode (
1603+ RuntimeOrigin :: root ( ) ,
1604+ BasicOperatingMode :: Halted ,
1605+ )
1606+ . unwrap ( ) ;
1607+
1608+ assert_eq ! (
1609+ run_pre_dispatch( all_finality_and_delivery_batch_call( 200 , 200 , 200 ) ) ,
1610+ Err ( TransactionValidityError :: Invalid ( InvalidTransaction :: Call ) ) ,
1611+ ) ;
1612+ assert_eq ! (
1613+ run_pre_dispatch( all_finality_and_confirmation_batch_call( 200 , 200 , 200 ) ) ,
1614+ Err ( TransactionValidityError :: Invalid ( InvalidTransaction :: Call ) ) ,
1615+ ) ;
1616+ } ) ;
1617+ }
1618+
1619+ #[ test]
1620+ fn ext_rejects_batch_with_parachain_finality_proof_when_parachains_pallet_is_halted ( ) {
1621+ run_test ( || {
1622+ initialize_environment ( 100 , 100 , 100 ) ;
1623+
1624+ ParachainsPallet :: < TestRuntime , ( ) > :: set_operating_mode (
1625+ RuntimeOrigin :: root ( ) ,
1626+ BasicOperatingMode :: Halted ,
1627+ )
1628+ . unwrap ( ) ;
1629+
1630+ assert_eq ! (
1631+ run_pre_dispatch( all_finality_and_delivery_batch_call( 200 , 200 , 200 ) ) ,
1632+ Err ( TransactionValidityError :: Invalid ( InvalidTransaction :: Call ) ) ,
1633+ ) ;
1634+ assert_eq ! (
1635+ run_pre_dispatch( all_finality_and_confirmation_batch_call( 200 , 200 , 200 ) ) ,
1636+ Err ( TransactionValidityError :: Invalid ( InvalidTransaction :: Call ) ) ,
1637+ ) ;
1638+
1639+ assert_eq ! (
1640+ run_pre_dispatch( parachain_finality_and_delivery_batch_call( 200 , 200 ) ) ,
1641+ Err ( TransactionValidityError :: Invalid ( InvalidTransaction :: Call ) ) ,
1642+ ) ;
1643+ assert_eq ! (
1644+ run_pre_dispatch( parachain_finality_and_confirmation_batch_call( 200 , 200 ) ) ,
1645+ Err ( TransactionValidityError :: Invalid ( InvalidTransaction :: Call ) ) ,
1646+ ) ;
1647+ } ) ;
1648+ }
1649+
1650+ #[ test]
1651+ fn ext_rejects_transaction_when_messages_pallet_is_halted ( ) {
1652+ run_test ( || {
1653+ initialize_environment ( 100 , 100 , 100 ) ;
1654+
1655+ MessagesPallet :: < TestRuntime , ( ) > :: set_operating_mode (
1656+ RuntimeOrigin :: root ( ) ,
1657+ MessagesOperatingMode :: Basic ( BasicOperatingMode :: Halted ) ,
1658+ )
1659+ . unwrap ( ) ;
1660+
1661+ assert_eq ! (
1662+ run_pre_dispatch( all_finality_and_delivery_batch_call( 200 , 200 , 200 ) ) ,
1663+ Err ( TransactionValidityError :: Invalid ( InvalidTransaction :: Call ) ) ,
1664+ ) ;
1665+ assert_eq ! (
1666+ run_pre_dispatch( all_finality_and_confirmation_batch_call( 200 , 200 , 200 ) ) ,
1667+ Err ( TransactionValidityError :: Invalid ( InvalidTransaction :: Call ) ) ,
1668+ ) ;
1669+
1670+ assert_eq ! (
1671+ run_pre_dispatch( parachain_finality_and_delivery_batch_call( 200 , 200 ) ) ,
1672+ Err ( TransactionValidityError :: Invalid ( InvalidTransaction :: Call ) ) ,
1673+ ) ;
1674+ assert_eq ! (
1675+ run_pre_dispatch( parachain_finality_and_confirmation_batch_call( 200 , 200 ) ) ,
1676+ Err ( TransactionValidityError :: Invalid ( InvalidTransaction :: Call ) ) ,
1677+ ) ;
1678+
1679+ assert_eq ! (
1680+ run_pre_dispatch( message_delivery_call( 200 ) ) ,
1681+ Err ( TransactionValidityError :: Invalid ( InvalidTransaction :: Call ) ) ,
1682+ ) ;
1683+ assert_eq ! (
1684+ run_pre_dispatch( message_confirmation_call( 200 ) ) ,
1685+ Err ( TransactionValidityError :: Invalid ( InvalidTransaction :: Call ) ) ,
1686+ ) ;
1687+ } ) ;
1688+ }
1689+
15951690 #[ test]
15961691 fn pre_dispatch_parses_batch_with_relay_chain_and_parachain_headers ( ) {
15971692 run_test ( || {
0 commit comments