polkadot_runtime_common/assigned_slots/
benchmarking.rs1#![cfg(feature = "runtime-benchmarks")]
20use super::*;
21
22use frame_benchmarking::v2::*;
23use frame_support::assert_ok;
24use frame_system::{pallet_prelude::BlockNumberFor, RawOrigin};
25use polkadot_primitives::Id as ParaId;
26use sp_runtime::traits::Bounded;
27
28type CurrencyOf<T> = <<T as Config>::Leaser as Leaser<BlockNumberFor<T>>>::Currency;
29type BalanceOf<T> = <<<T as Config>::Leaser as Leaser<BlockNumberFor<T>>>::Currency as Currency<
30 <T as frame_system::Config>::AccountId,
31>>::Balance;
32#[benchmarks(where T: Config)]
33mod benchmarks {
34 use super::*;
35
36 use crate::assigned_slots::Pallet as AssignedSlots;
37
38 fn register_parachain<T: Config>(para_id: ParaId) {
39 let who: T::AccountId = whitelisted_caller();
40 let worst_validation_code = T::Registrar::worst_validation_code();
41 let worst_head_data = T::Registrar::worst_head_data();
42
43 CurrencyOf::<T>::make_free_balance_be(&who, BalanceOf::<T>::max_value());
44
45 assert_ok!(T::Registrar::register(
46 who,
47 para_id,
48 worst_head_data,
49 worst_validation_code.clone()
50 ));
51 assert_ok!(paras::Pallet::<T>::add_trusted_validation_code(
52 frame_system::Origin::<T>::Root.into(),
53 worst_validation_code,
54 ));
55 T::Registrar::execute_pending_transitions();
56 }
57
58 #[benchmark]
59 fn assign_perm_parachain_slot() {
60 let para_id = ParaId::from(1_u32);
61 let caller = RawOrigin::Root;
62
63 let _ =
64 AssignedSlots::<T>::set_max_permanent_slots(frame_system::Origin::<T>::Root.into(), 10);
65 register_parachain::<T>(para_id);
66
67 let counter = PermanentSlotCount::<T>::get();
68 let current_lease_period: BlockNumberFor<T> =
69 T::Leaser::lease_period_index(frame_system::Pallet::<T>::block_number())
70 .and_then(|x| Some(x.0))
71 .unwrap();
72 #[extrinsic_call]
73 assign_perm_parachain_slot(caller, para_id);
74
75 assert_eq!(
76 PermanentSlots::<T>::get(para_id),
77 Some((
78 current_lease_period,
79 LeasePeriodOf::<T>::from(T::PermanentSlotLeasePeriodLength::get()),
80 ))
81 );
82 assert_eq!(PermanentSlotCount::<T>::get(), counter + 1);
83 }
84
85 #[benchmark]
86 fn assign_temp_parachain_slot() {
87 let para_id = ParaId::from(2_u32);
88 let caller = RawOrigin::Root;
89
90 let _ =
91 AssignedSlots::<T>::set_max_temporary_slots(frame_system::Origin::<T>::Root.into(), 10);
92 register_parachain::<T>(para_id);
93
94 let current_lease_period: BlockNumberFor<T> =
95 T::Leaser::lease_period_index(frame_system::Pallet::<T>::block_number())
96 .and_then(|x| Some(x.0))
97 .unwrap();
98
99 let counter = TemporarySlotCount::<T>::get();
100 #[extrinsic_call]
101 assign_temp_parachain_slot(caller, para_id, SlotLeasePeriodStart::Current);
102
103 let tmp = ParachainTemporarySlot {
104 manager: whitelisted_caller(),
105 period_begin: current_lease_period,
106 period_count: LeasePeriodOf::<T>::from(T::TemporarySlotLeasePeriodLength::get()),
107 last_lease: Some(BlockNumberFor::<T>::zero()),
108 lease_count: 1,
109 };
110 assert_eq!(TemporarySlots::<T>::get(para_id), Some(tmp));
111 assert_eq!(TemporarySlotCount::<T>::get(), counter + 1);
112 }
113
114 #[benchmark]
115 fn unassign_parachain_slot() {
116 let para_id = ParaId::from(3_u32);
117 let caller = RawOrigin::Root;
118
119 let _ =
120 AssignedSlots::<T>::set_max_temporary_slots(frame_system::Origin::<T>::Root.into(), 10);
121 register_parachain::<T>(para_id);
122
123 let _ = AssignedSlots::<T>::assign_temp_parachain_slot(
124 caller.clone().into(),
125 para_id,
126 SlotLeasePeriodStart::Current,
127 );
128
129 let counter = TemporarySlotCount::<T>::get();
130 #[extrinsic_call]
131 unassign_parachain_slot(caller, para_id);
132
133 assert_eq!(TemporarySlots::<T>::get(para_id), None);
134 assert_eq!(TemporarySlotCount::<T>::get(), counter - 1);
135 }
136
137 #[benchmark]
138 fn set_max_permanent_slots() {
139 let caller = RawOrigin::Root;
140 #[extrinsic_call]
141 set_max_permanent_slots(caller, u32::MAX);
142
143 assert_eq!(MaxPermanentSlots::<T>::get(), u32::MAX);
144 }
145
146 #[benchmark]
147 fn set_max_temporary_slots() {
148 let caller = RawOrigin::Root;
149 #[extrinsic_call]
150 set_max_temporary_slots(caller, u32::MAX);
151
152 assert_eq!(MaxTemporarySlots::<T>::get(), u32::MAX);
153 }
154
155 impl_benchmark_test_suite!(
156 AssignedSlots,
157 crate::assigned_slots::tests::new_test_ext(),
158 crate::assigned_slots::tests::Test,
159 );
160}