@@ -168,12 +168,12 @@ fn abort_signal_sender() -> AbortSignalSender {
168
168
169
169
async fn batcher_propose_and_commit_block (
170
170
mock_dependencies : MockDependencies ,
171
- ) -> DecisionReachedResponse {
171
+ ) -> Result < DecisionReachedResponse , BatcherError > {
172
172
let mut batcher = create_batcher ( mock_dependencies) . await ;
173
173
batcher. start_height ( StartHeightInput { height : INITIAL_HEIGHT } ) . await . unwrap ( ) ;
174
174
batcher. propose_block ( propose_block_input ( PROPOSAL_ID ) ) . await . unwrap ( ) ;
175
175
batcher. await_active_proposal ( ) . await ;
176
- batcher. decision_reached ( DecisionReachedInput { proposal_id : PROPOSAL_ID } ) . await . unwrap ( )
176
+ batcher. decision_reached ( DecisionReachedInput { proposal_id : PROPOSAL_ID } ) . await
177
177
}
178
178
179
179
fn mock_create_builder_for_validate_block (
@@ -1000,7 +1000,8 @@ async fn decision_reached() {
1000
1000
Ok ( BlockExecutionArtifacts :: create_for_testing ( ) ) ,
1001
1001
) ;
1002
1002
1003
- let decision_reached_response = batcher_propose_and_commit_block ( mock_dependencies) . await ;
1003
+ let decision_reached_response =
1004
+ batcher_propose_and_commit_block ( mock_dependencies) . await . unwrap ( ) ;
1004
1005
1005
1006
verify_decision_reached_response ( & decision_reached_response, & expected_artifacts) ;
1006
1007
@@ -1054,7 +1055,8 @@ async fn test_execution_info_order_is_kept() {
1054
1055
Ok ( block_builder_result. clone ( ) ) ,
1055
1056
) ;
1056
1057
1057
- let decision_reached_response = batcher_propose_and_commit_block ( mock_dependencies) . await ;
1058
+ let decision_reached_response =
1059
+ batcher_propose_and_commit_block ( mock_dependencies) . await . unwrap ( ) ;
1058
1060
1059
1061
// Verify that the execution_infos are in the same order as returned from the block_builder.
1060
1062
let expected_execution_infos: Vec < TransactionExecutionInfo > =
@@ -1097,3 +1099,45 @@ fn validate_batcher_config_failure() {
1097
1099
. contains( "input_stream_content_buffer_size must be at least tx_chunk_size" )
1098
1100
) ;
1099
1101
}
1102
+
1103
+ #[ rstest]
1104
+ #[ case:: communication_failure(
1105
+ L1ProviderClientError :: ClientError ( ClientError :: CommunicationFailure ( "L1 commit failed" . to_string( ) ) )
1106
+ ) ]
1107
+ #[ case:: unexpected_height(
1108
+ L1ProviderClientError :: L1ProviderError ( L1ProviderError :: UnexpectedHeight {
1109
+ expected_height: INITIAL_HEIGHT ,
1110
+ got: INITIAL_HEIGHT ,
1111
+ } )
1112
+ ) ]
1113
+ #[ tokio:: test]
1114
+ async fn decision_reached_return_error_when_l1_commit_block_fails (
1115
+ #[ case] l1_error : L1ProviderClientError ,
1116
+ ) {
1117
+ // Setup mocks
1118
+ let mut mock_dependencies = MockDependencies :: default ( ) ;
1119
+
1120
+ mock_dependencies. l1_provider_client . expect_start_block ( ) . returning ( |_, _| Ok ( ( ) ) ) ;
1121
+
1122
+ mock_dependencies
1123
+ . l1_provider_client
1124
+ . expect_commit_block ( )
1125
+ . times ( 1 )
1126
+ . returning ( move |_, _, _| Err ( l1_error. clone ( ) ) ) ;
1127
+
1128
+ mock_dependencies. mempool_client . expect_commit_block ( ) . times ( 1 ) . returning ( |_| Ok ( ( ) ) ) ;
1129
+
1130
+ mock_dependencies. storage_writer . expect_commit_proposal ( ) . returning ( |_, _| Ok ( ( ) ) ) ;
1131
+
1132
+ mock_dependencies. storage_writer . expect_revert_block ( ) . returning ( |_| ( ) ) ;
1133
+
1134
+ // let expected_artifacts = BlockExecutionArtifacts::create_for_testing();
1135
+ mock_create_builder_for_propose_block (
1136
+ & mut mock_dependencies. block_builder_factory ,
1137
+ vec ! [ ] ,
1138
+ Ok ( BlockExecutionArtifacts :: create_for_testing ( ) ) ,
1139
+ ) ;
1140
+
1141
+ let result = batcher_propose_and_commit_block ( mock_dependencies) . await ;
1142
+ assert ! ( result. is_err( ) ) ;
1143
+ }
0 commit comments