fuel-core-sync 0.47.4

Fuel Synchronizer
use crate::{
    import::test_helpers::counts::SharedCounts,
    ports::{
        ConsensusPort,
        MockConsensusPort,
    },
};
use fuel_core_types::blockchain::{
    SealedBlockHeader,
    primitives::DaBlockHeight,
};
use std::time::Duration;

pub struct PressureConsensus(MockConsensusPort, Duration, SharedCounts);

impl ConsensusPort for PressureConsensus {
    fn check_sealed_header(&self, header: &SealedBlockHeader) -> anyhow::Result<bool> {
        self.0.check_sealed_header(header)
    }

    async fn await_da_height(&self, da_height: &DaBlockHeight) -> anyhow::Result<()> {
        self.2.apply(|c| c.inc_consensus());
        tokio::time::sleep(self.1).await;
        self.2.apply(|c| c.dec_consensus());
        self.0.await_da_height(da_height).await
    }
}

impl PressureConsensus {
    pub fn new(counts: SharedCounts, delays: Duration) -> Self {
        let mut mock = MockConsensusPort::default();
        mock.expect_await_da_height()
            .returning(|_| Box::pin(async move { Ok(()) }));
        mock.expect_check_sealed_header().returning(|_| Ok(true));
        Self(mock, delays, counts)
    }
}