Skip to content

Commit a6d9b27

Browse files
gabriele-0201rphmeier
authored andcommitted
add SignedExtension tests
1 parent a6bb079 commit a6d9b27

File tree

2 files changed

+104
-23
lines changed

2 files changed

+104
-23
lines changed

sugondat-chain/pallets/blobs/src/lib.rs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,9 @@ pub mod pallet {
6363

6464
/// The total number of bytes stored in all blobs.
6565
#[pallet::storage]
66-
pub type TotalBlobsSize<T: Config> = StorageValue<_, u32, ValueQuery>;
66+
pub type TotalBlobSize<T: Config> = StorageValue<_, u32, ValueQuery>;
6767

68+
/// The amount of submitted blobs
6869
#[pallet::storage]
6970
pub type TotalBlobs<T: Config> = StorageValue<_, u32, ValueQuery>;
7071

@@ -105,12 +106,6 @@ pub mod pallet {
105106
// Errors inform users that something went wrong.
106107
#[pallet::error]
107108
pub enum Error<T> {
108-
/// Maximum number of blobs reached.
109-
MaxBlobsReached,
110-
/// Maximum total size of blobs reached.
111-
MaxTotalBlobsSizeReached,
112-
/// The blob submitted couldn't be stored because it was too large.
113-
BlobTooLarge,
114109
/// The extrinsic index is not available.
115110
NoExtrinsicIndex,
116111
}
@@ -130,14 +125,14 @@ pub mod pallet {
130125
impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
131126
fn on_initialize(_: BlockNumberFor<T>) -> Weight {
132127
// BlobList: 1r + 1w
133-
// TotalBlobsSize: 1w
128+
// TotalBlobSize: 1w
134129
// TotalBlobs: 1w
135130
// deposit_log: 1r + 1w
136131
T::DbWeight::get().reads_writes(2, 4)
137132
}
138133

139134
fn on_finalize(_n: BlockNumberFor<T>) {
140-
TotalBlobsSize::<T>::kill();
135+
TotalBlobSize::<T>::kill();
141136
TotalBlobs::<T>::kill();
142137
let blobs = BlobList::<T>::take()
143138
.iter()
@@ -176,7 +171,7 @@ pub mod pallet {
176171
pub fn submit_blob(
177172
origin: OriginFor<T>,
178173
namespace_id: u32,
179-
blob: BoundedVec<u8, T::MaxBlobSize>,
174+
blob: Vec<u8>,
180175
) -> DispatchResultWithPostInfo {
181176
let who = ensure_signed(origin)?;
182177

@@ -196,11 +191,11 @@ pub mod pallet {
196191
TotalBlobs::<T>::put(total_blobs + 1);
197192

198193
let blob_len = blob.len() as u32;
199-
let total_blobs_size = TotalBlobsSize::<T>::get();
200-
if total_blobs_size + blob_len > T::MaxTotalBlobSize::get() {
194+
let total_blob_size = TotalBlobSize::<T>::get();
195+
if total_blob_size + blob_len > T::MaxTotalBlobSize::get() {
201196
panic!("Maximum total blob size exceeded");
202197
}
203-
TotalBlobsSize::<T>::put(total_blobs_size + blob_len);
198+
TotalBlobSize::<T>::put(total_blob_size + blob_len);
204199

205200
let blob_hash = sha2_hash(&blob);
206201

@@ -290,7 +285,7 @@ where
290285
return Err(InvalidTransaction::ExhaustsResources.into());
291286
}
292287

293-
if TotalBlobsSize::<T>::get() + blob.len() as u32 > T::MaxTotalBlobSize::get() {
288+
if TotalBlobSize::<T>::get() + blob.len() as u32 > T::MaxTotalBlobSize::get() {
294289
return Err(InvalidTransaction::ExhaustsResources.into());
295290
}
296291
}

sugondat-chain/pallets/blobs/src/tests.rs

Lines changed: 95 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ use frame_support::traits::Hooks;
55
use frame_support::{assert_noop, assert_ok, traits::Get, BoundedVec};
66
use sha2::Digest;
77
use sp_core::{crypto::Pair, sr25519};
8+
use sp_runtime::transaction_validity::{
9+
InvalidTransaction, TransactionValidityError, ValidTransaction,
10+
};
811
use sugondat_nmt::{Namespace, NmtLeaf};
912

10-
fn get_blob(size: u32) -> BoundedVec<u8, <Test as pallet_blobs::Config>::MaxBlobSize> {
11-
vec![12u8]
12-
.repeat(size as usize)
13-
.try_into()
14-
.expect("provided size biggger then MaxBlobSize")
13+
fn get_blob(size: u32) -> Vec<u8> {
14+
vec![12u8].repeat(size as usize)
1515
}
1616

1717
fn alice() -> <Test as frame_system::Config>::AccountId {
@@ -35,7 +35,7 @@ fn test_correct_submitted_blob() {
3535
));
3636

3737
assert_eq!(TotalBlobs::<Test>::get(), 1);
38-
assert_eq!(TotalBlobsSize::<Test>::get(), blob_len);
38+
assert_eq!(TotalBlobSize::<Test>::get(), blob_len);
3939
let blob_list = SubmittedBlobMetadata {
4040
who: alice(),
4141
extrinsic_index: 0,
@@ -88,7 +88,7 @@ fn test_max_blobs_exceeded() {
8888
}
8989

9090
#[test]
91-
fn test_max_total_blob_size_reached() {
91+
fn test_max_total_blobs_size_reached() {
9292
let max_total_blobs_size: u32 = <Test as pallet_blobs::Config>::MaxTotalBlobSize::get();
9393
let max_blob_size: u32 = <Test as pallet_blobs::Config>::MaxBlobSize::get();
9494
let blobs_needed = max_total_blobs_size / max_blob_size;
@@ -100,7 +100,7 @@ fn test_max_total_blob_size_reached() {
100100

101101
#[test]
102102
#[should_panic = "Maximum total blob size exceeded"]
103-
fn test_max_total_blob_size_exceeded() {
103+
fn test_max_total_blobs_size_exceeded() {
104104
let max_total_blobs_size: u32 = <Test as pallet_blobs::Config>::MaxTotalBlobSize::get();
105105
let max_blob_size: u32 = <Test as pallet_blobs::Config>::MaxBlobSize::get();
106106
let blobs_needed = max_total_blobs_size / max_blob_size;
@@ -190,7 +190,7 @@ fn test_namespace_order() {
190190
submit_blob(1 << 8, 2);
191191
submit_blob(1, 3);
192192

193-
assert_eq!(TotalBlobsSize::<Test>::get(), blob_len * 4);
193+
assert_eq!(TotalBlobSize::<Test>::get(), blob_len * 4);
194194
assert_eq!(BlobList::<Test>::get().to_vec(), blobs_metadata);
195195

196196
Blobs::on_finalize(System::block_number());
@@ -291,3 +291,89 @@ fn test_on_finalize() {
291291
});
292292
}
293293
}
294+
295+
macro_rules! submit_blob_call {
296+
([blob_size] $blob_size: expr) => {
297+
RuntimeCall::Blobs(
298+
Call::submit_blob {
299+
namespace_id: 0,
300+
blob: get_blob($blob_size),
301+
}
302+
.into(),
303+
)
304+
};
305+
}
306+
307+
#[test]
308+
fn test_validate_ok() {
309+
let prevalidate_blobs = PrevalidateBlobs::<Test>::new();
310+
311+
let call = submit_blob_call!([blob_size] 1);
312+
assert_eq!(
313+
Ok(ValidTransaction::default()),
314+
prevalidate_blobs.validate(&alice(), &call, &Default::default(), 0)
315+
);
316+
}
317+
318+
#[test]
319+
fn test_validate_exceeded() {
320+
let prevalidate_blobs = PrevalidateBlobs::<Test>::new();
321+
322+
let max_blob_size: u32 = <Test as pallet_blobs::Config>::MaxBlobSize::get();
323+
let call = submit_blob_call!([blob_size] max_blob_size + 1);
324+
325+
assert_eq!(
326+
Err(TransactionValidityError::Invalid(
327+
InvalidTransaction::Custom(InvalidTransactionCustomError::BlobExceedsSizeLimit as u8)
328+
)),
329+
prevalidate_blobs.validate(&alice(), &call, &Default::default(), 0)
330+
);
331+
}
332+
333+
#[test]
334+
fn test_pre_dispatch_ok() {
335+
let prevalidate_blobs = PrevalidateBlobs::<Test>::new();
336+
337+
new_test_ext().execute_with(|| {
338+
let call = submit_blob_call!([blob_size] 1);
339+
assert_eq!(
340+
Ok(()),
341+
prevalidate_blobs.pre_dispatch(&alice(), &call, &Default::default(), 0)
342+
);
343+
});
344+
}
345+
346+
#[test]
347+
fn test_pre_dispatch_max_blobs_exceeded() {
348+
let prevalidate_blobs = PrevalidateBlobs::<Test>::new();
349+
let max_blobs: u32 = <Test as pallet_blobs::Config>::MaxBlobs::get();
350+
351+
new_test_ext().execute_with(|| {
352+
submit_blobs!([blob_size] 1, [blobs_number] max_blobs);
353+
354+
let call = submit_blob_call!([blob_size] 1);
355+
assert_eq!(
356+
Err(InvalidTransaction::ExhaustsResources.into()),
357+
prevalidate_blobs.pre_dispatch(&alice(), &call, &Default::default(), 0)
358+
);
359+
});
360+
}
361+
362+
#[test]
363+
fn test_pre_dispatch_max_total_blobs_size_reached() {
364+
let prevalidate_blobs = PrevalidateBlobs::<Test>::new();
365+
366+
let max_total_blobs_size: u32 = <Test as pallet_blobs::Config>::MaxTotalBlobSize::get();
367+
let max_blob_size: u32 = <Test as pallet_blobs::Config>::MaxBlobSize::get();
368+
let blobs_needed = max_total_blobs_size / max_blob_size;
369+
370+
new_test_ext().execute_with(|| {
371+
submit_blobs!([blob_size] max_blob_size, [blobs_number] blobs_needed);
372+
373+
let call = submit_blob_call!([blob_size] max_blob_size);
374+
assert_eq!(
375+
Err(InvalidTransaction::ExhaustsResources.into()),
376+
prevalidate_blobs.pre_dispatch(&alice(), &call, &Default::default(), 0)
377+
);
378+
});
379+
}

0 commit comments

Comments
 (0)