Skip to content

Commit 976c083

Browse files
committed
apollo_l1_provider: add test for low latest L1 block number
1 parent 86cea3b commit 976c083

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

crates/apollo_l1_provider/src/l1_scraper_tests.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,48 @@ async fn latest_block_number_goes_down() {
155155
assert_eq!(scraper.fetch_events().await, Ok((expected_block_reference, vec![])));
156156
}
157157

158+
#[tokio::test]
159+
async fn base_layer_returns_block_number_below_finality() {
160+
// Setup.
161+
const FINALITY: u64 = 10;
162+
const INITIAL_L1_BLOCK_NUMBER: u64 = 100;
163+
const INITIAL_L1_BLOCK_HASH: L1BlockHash = L1BlockHash([123; 32]);
164+
const WRONG_L1_BLOCK_NUMBER: u64 = 5;
165+
166+
let initial_block_reference =
167+
L1BlockReference { number: INITIAL_L1_BLOCK_NUMBER, hash: INITIAL_L1_BLOCK_HASH };
168+
169+
let latest_l1_block_number_response = Arc::new(AtomicU64::new(INITIAL_L1_BLOCK_NUMBER));
170+
let latest_l1_block_number_response_clone = latest_l1_block_number_response.clone();
171+
172+
let mut dummy_base_layer: MockBaseLayerContract = MockBaseLayerContract::new();
173+
174+
dummy_base_layer
175+
.expect_latest_l1_block_number()
176+
.returning(move || Ok(latest_l1_block_number_response_clone.load(Ordering::Relaxed)));
177+
dummy_base_layer.expect_l1_block_at().returning(move |number| {
178+
Ok(Some(L1BlockReference { number, hash: INITIAL_L1_BLOCK_HASH }))
179+
});
180+
181+
let mut scraper = scraper_with_dummy().await;
182+
scraper.config.finality = FINALITY;
183+
184+
scraper.scrape_from_this_l1_block = Some(initial_block_reference);
185+
scraper.base_layer = dummy_base_layer;
186+
187+
// Test.
188+
assert_eq!(scraper.send_events_to_l1_provider().await, Ok(()));
189+
190+
// Simulate a base layer returning a lower block number.
191+
latest_l1_block_number_response.store(WRONG_L1_BLOCK_NUMBER, Ordering::Relaxed);
192+
193+
// The scraper should return a finality too high error.
194+
assert_matches!(
195+
scraper.send_events_to_l1_provider().await,
196+
Err(L1ScraperError::FinalityTooHigh { .. })
197+
);
198+
}
199+
158200
#[test]
159201
#[ignore = "similar to backlog_happy_flow, only shorter, and sprinkle some start_block/get_txs \
160202
attempts while its bootstrapping (and assert failure on height), then assert that they \

0 commit comments

Comments
 (0)