Skip to content

Commit f7d2045

Browse files
committed
fix: Adding test and using existing method
1 parent efe18ea commit f7d2045

File tree

6 files changed

+37
-113
lines changed

6 files changed

+37
-113
lines changed

src/services/blockchain/client.rs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,6 @@ pub trait BlockChainClient: Send + Sync + Clone {
3636
start_block: u64,
3737
end_block: Option<u64>,
3838
) -> Result<Vec<BlockType>, anyhow::Error>;
39-
40-
/// Retrieves a specific block by its number
41-
///
42-
/// # Arguments
43-
/// * `block_number` - The block number to retrieve
44-
///
45-
/// # Returns
46-
/// * `Result<Option<BlockType>, anyhow::Error>`
47-
async fn get_block_by_number(
48-
&self,
49-
block_number: &u64,
50-
) -> Result<Option<BlockType>, anyhow::Error>;
5139
}
5240

5341
/// Defines the factory interface for creating block filters

src/services/blockchain/clients/evm/client.rs

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -244,32 +244,4 @@ impl<T: Send + Sync + Clone + BlockchainTransport> BlockChainClient for EvmClien
244244
.into_iter()
245245
.collect::<Result<Vec<_>, _>>()
246246
}
247-
248-
async fn get_block_by_number(
249-
&self,
250-
block_number: &u64,
251-
) -> Result<Option<BlockType>, anyhow::Error> {
252-
let client = self.alloy_client.clone();
253-
let params = json!([
254-
format!("0x{:x}", block_number),
255-
true // include full transaction objects
256-
]);
257-
let response = client
258-
.send_raw_request("eth_getBlockByNumber", Some(params))
259-
.await
260-
.with_context(|| format!("Failed to get block: {}", block_number))?;
261-
262-
let block_data = response
263-
.get("result")
264-
.ok_or_else(|| anyhow::anyhow!("Missing 'result' field"))?;
265-
266-
if block_data.is_null() {
267-
return Ok(None);
268-
}
269-
270-
let block: EVMBlock = serde_json::from_value(block_data.clone())
271-
.map_err(|e| anyhow::anyhow!("Failed to parse block: {}", e))?;
272-
273-
Ok(Some(BlockType::EVM(Box::new(block))))
274-
}
275247
}

src/services/blockchain/clients/stellar/client.rs

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -350,33 +350,4 @@ impl<T: Send + Sync + Clone + BlockchainTransport> BlockChainClient for StellarC
350350
}
351351
Ok(blocks)
352352
}
353-
354-
/// Retrieves a block by number
355-
///
356-
/// # Errors
357-
/// - Returns `BlockChainError::RequestError` if a block cannot be retrieved
358-
#[instrument(skip(self), fields(block_number))]
359-
async fn get_block_by_number(
360-
&self,
361-
block_number: &u64,
362-
) -> Result<Option<BlockType>, anyhow::Error> {
363-
let params = json!({
364-
"startLedger": block_number,
365-
"pagination": {
366-
"limit": 1
367-
}
368-
});
369-
370-
let response = self
371-
.stellar_client
372-
.send_raw_request("getLedgers", Some(params))
373-
.await
374-
.with_context(|| format!("Failed to fetch ledger number {}", block_number))?;
375-
376-
let ledgers: Vec<StellarBlock> =
377-
serde_json::from_value(response["result"]["ledgers"].clone())
378-
.with_context(|| "Failed to parse ledger response")?;
379-
380-
Ok(Some(BlockType::Stellar(Box::new(ledgers[0].clone()))))
381-
}
382353
}

src/utils/monitor/execution.rs

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,15 @@ pub async fn execute_monitor<T: ClientPoolTrait, N: NetworkRepositoryTrait>(
8484
)
8585
})?;
8686

87-
let block = client
88-
.get_block_by_number(block_number)
89-
.await
90-
.map_err(|e| {
91-
MonitorExecutionError::execution_error(
92-
format!("Failed to get block {}: {}", block_number, e),
93-
None,
94-
None,
95-
)
96-
})?;
87+
let blocks = client.get_blocks(*block_number, None).await.map_err(|e| {
88+
MonitorExecutionError::execution_error(
89+
format!("Failed to get block {}: {}", block_number, e),
90+
None,
91+
None,
92+
)
93+
})?;
9794

