From 3b60422222846b547e17ee011fdc0c581b3bf7ee Mon Sep 17 00:00:00 2001 From: rymnc <43716372+rymnc@users.noreply.github.com> Date: Tue, 31 Dec 2024 03:25:22 +0530 Subject: [PATCH] chore: add test for gas price service --- .../src/common/fuel_core_storage_adapter.rs | 2 +- .../services/gas_price_service/src/ports.rs | 2 +- .../src/v1/da_source_service/service.rs | 1 - .../gas_price_service/src/v1/service.rs | 77 +++++++++++++++++++ .../gas_price_service/src/v1/tests.rs | 1 + 5 files changed, 80 insertions(+), 3 deletions(-) diff --git a/crates/services/gas_price_service/src/common/fuel_core_storage_adapter.rs b/crates/services/gas_price_service/src/common/fuel_core_storage_adapter.rs index 14b0675d762..6ba2904c57d 100644 --- a/crates/services/gas_price_service/src/common/fuel_core_storage_adapter.rs +++ b/crates/services/gas_price_service/src/common/fuel_core_storage_adapter.rs @@ -119,7 +119,7 @@ impl GasPriceServiceAtomicStorage for Storage where Storage: 'static, Storage: GetMetadataStorage + GetLatestRecordedHeight, - Storage: KeyValueInspect + Modifiable + Send + Sync, + Storage: KeyValueInspect + Modifiable + Send + Sync + Clone, { type Transaction<'a> = StorageTransaction<&'a mut Storage> where Self: 'a; diff --git a/crates/services/gas_price_service/src/ports.rs b/crates/services/gas_price_service/src/ports.rs index 7670b3e0eab..bd8cb4918c0 100644 --- a/crates/services/gas_price_service/src/ports.rs +++ b/crates/services/gas_price_service/src/ports.rs @@ -44,7 +44,7 @@ pub trait GetLatestRecordedHeight: Send + Sync { fn get_recorded_height(&self) -> Result>; } -pub trait GasPriceServiceAtomicStorage +pub trait GasPriceServiceAtomicStorage: Clone where Self: 'static, Self: Send + Sync, diff --git a/crates/services/gas_price_service/src/v1/da_source_service/service.rs b/crates/services/gas_price_service/src/v1/da_source_service/service.rs index 675d82cda55..90e5acdb7ed 100644 --- a/crates/services/gas_price_service/src/v1/da_source_service/service.rs +++ b/crates/services/gas_price_service/src/v1/da_source_service/service.rs @@ -112,7 +112,6 @@ where /// This function polls the source according to a polling interval /// described by the DaBlockCostsService async fn run(&mut self, state_watcher: &mut StateWatcher) -> TaskNextAction { - tracing::debug!("111111111111111111111111111111111"); tokio::select! { biased; _ = state_watcher.while_started() => { diff --git a/crates/services/gas_price_service/src/v1/service.rs b/crates/services/gas_price_service/src/v1/service.rs index 5efad6d497d..bd69fa2d45c 100644 --- a/crates/services/gas_price_service/src/v1/service.rs +++ b/crates/services/gas_price_service/src/v1/service.rs @@ -101,6 +101,10 @@ where self.apply_block_info_to_gas_algorithm(block).await?; Ok(()) } + + fn storage(&self) -> AtomicStorage { + self.storage_tx_provider.clone() + } } impl GasPriceServiceV1 @@ -389,6 +393,7 @@ mod tests { }, }, ports::{ + GetLatestRecordedHeight, GetMetadataStorage, SetMetadataStorage, }, @@ -801,4 +806,76 @@ mod tests { service.shutdown().await.unwrap(); } + + #[tokio::test] + async fn run__stores_l2_height_as_recorded_if_previous_doesnt_exist() { + // given + let block_height = 1; + let l2_block = BlockInfo::Block { + height: block_height, + gas_used: 60, + block_gas_capacity: 100, + block_bytes: 100, + block_fees: 100, + }; + + let (l2_block_sender, l2_block_receiver) = mpsc::channel(1); + let l2_block_source = FakeL2BlockSource { + l2_block: l2_block_receiver, + }; + + let metadata_storage = FakeMetadata::empty(); + let l2_block_height = 0; + let config = V1AlgorithmConfig { + new_exec_gas_price: 100, + min_exec_gas_price: 50, + exec_gas_price_change_percent: 20, + l2_block_fullness_threshold_percent: 20, + gas_price_factor: NonZeroU64::new(10).unwrap(), + min_da_gas_price: 10, + max_da_gas_price_change_percent: 20, + da_p_component: 4, + da_d_component: 2, + normal_range_size: 10, + capped_range_size: 100, + decrease_range_size: 4, + block_activity_threshold: 20, + da_poll_interval: None, + }; + let inner = database(); + let (algo_updater, shared_algo) = + initialize_algorithm(&config, l2_block_height, &metadata_storage).unwrap(); + + let notifier = Arc::new(tokio::sync::Notify::new()); + let dummy_da_source = DaSourceService::new( + DummyDaBlockCosts::new( + Err(anyhow::anyhow!("unused at the moment")), + notifier.clone(), + ), + None, + ); + let da_service_runner = ServiceRunner::new(dummy_da_source); + da_service_runner.start_and_await().await.unwrap(); + + let mut service = GasPriceServiceV1::new( + l2_block_source, + shared_algo, + algo_updater, + da_service_runner, + inner, + ); + let read_algo = service.next_block_algorithm(); + let mut watcher = StateWatcher::started(); + let initial_price = read_algo.next_gas_price(); + + // when + l2_block_sender.send(l2_block).await.unwrap(); + service.run(&mut watcher).await; + let storage_provider = service.storage_tx_provider().clone(); + service.shutdown().await.unwrap(); + + // then + let recorded_height = storage_provider.get_recorded_height().unwrap().unwrap(); + assert_eq!(recorded_height, BlockHeight::from(block_height)); + } } diff --git a/crates/services/gas_price_service/src/v1/tests.rs b/crates/services/gas_price_service/src/v1/tests.rs index f43671b3420..ddc9d23be0d 100644 --- a/crates/services/gas_price_service/src/v1/tests.rs +++ b/crates/services/gas_price_service/src/v1/tests.rs @@ -151,6 +151,7 @@ impl GetMetadataStorage for FakeMetadata { } } +#[derive(Clone)] struct ErroringPersistedData; impl SetMetadataStorage for ErroringPersistedData {