@@ -2,12 +2,7 @@ use std::collections::HashSet;
2
2
use std:: fs:: File ;
3
3
use std:: sync:: { Arc , LazyLock } ;
4
4
5
- use apollo_class_manager_types:: transaction_converter:: {
6
- MockTransactionConverterTrait ,
7
- TransactionConverter ,
8
- TransactionConverterError ,
9
- TransactionConverterResult ,
10
- } ;
5
+ use apollo_class_manager_types:: transaction_converter:: TransactionConverter ;
11
6
use apollo_class_manager_types:: { ClassHashes , EmptyClassManagerClient , MockClassManagerClient } ;
12
7
use apollo_config:: dumping:: SerializeConfig ;
13
8
use apollo_config:: loading:: load_and_process_config;
@@ -56,10 +51,8 @@ use metrics_exporter_prometheus::PrometheusBuilder;
56
51
use mockall:: predicate:: eq;
57
52
use rstest:: { fixture, rstest} ;
58
53
use starknet_api:: contract_class:: { ContractClass , SierraVersion } ;
59
- use starknet_api:: core:: { ClassHash , ContractAddress , Nonce } ;
60
- use starknet_api:: executable_transaction:: AccountTransaction ;
54
+ use starknet_api:: core:: { ContractAddress , Nonce } ;
61
55
use starknet_api:: rpc_transaction:: {
62
- InternalRpcTransaction ,
63
56
RpcDeclareTransaction ,
64
57
RpcTransaction ,
65
58
RpcTransactionLabelValue ,
@@ -113,18 +106,6 @@ fn mock_stateful_transaction_validator_factory() -> MockStatefulTransactionValid
113
106
MockStatefulTransactionValidatorFactoryTrait :: new ( )
114
107
}
115
108
116
- #[ fixture]
117
- fn mock_transaction_converter ( ) -> MockTransactionConverterTrait {
118
- let mut mock_transaction_converter = MockTransactionConverterTrait :: new ( ) ;
119
- mock_transaction_converter
120
- . expect_convert_rpc_tx_to_internal_rpc_tx ( )
121
- . return_once ( |_| Ok ( invoke_args ( ) . get_internal_tx ( ) ) ) ;
122
- mock_transaction_converter
123
- . expect_convert_internal_rpc_tx_to_executable_tx ( )
124
- . return_once ( |_| Ok ( executable_invoke_tx ( invoke_args ( ) ) ) ) ;
125
- mock_transaction_converter
126
- }
127
-
128
109
#[ fixture]
129
110
fn mock_stateless_transaction_validator ( ) -> MockStatelessTransactionValidatorTrait {
130
111
let mut mock_stateless_transaction_validator = MockStatelessTransactionValidatorTrait :: new ( ) ;
@@ -369,16 +350,14 @@ async fn run_add_tx_and_extract_metrics(
369
350
pub struct ProcessTxOverrides {
370
351
pub mock_stateful_transaction_validator_factory :
371
352
Option < MockStatefulTransactionValidatorFactoryTrait > ,
372
- pub mock_transaction_converter : Option < MockTransactionConverterTrait > ,
373
353
pub mock_stateless_transaction_validator : Option < MockStatelessTransactionValidatorTrait > ,
374
354
}
375
355
376
356
fn process_tx_task ( overrides : ProcessTxOverrides ) -> ProcessTxBlockingTask {
377
357
let mock_validator_factory = overrides
378
358
. mock_stateful_transaction_validator_factory
379
359
. unwrap_or_else ( mock_stateful_transaction_validator_factory) ;
380
- let mock_transaction_converter =
381
- overrides. mock_transaction_converter . unwrap_or_else ( mock_transaction_converter) ;
360
+
382
361
let mock_stateless_transaction_validator = overrides
383
362
. mock_stateless_transaction_validator
384
363
. unwrap_or_else ( mock_stateless_transaction_validator) ;
@@ -389,7 +368,8 @@ fn process_tx_task(overrides: ProcessTxOverrides) -> ProcessTxBlockingTask {
389
368
state_reader_factory : Arc :: new ( MockStateReaderFactory :: new ( ) ) ,
390
369
mempool_client : Arc :: new ( MockMempoolClient :: new ( ) ) ,
391
370
tx : invoke_args ( ) . get_rpc_tx ( ) ,
392
- transaction_converter : Arc :: new ( mock_transaction_converter) ,
371
+ internal_tx : invoke_args ( ) . get_internal_tx ( ) ,
372
+ executable_tx : executable_invoke_tx ( invoke_args ( ) ) ,
393
373
runtime : tokio:: runtime:: Handle :: current ( ) ,
394
374
}
395
375
}
@@ -491,6 +471,24 @@ async fn test_compiled_class_hash_mismatch(mut mock_dependencies: MockDependenci
491
471
assert_eq ! ( err. code, expected_code) ;
492
472
}
493
473
474
+ #[ rstest]
475
+ #[ tokio:: test]
476
+ async fn test_transaction_converter_error ( mut mock_dependencies : MockDependencies ) {
477
+ mock_dependencies. mock_mempool_client . expect_add_tx ( ) . never ( ) ;
478
+
479
+ let chain_id = mock_dependencies. config . chain_info . chain_id . clone ( ) ;
480
+ let gateway = Gateway :: new (
481
+ mock_dependencies. config ,
482
+ Arc :: new ( mock_dependencies. state_reader_factory ) ,
483
+ Arc :: new ( mock_dependencies. mock_mempool_client ) ,
484
+ // TODO(AlonH): use MockTransactionConverter.
485
+ TransactionConverter :: new ( Arc :: new ( EmptyClassManagerClient ) , chain_id) ,
486
+ ) ;
487
+
488
+ let err = gateway. add_tx ( declare_tx ( ) , None ) . await . unwrap_err ( ) ;
489
+ assert_matches ! ( err, StarknetError { code: StarknetErrorCode :: KnownErrorCode ( _) , message: _ } ) ;
490
+ }
491
+
494
492
#[ rstest]
495
493
#[ tokio:: test]
496
494
async fn test_block_declare_config (
@@ -718,42 +716,3 @@ async fn process_tx_returns_error_when_instantiating_validator_fails(
718
716
assert ! ( result. is_err( ) ) ;
719
717
assert_eq ! ( result. unwrap_err( ) . code, error_code) ;
720
718
}
721
-
722
- #[ rstest]
723
- #[ case:: rpc_to_internal_fails(
724
- Err ( TransactionConverterError :: ClassNotFound { class_hash: ClassHash :: default ( ) } ) ,
725
- // This value is never used because the first step already fails. Provided a valid executable tx to satisfy the signature.
726
- Ok ( executable_invoke_tx( invoke_args( ) ) ) ,
727
- ) ]
728
- #[ case:: internal_to_executable_fails(
729
- Ok ( invoke_args( ) . get_internal_tx( ) ) ,
730
- Err ( TransactionConverterError :: ClassNotFound { class_hash: ClassHash :: default ( ) } )
731
- ) ]
732
- #[ tokio:: test]
733
- async fn process_tx_conversion_errors_are_mapped_to_internal_error (
734
- #[ case] expect_internal_rpc_tx_result : TransactionConverterResult < InternalRpcTransaction > ,
735
- #[ case] expect_executable_tx_result : TransactionConverterResult < AccountTransaction > ,
736
- ) {
737
- let mut mock_transaction_converter = MockTransactionConverterTrait :: new ( ) ;
738
- mock_transaction_converter
739
- . expect_convert_rpc_tx_to_internal_rpc_tx ( )
740
- . return_once ( |_| expect_internal_rpc_tx_result) ;
741
- mock_transaction_converter
742
- . expect_convert_internal_rpc_tx_to_executable_tx ( )
743
- . return_once ( |_| expect_executable_tx_result) ;
744
-
745
- let overrides = ProcessTxOverrides {
746
- mock_transaction_converter : Some ( mock_transaction_converter) ,
747
- ..Default :: default ( )
748
- } ;
749
- let process_tx_task = process_tx_task ( overrides) ;
750
-
751
- let result = tokio:: task:: spawn_blocking ( move || process_tx_task. process_tx ( ) ) . await . unwrap ( ) ;
752
-
753
- assert ! ( result. is_err( ) ) ;
754
- // All TransactionConverter errors are mapped to InternalError.
755
- assert_eq ! (
756
- result. unwrap_err( ) . code,
757
- StarknetErrorCode :: UnknownErrorCode ( "StarknetErrorCode.InternalError" . into( ) )
758
- ) ;
759
- }
0 commit comments