Skip to content

Commit ac1e197

Browse files
dlachaumeAlenar
andcommitted
refactor: enhance test tooling for ImmutableDigester
Co-authored-by: DJO <[email protected]>
1 parent 2209f53 commit ac1e197

File tree

7 files changed

+96
-125
lines changed

7 files changed

+96
-125
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
use std::path::Path;
2+
3+
use crate::{
4+
crypto_helper::{MKTree, MKTreeStoreInMemory},
5+
digesters::{ImmutableDigester, ImmutableDigesterError},
6+
entities::CardanoDbBeacon,
7+
};
8+
use async_trait::async_trait;
9+
use tokio::sync::RwLock;
10+
11+
/// A [ImmutableDigester] returning configurable result for testing purpose.
12+
pub struct DumbImmutableDigester {
13+
digest: RwLock<String>,
14+
mktree_leaves: RwLock<Vec<String>>,
15+
is_success: bool,
16+
}
17+
18+
impl DumbImmutableDigester {
19+
/// Set the digest returned by [compute_digest][DumbImmutableDigester::compute_digest]
20+
pub fn with_digest(mut self, new_digest: &str) -> Self {
21+
self.digest = RwLock::new(new_digest.to_string());
22+
self
23+
}
24+
25+
/// Set the leaves used to construct the merkle tree returned by [compute_merkle_tree][DumbImmutableDigester::compute_merkle_tree]
26+
pub fn with_merkle_tree(mut self, leaves: Vec<String>) -> Self {
27+
self.mktree_leaves = RwLock::new(leaves);
28+
self
29+
}
30+
31+
/// Update digest returned by [compute_digest][DumbImmutableDigester::compute_digest]
32+
pub async fn update_digest(&self, new_digest: String) {
33+
let mut digest = self.digest.write().await;
34+
*digest = new_digest;
35+
}
36+
37+
/// Update the leaves used to construct the merkle tree returned by [compute_merkle_tree][DumbImmutableDigester::compute_merkle_tree]
38+
pub async fn update_merkle_tree(&self, leaves: Vec<String>) {
39+
let mut mktree_leaves = self.mktree_leaves.write().await;
40+
*mktree_leaves = leaves;
41+
}
42+
}
43+
44+
impl Default for DumbImmutableDigester {
45+
fn default() -> Self {
46+
Self {
47+
digest: RwLock::new(String::from("1234")),
48+
mktree_leaves: RwLock::new(vec!["1".to_string(), "2".to_string(), "3".to_string()]),
49+
is_success: true,
50+
}
51+
}
52+
}
53+
54+
#[async_trait]
55+
impl ImmutableDigester for DumbImmutableDigester {
56+
async fn compute_digest(
57+
&self,
58+
dirpath: &Path,
59+
beacon: &CardanoDbBeacon,
60+
) -> Result<String, ImmutableDigesterError> {
61+
if self.is_success {
62+
Ok(self.digest.read().await.clone())
63+
} else {
64+
Err(ImmutableDigesterError::NotEnoughImmutable {
65+
expected_number: beacon.immutable_file_number,
66+
found_number: None,
67+
db_dir: dirpath.to_owned(),
68+
})
69+
}
70+
}
71+
72+
async fn compute_merkle_tree(
73+
&self,
74+
dirpath: &Path,
75+
beacon: &CardanoDbBeacon,
76+
) -> Result<MKTree<MKTreeStoreInMemory>, ImmutableDigesterError> {
77+
if self.is_success {
78+
let leaves = self.mktree_leaves.read().await;
79+
Ok(MKTree::new(&leaves).unwrap())
80+
} else {
81+
Err(ImmutableDigesterError::NotEnoughImmutable {
82+
expected_number: beacon.immutable_file_number,
83+
found_number: None,
84+
db_dir: dirpath.to_owned(),
85+
})
86+
}
87+
}
88+
}

mithril-common/src/digesters/dumb_immutable_observer.rs

Lines changed: 0 additions & 63 deletions
This file was deleted.

mithril-common/src/digesters/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
pub mod cache;
44
mod cardano_immutable_digester;
5-
mod dumb_immutable_observer;
5+
mod dumb_immutable_digester;
66
mod immutable_digester;
77
mod immutable_file;
88
mod immutable_file_observer;
@@ -15,7 +15,7 @@ pub use immutable_file_observer::{
1515
ImmutableFileSystemObserver,
1616
};
1717

18-
pub use dumb_immutable_observer::DumbImmutableDigester;
18+
pub use dumb_immutable_digester::DumbImmutableDigester;
1919

