@@ -168,6 +168,7 @@ async fn parse_block_inputs(
168168 }
169169}
170170
171+ #[ derive( Clone , Debug ) ]
171172enum RangePosition {
172173 First ,
173174 Last ,
@@ -322,15 +323,14 @@ async fn parse_block_number(
322323 source : Arc < Source > ,
323324) -> Result < u64 , ParseError > {
324325 match ( block_ref, range_position) {
325- ( "latest" , _) => source. get_block_number ( ) . await . map ( |n| n . as_u64 ( ) ) . map_err ( |_e| {
326+ ( "latest" , _) => source. get_block_number ( ) . await . map_err ( |_e| {
326327 ParseError :: ParseError ( "Error retrieving latest block number" . to_string ( ) )
327328 } ) ,
328329 ( "" , RangePosition :: First ) => Ok ( 0 ) ,
329- ( "" , RangePosition :: Last ) => {
330- source. get_block_number ( ) . await . map ( |n| n. as_u64 ( ) ) . map_err ( |_e| {
331- ParseError :: ParseError ( "Error retrieving last block number" . to_string ( ) )
332- } )
333- }
330+ ( "" , RangePosition :: Last ) => source
331+ . get_block_number ( )
332+ . await
333+ . map_err ( |_e| ParseError :: ParseError ( "Error retrieving last block number" . to_string ( ) ) ) ,
334334 ( "" , RangePosition :: None ) => Err ( ParseError :: ParseError ( "invalid input" . to_string ( ) ) ) ,
335335 _ if block_ref. ends_with ( 'B' ) | block_ref. ends_with ( 'b' ) => {
336336 let s = & block_ref[ ..block_ref. len ( ) - 1 ] ;
@@ -366,7 +366,7 @@ async fn apply_reorg_buffer(
366366 0 => Ok ( block_chunks) ,
367367 reorg_filter => {
368368 let latest_block = match source. get_block_number ( ) . await {
369- Ok ( result) => result. as_u64 ( ) ,
369+ Ok ( result) => result,
370370 Err ( _e) => {
371371 return Err ( ParseError :: ParseError ( "reorg buffer parse error" . to_string ( ) ) )
372372 }
@@ -387,24 +387,34 @@ pub(crate) async fn get_latest_block_number(source: Arc<Source>) -> Result<u64,
387387 source
388388 . get_block_number ( )
389389 . await
390- . map ( |n| n. as_u64 ( ) )
391390 . map_err ( |_e| ParseError :: ParseError ( "Error retrieving latest block number" . to_string ( ) ) )
392391}
393392
394393#[ cfg( test) ]
395394mod tests {
395+ use std:: path:: PathBuf ;
396+
397+ use alloy:: {
398+ providers:: { IpcConnect , ProviderBuilder } ,
399+ transports:: ipc:: MockIpcServer ,
400+ } ;
401+
396402 use super :: * ;
397- use ethers:: prelude:: * ;
398403
404+ #[ derive( Clone , Debug ) ]
399405 enum BlockTokenTest < ' a > {
400406 WithoutMock ( ( & ' a str , BlockChunk ) ) , // Token | Expected
401407 WithMock ( ( & ' a str , BlockChunk , u64 ) ) , // Token | Expected | Mock Block Response
402408 }
403409
404- async fn block_token_test_helper ( tests : Vec < ( BlockTokenTest < ' _ > , bool ) > ) {
405- let ( provider, mock) = Provider :: mocked ( ) ;
410+ async fn block_token_test_helper (
411+ tests : Vec < ( BlockTokenTest < ' _ > , bool ) > ,
412+ mock_ipc_path : PathBuf ,
413+ ) {
414+ let ipc = IpcConnect :: new ( mock_ipc_path) ;
415+ let provider = ProviderBuilder :: new ( ) . on_ipc ( ipc) . await . unwrap ( ) . boxed ( ) ;
406416 let source = Source {
407- provider : provider . into ( ) ,
417+ provider,
408418 semaphore : Arc :: new ( None ) ,
409419 rate_limiter : Arc :: new ( None ) ,
410420 chain_id : 1 ,
@@ -416,8 +426,7 @@ mod tests {
416426 let source = Arc :: new ( source) ;
417427 for ( test, res) in tests {
418428 match test {
419- BlockTokenTest :: WithMock ( ( token, expected, latest) ) => {
420- mock. push ( U64 :: from ( latest) ) . unwrap ( ) ;
429+ BlockTokenTest :: WithMock ( ( token, expected, _latest) ) => {
421430 assert_eq ! (
422431 block_token_test_executor( token, expected, source. clone( ) ) . await ,
423432 res
@@ -458,15 +467,20 @@ mod tests {
458467 }
459468 }
460469
470+ #[ derive( Clone , Debug ) ]
461471 enum BlockInputTest < ' a > {
462472 WithoutMock ( ( & ' a String , Vec < BlockChunk > ) ) , // Token | Expected
463473 WithMock ( ( & ' a String , Vec < BlockChunk > , u64 ) ) , // Token | Expected | Mock Block Response
464474 }
465475
466- async fn block_input_test_helper ( tests : Vec < ( BlockInputTest < ' _ > , bool ) > ) {
467- let ( provider, mock) = Provider :: mocked ( ) ;
476+ async fn block_input_test_helper (
477+ tests : Vec < ( BlockInputTest < ' _ > , bool ) > ,
478+ mock_ipc_path : PathBuf ,
479+ ) {
480+ let ipc = IpcConnect :: new ( mock_ipc_path) ;
481+ let provider = ProviderBuilder :: new ( ) . on_ipc ( ipc) . await . unwrap ( ) . boxed ( ) ;
468482 let source = Arc :: new ( Source {
469- provider : provider . into ( ) ,
483+ provider,
470484 chain_id : 1 ,
471485 rpc_url : "" . to_string ( ) ,
472486 inner_request_size : 1 ,
@@ -477,8 +491,7 @@ mod tests {
477491 } ) ;
478492 for ( test, res) in tests {
479493 match test {
480- BlockInputTest :: WithMock ( ( inputs, expected, latest) ) => {
481- mock. push ( U64 :: from ( latest) ) . unwrap ( ) ;
494+ BlockInputTest :: WithMock ( ( inputs, expected, _latest) ) => {
482495 assert_eq ! (
483496 block_input_test_executor( inputs, expected, source. clone( ) ) . await ,
484497 res
@@ -531,15 +544,20 @@ mod tests {
531544 true
532545 }
533546
547+ #[ derive( Clone , Debug ) ]
534548 enum BlockNumberTest < ' a > {
535549 WithoutMock ( ( & ' a str , RangePosition , u64 ) ) ,
536550 WithMock ( ( & ' a str , RangePosition , u64 , u64 ) ) ,
537551 }
538552
539- async fn block_number_test_helper ( tests : Vec < ( BlockNumberTest < ' _ > , bool ) > ) {
540- let ( provider, mock) = Provider :: mocked ( ) ;
553+ async fn block_number_test_helper (
554+ tests : Vec < ( BlockNumberTest < ' _ > , bool ) > ,
555+ mock_ipc_path : PathBuf ,
556+ ) {
557+ let provider =
558+ ProviderBuilder :: new ( ) . on_ipc ( IpcConnect :: new ( mock_ipc_path) ) . await . unwrap ( ) . boxed ( ) ;
541559 let source = Source {
542- provider : provider . into ( ) ,
560+ provider,
543561 semaphore : Arc :: new ( None ) ,
544562 rate_limiter : Arc :: new ( None ) ,
545563 chain_id : 1 ,
@@ -551,8 +569,7 @@ mod tests {
551569 let source = Arc :: new ( source) ;
552570 for ( test, res) in tests {
553571 match test {
554- BlockNumberTest :: WithMock ( ( block_ref, range_position, expected, latest) ) => {
555- mock. push ( U64 :: from ( latest) ) . unwrap ( ) ;
572+ BlockNumberTest :: WithMock ( ( block_ref, range_position, expected, _latest) ) => {
556573 assert_eq ! (
557574 block_number_test_executor(
558575 block_ref,
@@ -604,7 +621,18 @@ mod tests {
604621 // Number type
605622 ( BlockTokenTest :: WithoutMock ( ( r"1" , BlockChunk :: Numbers ( vec![ 1 ] ) ) ) , true ) , /* Single block */
606623 ] ;
607- block_token_test_helper ( tests) . await ;
624+ let mut mock_server = MockIpcServer :: new ( ) ;
625+ let mock_ipc_path = mock_server. path ( ) . clone ( ) ;
626+ for ( test, _) in tests. clone ( ) . into_iter ( ) {
627+ match test {
628+ BlockTokenTest :: WithoutMock ( _) => { }
629+ BlockTokenTest :: WithMock ( ( _, _, mock_response) ) => {
630+ mock_server. add_reply ( mock_response)
631+ }
632+ }
633+ }
634+ mock_server. spawn ( ) . await ;
635+ block_token_test_helper ( tests, mock_ipc_path) . await ;
608636 }
609637
610638 #[ tokio:: test]
@@ -648,7 +676,16 @@ mod tests {
648676 true ,
649677 ) , // Multi input complex
650678 ] ;
651- block_input_test_helper ( tests) . await ;
679+ let mut mock_server = MockIpcServer :: new ( ) ;
680+ let mock_ipc_path = mock_server. path ( ) . clone ( ) ;
681+ for ( test, _) in tests. clone ( ) {
682+ match test {
683+ BlockInputTest :: WithMock ( ( _, _, expected) ) => mock_server. add_reply ( expected) ,
684+ BlockInputTest :: WithoutMock ( _) => { }
685+ }
686+ }
687+ mock_server. spawn ( ) . await ;
688+ block_input_test_helper ( tests, mock_ipc_path) . await ;
652689 }
653690
654691 #[ tokio:: test]
@@ -666,6 +703,15 @@ mod tests {
666703 ( BlockNumberTest :: WithoutMock ( ( r"1m" , RangePosition :: None , 1000000 ) ) , true ) , // m
667704 ( BlockNumberTest :: WithoutMock ( ( r"1k" , RangePosition :: None , 1000 ) ) , true ) , // k
668705 ] ;
669- block_number_test_helper ( tests) . await ;
706+ let mut mock_server = MockIpcServer :: new ( ) ;
707+ let mock_ipc_path = mock_server. path ( ) . clone ( ) ;
708+ for ( test, _) in tests. clone ( ) {
709+ match test {
710+ BlockNumberTest :: WithMock ( ( _, _, _, expected) ) => mock_server. add_reply ( expected) ,
711+ BlockNumberTest :: WithoutMock ( _) => { }
712+ }
713+ }
714+ mock_server. spawn ( ) . await ;
715+ block_number_test_helper ( tests, mock_ipc_path) . await ;
670716 }
671717}
0 commit comments