Skip to content

Commit 3ab1d9c

Browse files
committed
apollo_l1_provider: build infrastructure for scraper+provider flow test
1 parent efa31c1 commit 3ab1d9c

File tree

3 files changed

+75
-1
lines changed

3 files changed

+75
-1
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/apollo_l1_provider/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ apollo_l1_provider_types.workspace = true
2323
apollo_l1_scraper_config.workspace = true
2424
apollo_metrics.workspace = true
2525
apollo_state_sync_types.workspace = true
26-
apollo_time.workspace = true
26+
apollo_time = { workspace = true, features = ["tokio"] }
2727
async-trait.workspace = true
2828
indexmap.workspace = true
2929
itertools.workspace = true
@@ -37,6 +37,7 @@ tracing.workspace = true
3737
[dev-dependencies]
3838
alloy.workspace = true
3939
apollo_batcher_types = { workspace = true, features = ["testing"] }
40+
apollo_integration_tests.workspace = true
4041
apollo_l1_endpoint_monitor_types = { workspace = true, features = ["testing"] }
4142
apollo_l1_provider_types = { workspace = true, features = ["testing"] }
4243
apollo_state_sync_types = { workspace = true, features = ["testing"] }
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
use std::sync::Arc;
2+
3+
use apollo_batcher_types::communication::MockBatcherClient;
4+
use apollo_infra::component_client::LocalComponentClient;
5+
use apollo_infra::component_definitions::RequestWrapper;
6+
use apollo_infra::component_server::{LocalComponentServer, LocalServerConfig};
7+
use apollo_l1_provider::l1_provider::L1ProviderBuilder;
8+
use apollo_l1_provider::l1_scraper::L1Scraper;
9+
use apollo_l1_provider::metrics::L1_PROVIDER_INFRA_METRICS;
10+
use apollo_l1_provider::L1ProviderConfig;
11+
use apollo_l1_provider_types::{L1ProviderRequest, L1ProviderResponse, MockL1ProviderClient};
12+
use apollo_l1_scraper_config::config::L1ScraperConfig;
13+
use apollo_state_sync_types::communication::MockStateSyncClient;
14+
use papyrus_base_layer::{L1BlockReference, MockBaseLayerContract};
15+
use starknet_api::block::{BlockHashAndNumber, BlockNumber};
16+
use tokio::sync::mpsc::channel;
17+
18+
#[tokio::test]
19+
async fn flow_tests() {
20+
// Setup.
21+
let start_block = L1BlockReference::default();
22+
let historical_block = BlockHashAndNumber::default();
23+
24+
// Setup the base layer.
25+
let mut base_layer = MockBaseLayerContract::default(); // TODO(guyn): replace this with Anvil.
26+
base_layer.expect_latest_l1_block().returning(move |_| Ok(Some(start_block)));
27+
base_layer.expect_latest_proved_block().returning(move |_| Ok(Some(historical_block)));
28+
29+
// L1 provider setup.
30+
let mut l1_provider = L1ProviderBuilder::new(
31+
L1ProviderConfig::default(),
32+
Arc::new(MockL1ProviderClient::default()), // This isn't right
33+
Arc::new(MockBatcherClient::default()), // Consider saving a copy of this to interact
34+
Arc::new(MockStateSyncClient::default()), /* We'll need a copy of this if we do
35+
* bootstrapping */
36+
)
37+
.startup_height(BlockNumber(start_block.number))
38+
.catchup_height(historical_block.number)
39+
.build();
40+
41+
// This channel connects the L1Provider client to the server.
42+
let (tx, rx) = channel::<RequestWrapper<L1ProviderRequest, L1ProviderResponse>>(32);
43+
44+
// Create the client.
45+
let l1_provider_client =
46+
LocalComponentClient::new(tx, L1_PROVIDER_INFRA_METRICS.get_local_client_metrics());
47+
48+
// Create the server.
49+
l1_provider.initialize(vec![]).await.unwrap();
50+
let _l1_provider_server = LocalComponentServer::new(
51+
l1_provider,
52+
&LocalServerConfig::default(),
53+
rx,
54+
L1_PROVIDER_INFRA_METRICS.get_local_server_metrics(),
55+
);
56+
57+
// Setup the scraper.
58+
let mut scraper = L1Scraper::new(
59+
L1ScraperConfig::default(),
60+
Arc::new(l1_provider_client.clone()),
61+
base_layer,
62+
&[],
63+
start_block,
64+
)
65+
.await
66+
.expect("Should be able to create the scraper");
67+
68+
// Run the scraper in a separate task.
69+
let _scraper_task = tokio::spawn(async move {
70+
scraper.run().await.unwrap_or_else(|e| panic!("Error running scraper: {e:?}"));
71+
});
72+
}

0 commit comments

Comments
 (0)