mithril_common/era/adapters/
dummy.rs

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