Skip to content

Commit f6eaf09

Browse files
committed
add test to test reset functionality
1 parent 476d906 commit f6eaf09

File tree

1 file changed

+51
-15
lines changed

1 file changed

+51
-15
lines changed

crates/watcher/src/lib.rs

Lines changed: 51 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,7 @@ mod tests {
783783
transactions: Vec<Transaction>,
784784
finalized: Header,
785785
latest: Header,
786-
) -> (L1Watcher<MockProvider>, mpsc::Receiver<Arc<L1Notification>>) {
786+
) -> (L1Watcher<MockProvider>, mpsc::Receiver<Arc<L1Notification>>, L1WatcherHandle) {
787787
let provider_blocks =
788788
provider_blocks.into_iter().map(|h| Block { header: h, ..Default::default() });
789789
let finalized = Block { header: finalized, ..Default::default() };
@@ -797,7 +797,9 @@ mod tests {
797797
);
798798

799799
let (tx, rx) = mpsc::channel(LOG_QUERY_BLOCK_RANGE as usize);
800-
let (_command_tx, command_rx) = mpsc::unbounded_channel();
800+
let (command_tx, command_rx) = mpsc::unbounded_channel();
801+
let handle = L1WatcherHandle::new(command_tx);
802+
801803
(
802804
L1Watcher {
803805
execution_provider: provider,
@@ -812,6 +814,7 @@ mod tests {
812814
log_query_block_range: LOG_QUERY_BLOCK_RANGE,
813815
},
814816
rx,
817+
handle,
815818
)
816819
}
817820

@@ -821,7 +824,7 @@ mod tests {
821824
let (finalized, latest, chain) = chain(21);
822825
let unfinalized_blocks = chain[1..11].to_vec();
823826

824-
let (watcher, _) = l1_watcher(
827+
let (watcher, _, _) = l1_watcher(
825828
unfinalized_blocks,
826829
chain.clone(),
827830
vec![],
@@ -846,7 +849,7 @@ mod tests {
846849
let mut provider_blocks = chain_from(&chain[10], 10);
847850
let latest = provider_blocks[9].clone();
848851

849-
let (watcher, _) = l1_watcher(
852+
let (watcher, _, _) = l1_watcher(
850853
unfinalized_blocks,
851854
provider_blocks.clone(),
852855
vec![],
@@ -869,7 +872,7 @@ mod tests {
869872
async fn test_should_handle_finalized_with_empty_state() -> eyre::Result<()> {
870873
// Given
871874
let (finalized, latest, _) = chain(2);
872-
let (mut watcher, _rx) = l1_watcher(vec![], vec![], vec![], finalized.clone(), latest);
875+
let (mut watcher, _rx, _) = l1_watcher(vec![], vec![], vec![], finalized.clone(), latest);
873876

874877
// When
875878
watcher.handle_finalized_block(&finalized).await?;
@@ -885,7 +888,7 @@ mod tests {
885888
// Given
886889
let (_, latest, chain) = chain(10);
887890
let finalized = chain[5].clone();
888-
let (mut watcher, _rx) = l1_watcher(chain, vec![], vec![], finalized.clone(), latest);
891+
let (mut watcher, _rx, _) = l1_watcher(chain, vec![], vec![], finalized.clone(), latest);
889892

890893
// When
891894
watcher.handle_finalized_block(&finalized).await?;
@@ -901,7 +904,7 @@ mod tests {
901904
// Given
902905
let (_, latest, chain) = chain(10);
903906
let finalized = latest.clone();
904-
let (mut watcher, _rx) = l1_watcher(chain, vec![], vec![], finalized.clone(), latest);
907+
let (mut watcher, _rx, _) = l1_watcher(chain, vec![], vec![], finalized.clone(), latest);
905908

906909
// When
907910
watcher.handle_finalized_block(&finalized).await?;
@@ -916,7 +919,7 @@ mod tests {
916919
async fn test_should_match_unfinalized_tail() -> eyre::Result<()> {
917920
// Given
918921
let (finalized, latest, chain) = chain(10);
919-
let (mut watcher, _) = l1_watcher(chain, vec![], vec![], finalized.clone(), latest.clone());
922+
let (mut watcher, _, _) = l1_watcher(chain, vec![], vec![], finalized.clone(), latest.clone());
920923

921924
// When
922925
watcher.handle_latest_block(&finalized, &latest).await?;
@@ -933,7 +936,7 @@ mod tests {
933936
// Given
934937
let (finalized, latest, chain) = chain(10);
935938
let unfinalized_chain = chain[..9].to_vec();
936-
let (mut watcher, _rx) =
939+
let (mut watcher, _rx, _) =
937940
l1_watcher(unfinalized_chain, vec![], vec![], finalized.clone(), latest.clone());
938941

939942
assert_eq!(watcher.unfinalized_blocks.len(), 9);
@@ -953,7 +956,7 @@ mod tests {
953956
// Given
954957
let (finalized, latest, chain) = chain(10);
955958
let unfinalized_chain = chain[..5].to_vec();
956-
let (mut watcher, mut receiver) =
959+
let (mut watcher, mut receiver, _) =
957960
l1_watcher(unfinalized_chain, chain, vec![], finalized.clone(), latest.clone());
958961

959962
// When
@@ -974,7 +977,7 @@ mod tests {
974977
let (finalized, _, chain) = chain(10);
975978
let reorged = chain_from(&chain[5], 10);
976979
let latest = reorged[9].clone();
977-
let (mut watcher, mut receiver) =
980+
let (mut watcher, mut receiver, _) =
978981
l1_watcher(chain.clone(), reorged, vec![], finalized.clone(), latest.clone());
979982

980983
// When
@@ -997,7 +1000,7 @@ mod tests {
9971000
async fn test_should_handle_l1_messages() -> eyre::Result<()> {
9981001
// Given
9991002
let (finalized, latest, chain) = chain(10);
1000-
let (watcher, _) = l1_watcher(chain, vec![], vec![], finalized.clone(), latest.clone());
1003+
let (watcher, _, _) = l1_watcher(chain, vec![], vec![], finalized.clone(), latest.clone());
10011004

10021005
// build test logs.
10031006
let mut logs = (0..10).map(|_| random!(Log)).collect::<Vec<_>>();
@@ -1035,7 +1038,7 @@ mod tests {
10351038
effective_gas_price: None,
10361039
};
10371040

1038-
let (watcher, _) =
1041+
let (watcher, _, _) =
10391042
l1_watcher(chain, vec![], vec![tx.clone()], finalized.clone(), latest.clone());
10401043

10411044
// build test logs.
@@ -1064,7 +1067,7 @@ mod tests {
10641067
async fn test_should_handle_finalize_commits() -> eyre::Result<()> {
10651068
// Given
10661069
let (finalized, latest, chain) = chain(10);
1067-
let (watcher, _) = l1_watcher(chain, vec![], vec![], finalized.clone(), latest.clone());
1070+
let (watcher, _, _) = l1_watcher(chain, vec![], vec![], finalized.clone(), latest.clone());
10681071

10691072
// build test logs.
10701073
let mut logs = (0..10).map(|_| random!(Log)).collect::<Vec<_>>();
@@ -1085,4 +1088,37 @@ mod tests {
10851088

10861089
Ok(())
10871090
}
1088-
}
1091+
1092+
#[tokio::test]
1093+
async fn test_handle_state_reset() -> eyre::Result<()> {
1094+
// Given: A watcher with state
1095+
let (finalized, latest, chain) = chain(10);
1096+
let unfinalized_blocks = chain[1..5].to_vec();
1097+
let (mut watcher, _rx, handle) =
1098+
l1_watcher(unfinalized_blocks.clone(), chain, vec![], finalized, latest);
1099+
1100+
watcher.current_block_number = unfinalized_blocks.last().unwrap().number;
1101+
watcher.is_synced = true;
1102+
assert_eq!(watcher.unfinalized_blocks.len(), 4);
1103+
1104+
let join = tokio::spawn(async move {
1105+
// When: Reset to block 2
1106+
let (new_tx, _new_rx) = mpsc::channel(LOG_QUERY_BLOCK_RANGE as usize);
1107+
handle.reset_to_block(2, new_tx).await.expect("reset to block");
1108+
1109+
// close channel to end watcher run loop
1110+
drop(handle);
1111+
});
1112+
1113+
watcher.run().await;
1114+
1115+
join.await?;
1116+
1117+
// Then: State should be reset
1118+
assert_eq!(watcher.current_block_number, 2);
1119+
assert_eq!(watcher.unfinalized_blocks.len(), 0, "unfinalized blocks should be cleared");
1120+
assert!(!watcher.is_synced, "is_synced should be reset to false");
1121+
1122+
Ok(())
1123+
}
1124+
}

0 commit comments

Comments
 (0)