1919#![ cfg( feature = "runtime-benchmarks" ) ]
2020
2121use crate :: { BridgeState , Bridges , Call , ResolveBridgeId , MINIMAL_DELIVERY_FEE_FACTOR } ;
22- use frame_benchmarking:: { benchmarks_instance_pallet , BenchmarkError , BenchmarkResult } ;
23- use frame_support:: traits:: { EnsureOriginWithArg , Hooks , UnfilteredDispatchable } ;
22+ use frame_benchmarking:: v2 :: * ;
23+ use frame_support:: traits:: { EnsureOriginWithArg , Hooks } ;
2424use sp_runtime:: { traits:: Zero , Saturating } ;
2525use xcm:: prelude:: * ;
2626
@@ -29,62 +29,82 @@ pub struct Pallet<T: Config<I>, I: 'static = ()>(crate::Pallet<T, I>);
2929
3030/// Trait that must be implemented by runtime to be able to benchmark pallet properly.
3131pub trait Config < I : ' static > : crate :: Config < I > {
32- // /// Fill up queue so it becomes congested.
33- // fn make_congested();
34- //
3532 /// Returns destination which is valid for this router instance.
3633 fn ensure_bridged_target_destination ( ) -> Result < Location , BenchmarkError > ;
34+ /// Returns valid origin for `report_bridge_status` (if `T::BridgeHubOrigin` is supported).
35+ fn report_bridge_status_origin ( ) -> Option < Self :: RuntimeOrigin > ;
3736}
3837
39- benchmarks_instance_pallet ! {
40- on_initialize_when_bridge_state_removed {
38+ #[ instance_benchmarks]
39+ mod benchmarks {
40+ use super :: * ;
41+
42+ #[ benchmark]
43+ fn on_initialize_when_bridge_state_removed ( ) -> Result < ( ) , BenchmarkError > {
4144 let bridge_id = T :: BridgeIdResolver :: resolve_for_dest ( & T :: ensure_bridged_target_destination ( ) ?)
4245 . ok_or ( BenchmarkError :: Weightless ) ?;
46+
4347 // uncongested and less than a minimal factor is removed
4448 Bridges :: < T , I > :: insert ( & bridge_id, BridgeState {
4549 delivery_fee_factor : 0 . into ( ) ,
4650 is_congested : false ,
4751 } ) ;
4852 assert ! ( Bridges :: <T , I >:: get( & bridge_id) . is_some( ) ) ;
49- } : {
50- crate :: Pallet :: <T , I >:: on_initialize( Zero :: zero( ) )
51- } verify {
53+
54+ #[ block]
55+ {
56+ let _ = crate :: Pallet :: < T , I > :: on_initialize ( Zero :: zero ( ) ) ;
57+ }
58+
5259 assert ! ( Bridges :: <T , I >:: get( bridge_id) . is_none( ) ) ;
60+
61+ Ok ( ( ) )
5362 }
5463
55- on_initialize_when_bridge_state_updated {
64+ #[ benchmark]
65+ fn on_initialize_when_bridge_state_updated ( ) -> Result < ( ) , BenchmarkError > {
5666 let bridge_id = T :: BridgeIdResolver :: resolve_for_dest ( & T :: ensure_bridged_target_destination ( ) ?)
5767 . ok_or ( BenchmarkError :: Weightless ) ?;
68+
5869 // uncongested and higher than a minimal factor is decreased
5970 let old_delivery_fee_factor = MINIMAL_DELIVERY_FEE_FACTOR . saturating_mul ( 1000 . into ( ) ) ;
6071 Bridges :: < T , I > :: insert ( & bridge_id, BridgeState {
6172 delivery_fee_factor : old_delivery_fee_factor,
6273 is_congested : false ,
6374 } ) ;
6475 assert ! ( Bridges :: <T , I >:: get( & bridge_id) . is_some( ) ) ;
65- } : {
66- crate :: Pallet :: <T , I >:: on_initialize( Zero :: zero( ) )
67- } verify {
76+
77+ #[ block]
78+ {
79+ let _ = crate :: Pallet :: < T , I > :: on_initialize ( Zero :: zero ( ) ) ;
80+ }
81+
6882 assert ! ( Bridges :: <T , I >:: get( bridge_id) . unwrap( ) . delivery_fee_factor < old_delivery_fee_factor) ;
83+ Ok ( ( ) )
6984 }
7085
71- report_bridge_status {
86+ #[ benchmark]
87+ fn report_bridge_status ( ) -> Result < ( ) , BenchmarkError > {
7288 let bridge_id = T :: BridgeIdResolver :: resolve_for_dest ( & T :: ensure_bridged_target_destination ( ) ?)
7389 . ok_or ( BenchmarkError :: Override ( BenchmarkResult :: from_weight ( Weight :: MAX ) ) ) ?;
74- let origin: T :: RuntimeOrigin = T :: BridgeHubOrigin :: try_successful_origin( & bridge_id) . map_err( |_| BenchmarkError :: Weightless ) ?;
90+ let origin = T :: report_bridge_status_origin ( )
91+ . ok_or ( BenchmarkError :: Override ( BenchmarkResult :: from_weight ( Weight :: MAX ) ) ) ?;
92+ let _ = T :: BridgeHubOrigin :: try_origin ( origin. clone ( ) , & bridge_id)
93+ . map_err ( |_| BenchmarkError :: Override ( BenchmarkResult :: from_weight ( Weight :: MAX ) ) ) ?;
7594 let is_congested = true ;
7695
77- let call = Call :: < T , I > :: report_bridge_status { bridge_id : bridge_id . clone ( ) , is_congested } ;
78- } : { call . dispatch_bypass_filter ( origin ) ? }
79- verify {
96+ # [ extrinsic_call ]
97+ report_bridge_status ( origin as T :: RuntimeOrigin , bridge_id . clone ( ) , is_congested ) ;
98+
8099 assert_eq ! (
81100 Bridges :: <T , I >:: get( & bridge_id) ,
82101 Some ( BridgeState {
83102 delivery_fee_factor: MINIMAL_DELIVERY_FEE_FACTOR ,
84103 is_congested,
85104 } )
86105 ) ;
106+ Ok ( ( ) )
87107 }
88108
89- impl_benchmark_test_suite!( Pallet , crate :: mock:: new_test_ext( ) , crate :: mock:: TestRuntime )
109+ impl_benchmark_test_suite ! ( Pallet , crate :: mock:: new_test_ext( ) , crate :: mock:: TestRuntime ) ;
90110}
0 commit comments