mithril_era/adapters/
dummy.rs

1use async_trait::async_trait;
2use std::sync::RwLock;
3
4use mithril_common::StdResult;
5
6use crate::{EraMarker, EraReaderAdapter};
7
8/// Dummy adapter is intended to be used in a test environment (end to end test)
9/// to simulate not yet activated Eras.
10#[derive(Default)]
11pub struct DummyAdapter {
12    markers: RwLock<Vec<EraMarker>>,
13}
14
15impl DummyAdapter {
16    /// Create a new instance directly from markers
17    pub fn from_markers(markers: Vec<EraMarker>) -> Self {
18        let myself = Self::default();
19        myself.set_markers(markers);
20
21        myself
22    }
23
24    /// Tells what markers should be sent back by the adapter.
25    pub fn set_markers(&self, markers: Vec<EraMarker>) {
26        let mut my_markers = self.markers.write().unwrap();
27        *my_markers = markers;
28    }
29}
30
31#[async_trait]
32impl EraReaderAdapter for DummyAdapter {
33    async fn read(&self) -> StdResult<Vec<EraMarker>> {
34        let markers = self.markers.read().unwrap();
35
36        Ok((*markers.clone()).to_vec())
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use mithril_common::entities::{Epoch, SupportedEra};
43    use mithril_common::test::double::Dummy;
44
45    use super::*;
46
47    #[tokio::test]
48    async fn empty_dummy_adapter() {
49        let adapter = DummyAdapter::default();
50
51        assert!(
52            adapter
53                .read()
54                .await
55                .expect("dummy adapter shall not fail reading")
56                .is_empty()
57        );
58    }
59
60    #[tokio::test]
61    async fn dummy_adapter_output() {
62        let markers = vec![
63            EraMarker::new("one", Some(Epoch(1))),
64            EraMarker::new(&SupportedEra::dummy().to_string(), None),
65            EraMarker::new(&SupportedEra::dummy().to_string(), Some(Epoch(10))),
66        ];
67
68        let adapter = DummyAdapter::default();
69        adapter.set_markers(markers.clone());
70
71        assert_eq!(
72            markers,
73            adapter.read().await.expect("dummy adapter shall not fail reading")
74        );
75    }
76}