Skip to content

Commit 5d14a0b

Browse files
committed
add test
move
1 parent d164191 commit 5d14a0b

File tree

1 file changed

+41
-9
lines changed

1 file changed

+41
-9
lines changed

src/block_range_scanner.rs

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -386,15 +386,9 @@ impl<N: Network> Service<N> {
386386
Command::StreamFrom { sender, start_height, response } => {
387387
self.ensure_no_subscriber()?;
388388
self.subscriber = Some(sender);
389-
if matches!(start_height, BlockNumberOrTag::Latest) {
390-
let result = self.handle_live().await;
391-
info!("Starting live stream");
392-
let _ = response.send(result);
393-
} else {
394-
info!(start_height = ?start_height, "Starting streaming from");
395-
let result = self.handle_sync(start_height).await;
396-
let _ = response.send(result);
397-
}
389+
info!(start_height = ?start_height, "Starting streaming from");
390+
let result = self.handle_sync(start_height).await;
391+
let _ = response.send(result);
398392
}
399393
Command::Unsubscribe { response } => {
400394
self.handle_unsubscribe();
@@ -1078,6 +1072,44 @@ mod tests {
10781072
Ok(())
10791073
}
10801074

1075+
#[tokio::test]
1076+
async fn stream_from_latest_starts_at_tip_not_confirmed() -> anyhow::Result<()> {
1077+
let anvil = Anvil::new().try_spawn()?;
1078+
1079+
let provider = ProviderBuilder::new().connect(anvil.endpoint().as_str()).await?;
1080+
provider.anvil_mine(Option::Some(20), Option::None).await?;
1081+
1082+
let block_confirmations = 5;
1083+
1084+
let client = BlockRangeScanner::new()
1085+
.with_block_confirmations(block_confirmations)
1086+
.connect_ws::<Ethereum>(anvil.ws_endpoint_url())
1087+
.await?
1088+
.run()?;
1089+
1090+
let expected_blocks = 10;
1091+
let mut receiver =
1092+
client.stream_from(BlockNumberOrTag::Latest).await?.take(expected_blocks);
1093+
1094+
let latest_head = provider.get_block_number().await?;
1095+
provider.anvil_mine(Option::Some(expected_blocks as u64), Option::None).await?;
1096+
1097+
let mut block_range_start = 0;
1098+
1099+
while let Some(BlockRangeMessage::Data(range)) = receiver.next().await {
1100+
if block_range_start == 0 {
1101+
block_range_start = *range.start();
1102+
assert_eq!(*range.start(), latest_head);
1103+
}
1104+
1105+
assert_eq!(block_range_start, *range.start());
1106+
assert!(*range.end() >= *range.start());
1107+
block_range_start = *range.end() + 1;
1108+
}
1109+
1110+
Ok(())
1111+
}
1112+
10811113
#[tokio::test]
10821114
async fn live_mode_respects_block_confirmations() -> anyhow::Result<()> {
10831115
let anvil = Anvil::new().try_spawn()?;

0 commit comments

Comments
 (0)