|
| 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