Skip to content

Commit 9c80039

Browse files
committed
Signer: add digester as a dependency to its runtime
Signed-off-by: DJO <[email protected]>
1 parent 9f0fdf3 commit 9c80039

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

mithril-signer/src/main.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use clap::Parser;
2+
use mithril_common::digesters::ImmutableDigester;
23
use slog::{o, Drain, Level, Logger};
34
use slog_scope::debug;
45
use std::env;
@@ -63,9 +64,14 @@ async fn main() -> Result<(), String> {
6364
let protocol_initializer_encoded = "";
6465
let single_signer = MithrilSingleSigner::new(config.party_id, protocol_initializer_encoded);
6566
let certificate_handler = CertificateHandlerHTTPClient::new(config.aggregator_endpoint.clone());
67+
let digester = ImmutableDigester::new(config.db_directory, slog_scope::logger());
6668

6769
// Should the runtime loop returns an error ? If yes should we abort the loop at the first error or is their some tolerance ?
68-
let mut runtime = Runtime::new(Box::new(certificate_handler), Box::new(single_signer));
70+
let mut runtime = Runtime::new(
71+
Box::new(certificate_handler),
72+
Box::new(single_signer),
73+
Box::new(digester),
74+
);
6975
runtime.infinite_loop(config.run_interval).await;
7076

7177
Ok(())

mithril-signer/src/runtime.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use tokio::time::sleep;
77
use crate::certificate_handler::CertificateHandlerError;
88
use crate::single_signer::SingleSignerError;
99
use mithril_common::crypto_helper::{key_encode_hex, Bytes};
10+
use mithril_common::digesters::Digester;
1011
use mithril_common::entities::{self, Beacon, CertificatePending, SignerWithStake};
1112
use mithril_common::fake_data;
1213

@@ -16,6 +17,7 @@ use super::single_signer::SingleSigner;
1617
pub struct Runtime {
1718
certificate_handler: Box<dyn CertificateHandler>,
1819
single_signer: Box<dyn SingleSigner>,
20+
digester: Box<dyn Digester>,
1921
current_beacon: Option<Beacon>,
2022
}
2123

@@ -37,10 +39,12 @@ impl Runtime {
3739
pub fn new(
3840
certificate_handler: Box<dyn CertificateHandler>,
3941
single_signer: Box<dyn SingleSigner>,
42+
digester: Box<dyn Digester>,
4043
) -> Self {
4144
Self {
4245
certificate_handler,
4346
single_signer,
47+
digester,
4448
current_beacon: None,
4549
}
4650
}
@@ -150,8 +154,18 @@ mod tests {
150154
use super::super::certificate_handler::{CertificateHandlerError, MockCertificateHandler};
151155
use super::super::single_signer::{MockSingleSigner, SingleSignerError};
152156
use super::*;
157+
153158
use mithril_common::crypto_helper::tests_setup::*;
159+
use mithril_common::digesters::{Digester, DigesterError, DigesterResult};
154160
use mithril_common::fake_data;
161+
use mockall::mock;
162+
163+
mock! {
164+
pub DigesterImpl { }
165+
impl Digester for DigesterImpl {
166+
fn compute_digest(&self) -> Result<DigesterResult, DigesterError>;
167+
}
168+
}
155169

156170
#[tokio::test]
157171
async fn signer_doesnt_sign_when_there_is_no_pending_certificate() {
@@ -160,6 +174,7 @@ mod tests {
160174
let protocol_initializer = current_signer.4.clone();
161175
let mut mock_certificate_handler = MockCertificateHandler::new();
162176
let mut mock_single_signer = MockSingleSigner::new();
177+
let mock_digester = MockDigesterImpl::new();
163178
mock_certificate_handler
164179
.expect_retrieve_pending_certificate()
165180
.return_once(|| Ok(None));
@@ -182,6 +197,7 @@ mod tests {
182197
let mut signer = Runtime::new(
183198
Box::new(mock_certificate_handler),
184199
Box::new(mock_single_signer),
200+
Box::new(mock_digester),
185201
);
186202
assert!(signer.run().await.is_ok());
187203
}
@@ -190,6 +206,7 @@ mod tests {
190206
async fn signer_fails_when_pending_certificate_fails() {
191207
let mut mock_certificate_handler = MockCertificateHandler::new();
192208
let mut mock_single_signer = MockSingleSigner::new();
209+
let mock_digester = MockDigesterImpl::new();
193210
mock_certificate_handler
194211
.expect_retrieve_pending_certificate()
195212
.return_once(|| {
@@ -204,6 +221,7 @@ mod tests {
204221
let mut signer = Runtime::new(
205222
Box::new(mock_certificate_handler),
206223
Box::new(mock_single_signer),
224+
Box::new(mock_digester),
207225
);
208226
assert_eq!(
209227
RuntimeError::RetrievePendingCertificateFailed(
@@ -221,6 +239,7 @@ mod tests {
221239
let protocol_initializer = current_signer.4.clone();
222240
let mut mock_certificate_handler = MockCertificateHandler::new();
223241
let mut mock_single_signer = MockSingleSigner::new();
242+
let mut mock_digester = MockDigesterImpl::new();
224243
let pending_certificate = fake_data::certificate_pending();
225244
mock_certificate_handler
226245
.expect_retrieve_pending_certificate()
@@ -255,6 +274,7 @@ mod tests {
255274
let mut signer = Runtime::new(
256275
Box::new(mock_certificate_handler),
257276
Box::new(mock_single_signer),
277+
Box::new(mock_digester),
258278
);
259279
assert!(signer.run().await.is_ok());
260280
assert!(signer.run().await.is_ok());
@@ -267,6 +287,7 @@ mod tests {
267287
let protocol_initializer = current_signer.4.clone();
268288
let mut mock_certificate_handler = MockCertificateHandler::new();
269289
let mut mock_single_signer = MockSingleSigner::new();
290+
let mut mock_digester = MockDigesterImpl::new();
270291
let pending_certificate = fake_data::certificate_pending();
271292
mock_certificate_handler
272293
.expect_retrieve_pending_certificate()
@@ -304,6 +325,7 @@ mod tests {
304325
let mut signer = Runtime::new(
305326
Box::new(mock_certificate_handler),
306327
Box::new(mock_single_signer),
328+
Box::new(mock_digester),
307329
);
308330
assert!(signer.run().await.is_ok());
309331
assert!(signer.run().await.is_ok());
@@ -316,6 +338,7 @@ mod tests {
316338
let protocol_initializer = current_signer.4.clone();
317339
let mut mock_certificate_handler = MockCertificateHandler::new();
318340
let mut mock_single_signer = MockSingleSigner::new();
341+
let mut mock_digester = MockDigesterImpl::new();
319342
let pending_certificate = fake_data::certificate_pending();
320343
mock_certificate_handler
321344
.expect_retrieve_pending_certificate()
@@ -345,6 +368,7 @@ mod tests {
345368
let mut signer = Runtime::new(
346369
Box::new(mock_certificate_handler),
347370
Box::new(mock_single_signer),
371+
Box::new(mock_digester),
348372
);
349373
assert!(signer.run().await.is_ok());
350374
}
@@ -353,6 +377,7 @@ mod tests {
353377
async fn signer_fails_if_signature_computation_fails() {
354378
let mut mock_certificate_handler = MockCertificateHandler::new();
355379
let mut mock_single_signer = MockSingleSigner::new();
380+
let mut mock_digester = MockDigesterImpl::new();
356381
let pending_certificate = fake_data::certificate_pending();
357382
mock_certificate_handler
358383
.expect_retrieve_pending_certificate()
@@ -370,6 +395,7 @@ mod tests {
370395
let mut signer = Runtime::new(
371396
Box::new(mock_certificate_handler),
372397
Box::new(mock_single_signer),
398+
Box::new(mock_digester),
373399
);
374400
assert_eq!(
375401
RuntimeError::SingleSignaturesComputeFailed(
@@ -388,6 +414,7 @@ mod tests {
388414
let pending_certificate = fake_data::certificate_pending();
389415
let mut mock_certificate_handler = MockCertificateHandler::new();
390416
let mut mock_single_signer = MockSingleSigner::new();
417+
let mut mock_digester = MockDigesterImpl::new();
391418
mock_certificate_handler
392419
.expect_retrieve_pending_certificate()
393420
.return_once(|| Ok(Some(pending_certificate)));
@@ -414,6 +441,7 @@ mod tests {
414441
let mut signer = Runtime::new(
415442
Box::new(mock_certificate_handler),
416443
Box::new(mock_single_signer),
444+
Box::new(mock_digester),
417445
);
418446
assert_eq!(
419447
RuntimeError::RegisterSignerFailed(

0 commit comments

Comments
 (0)