diff --git a/client/src/mock_sender.rs b/client/src/mock_sender.rs index c13caaaf48..8803928a11 100644 --- a/client/src/mock_sender.rs +++ b/client/src/mock_sender.rs @@ -5,7 +5,8 @@ use { client_error::Result, rpc_request::RpcRequest, rpc_response::{ - Response, RpcResponseContext, RpcSimulateTransactionResult, RpcVersionInfo, + Response, RpcBlockProduction, RpcBlockProductionRange, RpcResponseContext, + RpcSimulateTransactionResult, RpcVersionInfo, }, rpc_sender::RpcSender, }, @@ -186,6 +187,19 @@ impl RpcSender for MockSender { feature_set: Some(version.feature_set), }) } + "getBlockProduction" => { + let map = vec![(PUBKEY.to_string(), (1, 1))].into_iter().collect(); + json!(Response { + context: RpcResponseContext { slot: 1 }, + value: RpcBlockProduction { + by_identity: map, + range: RpcBlockProductionRange { + first_slot: 0, + last_slot: 0, + }, + }, + }) + } _ => Value::Null, }; Ok(val) diff --git a/client/src/rpc_client.rs b/client/src/rpc_client.rs index 7968e69776..eaaf5cbf26 100644 --- a/client/src/rpc_client.rs +++ b/client/src/rpc_client.rs @@ -895,7 +895,7 @@ impl RpcClient { &self, config: RpcBlockProductionConfig, ) -> RpcResult { - self.send(RpcRequest::GetBlockProduction, json!(config)) + self.send(RpcRequest::GetBlockProduction, json!([config])) } pub fn get_stake_activation( @@ -2658,4 +2658,23 @@ mod tests { let rpc_client = RpcClient::new_mock("succeeds".to_string()); thread::spawn(move || rpc_client); } + + // Regression test that the get_block_production_with_config + // method internally creates the json params array correctly. + #[test] + fn get_block_production_with_config_no_error() -> ClientResult<()> { + let rpc_client = RpcClient::new_mock("succeeds".to_string()); + + let config = RpcBlockProductionConfig { + identity: None, + range: None, + commitment: None, + }; + + let prod = rpc_client.get_block_production_with_config(config)?.value; + + assert!(!prod.by_identity.is_empty()); + + Ok(()) + } }