@@ -98,6 +98,7 @@ use crate::state_reader_test_utils::{local_test_state_reader_factory, TestStateR
9898use crate :: stateful_transaction_validator:: {
9999 MockStatefulTransactionValidatorFactoryTrait ,
100100 MockStatefulTransactionValidatorTrait ,
101+ StatefulTransactionValidatorFactoryTrait ,
101102} ;
102103use crate :: stateless_transaction_validator:: MockStatelessTransactionValidatorTrait ;
103104
@@ -315,12 +316,18 @@ async fn run_add_tx_and_extract_metrics(
315316 AddTxResults { result, metric_handle_for_queries, metrics }
316317}
317318
318- fn process_tx_task (
319+ async fn process_tx_task (
319320 stateful_transaction_validator_factory : MockStatefulTransactionValidatorFactoryTrait ,
320321) -> ProcessTxBlockingTask {
322+ let state_reader_factory = Arc :: new ( MockStateReaderFactory :: new ( ) ) ;
323+ let stateful_tx_validator = StatefulTransactionValidatorFactoryTrait :: instantiate_validator (
324+ & stateful_transaction_validator_factory,
325+ state_reader_factory,
326+ )
327+ . await
328+ . expect ( "instantiate_validator should be mocked in tests" ) ;
321329 ProcessTxBlockingTask {
322- stateful_tx_validator_factory : Arc :: new ( stateful_transaction_validator_factory) ,
323- state_reader_factory : Arc :: new ( MockStateReaderFactory :: new ( ) ) ,
330+ stateful_transaction_validator : stateful_tx_validator,
324331 mempool_client : Arc :: new ( MockMempoolClient :: new ( ) ) ,
325332 executable_tx : executable_invoke_tx ( invoke_args ( ) ) ,
326333 runtime : tokio:: runtime:: Handle :: current ( ) ,
@@ -567,7 +574,7 @@ async fn process_tx_returns_error_when_extract_state_nonce_and_run_validations_f
567574 . expect_instantiate_validator ( )
568575 . return_once ( |_| Ok ( Box :: new ( mock_stateful_transaction_validator) ) ) ;
569576
570- let process_tx_task = process_tx_task ( mock_stateful_transaction_validator_factory) ;
577+ let process_tx_task = process_tx_task ( mock_stateful_transaction_validator_factory) . await ;
571578
572579 let result = tokio:: task:: spawn_blocking ( move || process_tx_task. process_tx ( ) ) . await . unwrap ( ) ;
573580
@@ -598,22 +605,25 @@ async fn stateless_transaction_validator_error(mut mock_dependencies: MockDepend
598605
599606#[ rstest]
600607#[ tokio:: test]
601- async fn process_tx_returns_error_when_instantiating_validator_fails (
608+ async fn add_tx_returns_error_when_instantiating_validator_fails (
609+ mut mock_dependencies : MockDependencies ,
602610 mut mock_stateful_transaction_validator_factory : MockStatefulTransactionValidatorFactoryTrait ,
603611) {
612+ // Prepare transaction conversion to reach instantiation.
613+ let tx_args = invoke_args ( ) ;
614+ setup_transaction_converter_mock ( & mut mock_dependencies. mock_transaction_converter , & tx_args) ;
615+
616+ // Fail validator instantiation.
604617 let error_code = StarknetErrorCode :: UnknownErrorCode ( "StarknetErrorCode.InternalError" . into ( ) ) ;
605- let expected_error = StarknetError {
606- code : error_code. clone ( ) ,
607- message : "placeholder" . into ( ) , // Message is not checked
608- } ;
618+ let expected_error = StarknetError { code : error_code. clone ( ) , message : "placeholder" . into ( ) } ;
609619 mock_stateful_transaction_validator_factory
610620 . expect_instantiate_validator ( )
611621 . return_once ( |_| Err ( expected_error) ) ;
612622
613- let process_tx_task = process_tx_task ( mock_stateful_transaction_validator_factory ) ;
614-
615- let result = tokio :: task :: spawn_blocking ( move || process_tx_task . process_tx ( ) ) . await . unwrap ( ) ;
623+ // Build gateway and inject the failing factory.
624+ let mut gateway = mock_dependencies . gateway ( ) ;
625+ gateway . stateful_tx_validator_factory = Arc :: new ( mock_stateful_transaction_validator_factory ) ;
616626
617- assert ! ( result . is_err ( ) ) ;
618- assert_eq ! ( result . unwrap_err ( ) . code, error_code) ;
627+ let err = gateway . add_tx ( tx_args . get_rpc_tx ( ) , p2p_message_metadata ( ) ) . await . unwrap_err ( ) ;
628+ assert_eq ! ( err . code, error_code) ;
619629}
0 commit comments