@@ -5,13 +5,13 @@ use frame_support::traits::Hooks;
5
5
use frame_support:: { assert_noop, assert_ok, traits:: Get , BoundedVec } ;
6
6
use sha2:: Digest ;
7
7
use sp_core:: { crypto:: Pair , sr25519} ;
8
+ use sp_runtime:: transaction_validity:: {
9
+ InvalidTransaction , TransactionValidityError , ValidTransaction ,
10
+ } ;
8
11
use sugondat_nmt:: { Namespace , NmtLeaf } ;
9
12
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 )
15
15
}
16
16
17
17
fn alice ( ) -> <Test as frame_system:: Config >:: AccountId {
@@ -35,7 +35,7 @@ fn test_correct_submitted_blob() {
35
35
) ) ;
36
36
37
37
assert_eq ! ( TotalBlobs :: <Test >:: get( ) , 1 ) ;
38
- assert_eq ! ( TotalBlobsSize :: <Test >:: get( ) , blob_len) ;
38
+ assert_eq ! ( TotalBlobSize :: <Test >:: get( ) , blob_len) ;
39
39
let blob_list = SubmittedBlobMetadata {
40
40
who : alice ( ) ,
41
41
extrinsic_index : 0 ,
@@ -88,7 +88,7 @@ fn test_max_blobs_exceeded() {
88
88
}
89
89
90
90
#[ test]
91
- fn test_max_total_blob_size_reached ( ) {
91
+ fn test_max_total_blobs_size_reached ( ) {
92
92
let max_total_blobs_size: u32 = <Test as pallet_blobs:: Config >:: MaxTotalBlobSize :: get ( ) ;
93
93
let max_blob_size: u32 = <Test as pallet_blobs:: Config >:: MaxBlobSize :: get ( ) ;
94
94
let blobs_needed = max_total_blobs_size / max_blob_size;
@@ -100,7 +100,7 @@ fn test_max_total_blob_size_reached() {
100
100
101
101
#[ test]
102
102
#[ should_panic = "Maximum total blob size exceeded" ]
103
- fn test_max_total_blob_size_exceeded ( ) {
103
+ fn test_max_total_blobs_size_exceeded ( ) {
104
104
let max_total_blobs_size: u32 = <Test as pallet_blobs:: Config >:: MaxTotalBlobSize :: get ( ) ;
105
105
let max_blob_size: u32 = <Test as pallet_blobs:: Config >:: MaxBlobSize :: get ( ) ;
106
106
let blobs_needed = max_total_blobs_size / max_blob_size;
@@ -190,7 +190,7 @@ fn test_namespace_order() {
190
190
submit_blob ( 1 << 8 , 2 ) ;
191
191
submit_blob ( 1 , 3 ) ;
192
192
193
- assert_eq ! ( TotalBlobsSize :: <Test >:: get( ) , blob_len * 4 ) ;
193
+ assert_eq ! ( TotalBlobSize :: <Test >:: get( ) , blob_len * 4 ) ;
194
194
assert_eq ! ( BlobList :: <Test >:: get( ) . to_vec( ) , blobs_metadata) ;
195
195
196
196
Blobs :: on_finalize ( System :: block_number ( ) ) ;
@@ -291,3 +291,89 @@ fn test_on_finalize() {
291
291
} ) ;
292
292
}
293
293
}
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