Skip to content

Commit df6024f

Browse files
authored
Merge pull request #703 from input-output-hk/jpraynaud/698-add-snapshot-list-message
Add snapshot list message and adapter
2 parents f8ee73d + 954d19d commit df6024f

File tree

17 files changed

+206
-22
lines changed

17 files changed

+206
-22
lines changed

Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mithril-aggregator/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mithril-aggregator"
3-
version = "0.2.7"
3+
version = "0.2.8"
44
description = "A Mithril Aggregator server"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-aggregator/src/http_server/routes/snapshot_routes.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ fn snapshot_digest(
5757
mod handlers {
5858
use crate::http_server::routes::reply;
5959
use crate::http_server::SERVER_BASE_PATH;
60-
use crate::message_adapters::ToSnapshotMessageAdapter;
60+
use crate::message_adapters::{ToSnapshotListMessageAdapter, ToSnapshotMessageAdapter};
6161
use crate::{Configuration, SnapshotStore};
6262
use slog_scope::{debug, warn};
6363
use std::convert::Infallible;
@@ -72,7 +72,10 @@ mod handlers {
7272
debug!("⇄ HTTP SERVER: snapshots");
7373

7474
match snapshot_store.list_snapshots().await {
75-
Ok(snapshots) => Ok(reply::json(&snapshots, StatusCode::OK)),
75+
Ok(snapshots) => Ok(reply::json(
76+
&ToSnapshotListMessageAdapter::adapt(snapshots),
77+
StatusCode::OK,
78+
)),
7679
Err(err) => {
7780
warn!("snapshots::error"; "error" => ?err);
7881
Ok(reply::internal_server_error(err.to_string()))

mithril-aggregator/src/message_adapters/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ mod from_register_signer;
33
mod to_certificate_message;
44
mod to_certificate_pending_message;
55
mod to_epoch_settings_message;
6+
mod to_snapshot_list_message;
67
mod to_snasphot_message;
78

89
pub use from_register_signature::FromRegisterSingleSignatureAdapter;
910
pub use from_register_signer::FromRegisterSignerAdapter;
1011
pub use to_certificate_message::ToCertificateMessageAdapter;
1112
pub use to_certificate_pending_message::ToCertificatePendingMessageAdapter;
1213
pub use to_epoch_settings_message::ToEpochSettingsMessageAdapter;
14+
pub use to_snapshot_list_message::ToSnapshotListMessageAdapter;
1315
pub use to_snasphot_message::ToSnapshotMessageAdapter;
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
use mithril_common::entities::Snapshot;
2+
use mithril_common::messages::{SnapshotListItemMessage, SnapshotListMessage};
3+
4+
/// Adapter to convert a list of [Snapshot] to [SnapshotListMessage] instances
5+
pub struct ToSnapshotListMessageAdapter;
6+
7+
impl ToSnapshotListMessageAdapter {
8+
/// Method to trigger the conversion
9+
pub fn adapt(snapshots: Vec<Snapshot>) -> SnapshotListMessage {
10+
snapshots
11+
.into_iter()
12+
.map(|snapshot| SnapshotListItemMessage {
13+
digest: snapshot.digest,
14+
beacon: snapshot.beacon,
15+
certificate_hash: snapshot.certificate_hash,
16+
size: snapshot.size,
17+
created_at: snapshot.created_at,
18+
locations: snapshot.locations,
19+
})
20+
.collect()
21+
}
22+
}
23+
24+
#[cfg(test)]
25+
mod tests {
26+
use mithril_common::test_utils::fake_data;
27+
28+
use super::*;
29+
30+
#[test]
31+
fn adapt_ok() {
32+
let mut snapshot = fake_data::snapshots(1)[0].to_owned();
33+
snapshot.digest = "digest123".to_string();
34+
let snapshot_list_message = ToSnapshotListMessageAdapter::adapt(vec![snapshot]);
35+
36+
assert_eq!("digest123".to_string(), snapshot_list_message[0].digest);
37+
}
38+
}

mithril-client/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mithril-client"
3-
version = "0.2.4"
3+
version = "0.2.5"
44
description = "A Mithril Client"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-client/src/aggregator.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@ use thiserror::Error;
1616
use mithril_common::{
1717
certificate_chain::{CertificateRetriever, CertificateRetrieverError},
1818
entities::{Certificate, Snapshot},
19-
messages::{CertificateMessage, SnapshotMessage},
19+
messages::{CertificateMessage, SnapshotListMessage, SnapshotMessage},
2020
MITHRIL_API_VERSION,
2121
};
2222

23-
use crate::{FromCertificateMessageAdapter, FromSnapshotMessageAdapter};
23+
use crate::{
24+
FromCertificateMessageAdapter, FromSnapshotListMessageAdapter, FromSnapshotMessageAdapter,
25+
};
2426

2527
/// [AggregatorHandler] related errors.
2628
#[derive(Error, Debug)]
@@ -173,8 +175,8 @@ impl AggregatorHandler for AggregatorHTTPClient {
173175

174176
match response {
175177
Ok(response) => match response.status() {
176-
StatusCode::OK => match response.json::<Vec<Snapshot>>().await {
177-
Ok(snapshots) => Ok(snapshots),
178+
StatusCode::OK => match response.json::<SnapshotListMessage>().await {
179+
Ok(snapshots) => Ok(FromSnapshotListMessageAdapter::adapt(snapshots)),
178180
Err(err) => Err(AggregatorHandlerError::JsonParseFailed(err.to_string())),
179181
},
180182
StatusCode::PRECONDITION_FAILED => Err(self.handle_api_error(&response)),

mithril-client/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ mod runtime;
1919

2020
pub use aggregator::{AggregatorHTTPClient, AggregatorHandler, AggregatorHandlerError};
2121
pub use entities::Config;
22-
pub use message_adapters::{FromCertificateMessageAdapter, FromSnapshotMessageAdapter};
22+
pub use message_adapters::{
23+
FromCertificateMessageAdapter, FromSnapshotListMessageAdapter, FromSnapshotMessageAdapter,
24+
};
2325
pub use runtime::{Runtime, RuntimeError};
2426

2527
pub use runtime::convert_to_field_items;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
use mithril_common::entities::Snapshot;
2+
use mithril_common::messages::SnapshotListMessage;
3+
4+
/// Adapter to convert [SnapshotListMessage] to [SnapshotList] instances
5+
pub struct FromSnapshotListMessageAdapter;
6+
7+
impl FromSnapshotListMessageAdapter {
8+
/// Method to trigger the conversion
9+
pub fn adapt(snapshot_list_message: SnapshotListMessage) -> Vec<Snapshot> {
10+
snapshot_list_message
11+
.into_iter()
12+
.map(|snapshot_list_item_message| Snapshot {
13+
digest: snapshot_list_item_message.digest,
14+
beacon: snapshot_list_item_message.beacon,
15+
certificate_hash: snapshot_list_item_message.certificate_hash,
16+
size: snapshot_list_item_message.size,
17+
created_at: snapshot_list_item_message.created_at,
18+
locations: snapshot_list_item_message.locations,
19+
})
20+
.collect()
21+
}
22+
}
23+
24+
#[cfg(test)]
25+
mod tests {
26+
use mithril_common::messages::SnapshotListItemMessage;
27+
28+
use super::*;
29+
30+
#[test]
31+
fn adapt_ok() {
32+
let snapshot_list_message: SnapshotListMessage = vec![SnapshotListItemMessage::dummy()];
33+
let snapshot_list = FromSnapshotListMessageAdapter::adapt(snapshot_list_message.clone());
34+
35+
assert_eq!(snapshot_list_message[0].digest, snapshot_list[0].digest);
36+
}
37+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
mod from_certificate_message_adapter;
2+
mod from_snapshot_list_message;
23
mod from_snapshot_message;
34

45
pub use from_certificate_message_adapter::FromCertificateMessageAdapter;
6+
pub use from_snapshot_list_message::FromSnapshotListMessageAdapter;
57
pub use from_snapshot_message::FromSnapshotMessageAdapter;

0 commit comments

Comments
 (0)