mithril_aggregator/services/signature_consumer/
noop.rs

1use std::future;
2
3use async_trait::async_trait;
4
5use mithril_common::{
6    entities::{SignedEntityType, SingleSignature},
7    StdResult,
8};
9
10use super::SignatureConsumer;
11
12/// A no-op implementation of the [SignatureConsumer] trait that will never return signatures.
13pub struct SignatureConsumerNoop;
14
15#[async_trait]
16impl SignatureConsumer for SignatureConsumerNoop {
17    async fn get_signatures(&self) -> StdResult<Vec<(SingleSignature, SignedEntityType)>> {
18        future::pending().await
19    }
20
21    fn get_origin_tag(&self) -> String {
22        "NOOP".to_string()
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    use anyhow::anyhow;
29    use tokio::time::{sleep, Duration};
30
31    use super::*;
32
33    #[tokio::test]
34    async fn signature_consumer_noop_never_returns() {
35        let consumer = SignatureConsumerNoop;
36
37        let result = tokio::select!(
38            _res = sleep(Duration::from_millis(100)) => {Err(anyhow!("Timeout"))},
39            _res =  consumer.get_signatures()  => {Ok(())},
40        );
41
42        result.expect_err("Should have timed out");
43    }
44}