98-
let block = block.ok_or_else(|| {
95+
let block = blocks.first().ok_or_else(|| {
9996
MonitorExecutionError::execution_error(
10097
format!("Block {} not found", block_number),
10198
None,
@@ -104,7 +101,7 @@ pub async fn execute_monitor<T: ClientPoolTrait, N: NetworkRepositoryTrait>(
104101
})?;
105102

106103
filter_service
107-
.filter_block(&*client, &network, &block, &[monitor.clone()])
104+
.filter_block(&*client, &network, block, &[monitor.clone()])
108105
.await
109106
.map_err(|e| {
110107
MonitorExecutionError::execution_error(
@@ -127,18 +124,15 @@ pub async fn execute_monitor<T: ClientPoolTrait, N: NetworkRepositoryTrait>(
127124
)
128125
})?;
129126

130-
let block = client
131-
.get_block_by_number(block_number)
132-
.await
133-
.map_err(|e| {
134-
MonitorExecutionError::execution_error(
135-
format!("Failed to get block {}: {}", block_number, e),
136-
None,
137-
None,
138-
)
139-
})?;
127+
let blocks = client.get_blocks(*block_number, None).await.map_err(|e| {
128+
MonitorExecutionError::execution_error(
129+
format!("Failed to get block {}: {}", block_number, e),
130+
None,
131+
None,
132+
)
133+
})?;
140134

141-
let block = block.ok_or_else(|| {
135+
let block = blocks.first().ok_or_else(|| {
142136
MonitorExecutionError::execution_error(
143137
format!("Block {} not found", block_number),
144138
None,
@@ -147,7 +141,7 @@ pub async fn execute_monitor<T: ClientPoolTrait, N: NetworkRepositoryTrait>(
147141
})?;
148142

149143
filter_service
150-
.filter_block(&*client, &network, &block, &[monitor.clone()])
144+
.filter_block(&*client, &network, block, &[monitor.clone()])
151145
.await
152146
.map_err(|e| {
153147
MonitorExecutionError::execution_error(

tests/integration/mocks/clients.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,6 @@ mock! {
4646
start_block: u64,
4747
end_block: Option<u64>,
4848
) -> Result<Vec<BlockType>, anyhow::Error>;
49-
async fn get_block_by_number(
50-
&self,
51-
block_number: &u64,
52-
) -> Result<Option<BlockType>, anyhow::Error>;
5349
}
5450

5551
#[async_trait]
@@ -90,10 +86,6 @@ mock! {
9086
start_block: u64,
9187
end_block: Option<u64>,
9288
) -> Result<Vec<BlockType>, anyhow::Error>;
93-
async fn get_block_by_number(
94-
&self,
95-
block_number: &u64,
96-
) -> Result<Option<BlockType>, anyhow::Error>;
9789
}
9890

9991
#[async_trait]

tests/integration/monitor/execution.rs

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use crate::integration::{
55
MockStellarClientTrait,
66
},
77
};
8+
use mockall::predicate;
89
use openzeppelin_monitor::{
910
models::{BlockChainType, EVMTransactionReceipt},
1011
repositories::NetworkService,
@@ -37,8 +38,9 @@ async fn test_execute_monitor_evm() {
3738
let mut mock_client = MockEvmClientTrait::new();
3839

3940
mock_client
40-
.expect_get_block_by_number()
41-
.return_once(move |_| Ok(Some(test_data.blocks[0].clone())));
41+
.expect_get_blocks()
42+
.with(predicate::eq(21305050u64), predicate::eq(None))
43+
.return_once(move |_, _| Ok(test_data.blocks.clone()));
4244

4345
let receipts = test_data.receipts.clone();
4446
let receipt_map: std::collections::HashMap<String, EVMTransactionReceipt> = receipts
@@ -120,8 +122,9 @@ async fn test_execute_monitor_evm_wrong_block_number() {
120122
let mut mock_client = MockEvmClientTrait::new();
121123

122124
mock_client
123-
.expect_get_block_by_number()
124-
.return_once(move |_| Ok(None));
125+
.expect_get_blocks()
126+
.with(predicate::eq(1u64), predicate::eq(None))
127+
.return_once(move |_, _| Ok(vec![]));
125128

126129
mock_pool
127130
.expect_get_evm_client()
@@ -151,8 +154,9 @@ async fn test_execute_monitor_evm_failed_to_get_block_by_number() {
151154
let mut mock_client = MockEvmClientTrait::new();
152155

153156
mock_client
154-
.expect_get_block_by_number()
155-
.return_once(move |_| Err(anyhow::anyhow!("Failed to get block by number")));
157+
.expect_get_blocks()
158+
.with(predicate::eq(1u64), predicate::eq(None))
159+
.return_once(move |_, _| Err(anyhow::anyhow!("Failed to get block by number")));
156160

157161
mock_pool
158162
.expect_get_evm_client()
@@ -209,8 +213,9 @@ async fn test_execute_monitor_stellar() {
209213
let mut mock_client = MockStellarClientTrait::new();
210214

211215
mock_client
212-
.expect_get_block_by_number()
213-
.return_once(move |_| Ok(Some(test_data.blocks[0].clone())));
216+
.expect_get_blocks()
217+
.with(predicate::eq(172627u64), predicate::eq(None))
218+
.return_once(move |_, _| Ok(test_data.blocks.clone()));
214219
mock_client
215220
.expect_get_transactions()
216221
.return_once(move |_, _| Ok(test_data.stellar_transactions.clone()));
@@ -279,8 +284,9 @@ async fn test_execute_monitor_failed_to_get_block() {
279284
let mut mock_client = MockStellarClientTrait::new();
280285

281286
mock_client
282-
.expect_get_block_by_number()
283-
.return_once(move |_| Ok(None));
287+
.expect_get_blocks()
288+
.with(predicate::eq(172627u64), predicate::eq(None))
289+
.return_once(move |_, _| Ok(vec![]));
284290

285291
mock_pool
286292
.expect_get_stellar_client()
@@ -336,8 +342,9 @@ async fn test_execute_monitor_failed_to_get_block_by_number() {
336342
let mut mock_client = MockStellarClientTrait::new();
337343

338344
mock_client
339-
.expect_get_block_by_number()
340-
.return_once(move |_| Err(anyhow::anyhow!("Failed to get block by number")));
345+
.expect_get_blocks()
346+
.with(predicate::eq(172627u64), predicate::eq(None))
347+
.return_once(move |_, _| Err(anyhow::anyhow!("Failed to get block by number")));
341348

342349
mock_pool
343350
.expect_get_stellar_client()

0 commit comments

Comments
 (0)