2020
cfg_test_tools! {
2121
mod dummy_immutable_db_builder;

mithril-common/src/signable_builder/cardano_database.rs

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -72,47 +72,17 @@ mod tests {
7272

7373
use crate::{
7474
crypto_helper::{MKTree, MKTreeStoreInMemory},
75-
digesters::ImmutableDigesterError,
75+
digesters::DumbImmutableDigester,
7676
entities::{CardanoDbBeacon, ProtocolMessagePartKey},
7777
test_utils::TestLogger,
7878
};
7979

8080
use super::*;
8181

82-
#[derive(Default)]
83-
pub struct ImmutableDigesterImpl {
84-
digests: Vec<String>,
85-
}
86-
87-
impl ImmutableDigesterImpl {
88-
pub fn new(digests: Vec<String>) -> Self {
89-
Self { digests }
90-
}
91-
}
92-
93-
#[async_trait]
94-
impl ImmutableDigester for ImmutableDigesterImpl {
95-
async fn compute_digest(
96-
&self,
97-
_dirpath: &Path,
98-
_beacon: &CardanoDbBeacon,
99-
) -> Result<String, ImmutableDigesterError> {
100-
Ok("whatever".to_string())
101-
}
102-
103-
async fn compute_merkle_tree(
104-
&self,
105-
_dirpath: &Path,
106-
_beacon: &CardanoDbBeacon,
107-
) -> Result<MKTree<MKTreeStoreInMemory>, ImmutableDigesterError> {
108-
Ok(MKTree::new(&self.digests).unwrap())
109-
}
110-
}
111-
11282
#[tokio::test]
11383
async fn compute_signable() {
11484
let digests = vec!["digest-1".to_string(), "digest-2".to_string()];
115-
let digester = ImmutableDigesterImpl::new(digests.clone());
85+
let digester = DumbImmutableDigester::default().with_merkle_tree(digests.clone());
11686
let signable_builder = CardanoDatabaseSignableBuilder::new(
11787
Arc::new(digester),
11888
Path::new(""),

mithril-common/src/signable_builder/cardano_immutable_full_signable_builder.rs

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -62,41 +62,17 @@ impl SignableBuilder<CardanoDbBeacon> for CardanoImmutableFilesFullSignableBuild
6262

6363
#[cfg(test)]
6464
mod tests {
65-
use async_trait::async_trait;
6665
use std::path::Path;
6766

68-
use crate::crypto_helper::{MKTree, MKTreeStoreInMemory};
69-
use crate::digesters::{ImmutableDigester, ImmutableDigesterError};
67+
use crate::digesters::DumbImmutableDigester;
7068
use crate::entities::CardanoDbBeacon;
7169
use crate::test_utils::TestLogger;
7270

7371
use super::*;
7472

75-
#[derive(Default)]
76-
pub struct ImmutableDigesterImpl;
77-
78-
#[async_trait]
79-
impl ImmutableDigester for ImmutableDigesterImpl {
80-
async fn compute_digest(
81-
&self,
82-
_dirpath: &Path,
83-
beacon: &CardanoDbBeacon,
84-
) -> Result<String, ImmutableDigesterError> {
85-
Ok(format!("immutable {}", beacon.immutable_file_number))
86-
}
87-
88-
async fn compute_merkle_tree(
89-
&self,
90-
_dirpath: &Path,
91-
_beacon: &CardanoDbBeacon,
92-
) -> Result<MKTree<MKTreeStoreInMemory>, ImmutableDigesterError> {
93-
unimplemented!()
94-
}
95-
}
96-
9773
#[tokio::test]
9874
async fn compute_signable() {
99-
let digester = ImmutableDigesterImpl;
75+
let digester = DumbImmutableDigester::default().with_digest("immutable 0");
10076
let signable_builder = CardanoImmutableFilesFullSignableBuilder::new(
10177
Arc::new(digester),
10278
Path::new(""),

mithril-signer/src/runtime/runner.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ mod tests {
423423
));
424424

425425
let api_version_provider = Arc::new(APIVersionProvider::new(era_checker.clone()));
426-
let digester = Arc::new(DumbImmutableDigester::new(DIGESTER_RESULT, true));
426+
let digester = Arc::new(DumbImmutableDigester::default().with_digest(DIGESTER_RESULT));
427427
let cardano_immutable_signable_builder =
428428
Arc::new(CardanoImmutableFilesFullSignableBuilder::new(
429429
digester.clone(),

mithril-signer/tests/test_extensions/state_machine_tester.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ impl StateMachineTester {
158158
},
159159
ticker_service.clone(),
160160
));
161-
let digester = Arc::new(DumbImmutableDigester::new("DIGEST", true));
161+
let digester = Arc::new(DumbImmutableDigester::default().with_digest("DIGEST"));
162162
let protocol_initializer_store = Arc::new(ProtocolInitializerRepository::new(
163163
sqlite_connection.clone(),
164164
config.store_retention_limit.map(|limit| limit as u64),

0 commit comments

Comments
 (0)