Skip to content

Commit 6b9fa70

Browse files
committed
feat(e2e): run real DMQ network with the Haskell implementation
1 parent 1fcded9 commit 6b9fa70

File tree

7 files changed

+79
-22
lines changed

7 files changed

+79
-22
lines changed

mithril-test-lab/mithril-end-to-end/src/devnet/runner.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ pub struct Devnet {
2424
pub struct PoolNode {
2525
pub db_path: PathBuf,
2626
pub socket_path: PathBuf,
27+
pub dmq_socket_path: PathBuf,
2728
pub pool_env_path: PathBuf,
2829
pub kes_secret_key_path: PathBuf,
2930
pub operational_certificate_path: PathBuf,
@@ -50,6 +51,7 @@ impl PoolNode {
5051
pub struct FullNode {
5152
pub db_path: PathBuf,
5253
pub socket_path: PathBuf,
54+
pub dmq_socket_path: PathBuf,
5355
}
5456

5557
#[derive(Debug, Clone, PartialEq, Eq)]
@@ -198,6 +200,7 @@ impl Devnet {
198200
.map(|n| PoolNode {
199201
db_path: self.artifacts_dir.join(format!("node-pool{n}/db")),
200202
socket_path: self.artifacts_dir.join(format!("node-pool{n}/ipc/node.sock")),
203+
dmq_socket_path: self.artifacts_dir.join(format!("node-pool{n}/ipc/dmq.node.sock")),
201204
pool_env_path: self.artifacts_dir.join(format!("node-pool{n}/pool.env")),
202205
kes_secret_key_path: self
203206
.artifacts_dir
@@ -211,6 +214,7 @@ impl Devnet {
211214
.map(|n| FullNode {
212215
db_path: self.artifacts_dir.join(format!("node-full{n}/db")),
213216
socket_path: self.artifacts_dir.join(format!("node-full{n}/ipc/node.sock")),
217+
dmq_socket_path: self.artifacts_dir.join(format!("node-full{n}/ipc/dmq.node.sock")),
214218
})
215219
.collect::<Vec<_>>();
216220

@@ -377,6 +381,7 @@ mod tests {
377381
pool_nodes: vec![PoolNode {
378382
db_path: PathBuf::from(r"test/path/node-pool1/db"),
379383
socket_path: PathBuf::from(r"test/path/node-pool1/ipc/node.sock"),
384+
dmq_socket_path: PathBuf::from(r"test/path/node-pool1/ipc/dmq.node.sock"),
380385
pool_env_path: PathBuf::from(r"test/path/node-pool1/pool.env"),
381386
kes_secret_key_path: PathBuf::from(r"test/path/node-pool1/shelley/kes.skey"),
382387
operational_certificate_path: PathBuf::from(
@@ -385,7 +390,8 @@ mod tests {
385390
},],
386391
full_nodes: vec![FullNode {
387392
db_path: PathBuf::from(r"test/path/node-full1/db"),
388-
socket_path: PathBuf::from(r"test/path/node-full1/ipc/node.sock")
393+
socket_path: PathBuf::from(r"test/path/node-full1/ipc/node.sock"),
394+
dmq_socket_path: PathBuf::from(r"test/path/node-full1/ipc/dmq.node.sock")
389395
}]
390396
},
391397
devnet.topology()

mithril-test-lab/mithril-end-to-end/src/main.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,13 @@ pub struct Args {
133133
#[clap(long)]
134134
use_dmq: bool,
135135

136+
/// DMQ node flavor (used only when 'use_dmq' is set, can be 'haskell' or 'fake')
137+
///
138+
/// 'haskell': will use the DMQ network created within the 'mithril-devnet'
139+
/// 'fake': will use a fake DMQ network within created with the Mithril relay
140+
#[clap(long, default_value = "haskell")]
141+
dmq_node_flavor: Option<String>,
142+
136143
/// Skip cardano binaries download
137144
#[clap(long)]
138145
skip_cardano_bin_download: bool,
@@ -372,6 +379,7 @@ impl App {
372379
signed_entity_types: args.signed_entity_types.clone(),
373380
run_only_mode,
374381
use_dmq,
382+
dmq_node_flavor: args.dmq_node_flavor,
375383
use_relays,
376384
relay_signer_registration_mode,
377385
relay_signature_registration_mode,

mithril-test-lab/mithril-end-to-end/src/mithril/aggregator.rs

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ pub struct AggregatorConfig<'a> {
4040
pub chain_observer_type: &'a str,
4141
pub leader_aggregator_endpoint: &'a Option<String>,
4242
pub use_dmq: bool,
43+
pub dmq_node_flavor: &'a Option<String>,
4344
}
4445

4546
pub struct Aggregator {
@@ -130,14 +131,32 @@ impl Aggregator {
130131
if let Some(leader_aggregator_endpoint) = aggregator_config.leader_aggregator_endpoint {
131132
env.insert("LEADER_AGGREGATOR_ENDPOINT", leader_aggregator_endpoint);
132133
}
133-
let dmq_node_socket_path = aggregator_config
134-
.work_dir
135-
.join(format!("dmq-aggregator-{}.socket", aggregator_config.index));
134+
let dmq_node_socket_path = if aggregator_config.use_dmq {
135+
match aggregator_config.dmq_node_flavor {
136+
Some(flavor) if flavor == "haskell" => aggregator_config
137+
.full_node
138+
.dmq_socket_path
139+
.to_str()
140+
.unwrap()
141+
.to_string(),
142+
Some(flavor) if flavor == "fake" => aggregator_config
143+
.work_dir
144+
.join(format!("dmq-aggregator-{}.socket", aggregator_config.index))
145+
.to_str()
146+
.unwrap()
147+
.to_string(),
148+
_ => {
149+
return Err(anyhow!(format!(
150+
"Unsupported DMQ node flavor: {:?}",
151+
aggregator_config.dmq_node_flavor
152+
)));
153+
}
154+
}
155+
} else {
156+
"".to_string()
157+
};
136158
if aggregator_config.use_dmq {
137-
env.insert(
138-
"DMQ_NODE_SOCKET_PATH",
139-
dmq_node_socket_path.to_str().unwrap(),
140-
);
159+
env.insert("DMQ_NODE_SOCKET_PATH", dmq_node_socket_path.as_str());
141160
}
142161
let args = vec![
143162
"--db-directory",

mithril-test-lab/mithril-end-to-end/src/mithril/infrastructure.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ pub struct MithrilInfrastructureConfig {
3737
pub use_p2p_passive_relays: bool,
3838
pub skip_signature_delayer: bool,
3939
pub use_dmq: bool,
40+
pub dmq_node_flavor: Option<String>,
4041
pub use_era_specific_work_dir: bool,
4142
}
4243

@@ -72,6 +73,7 @@ impl MithrilInfrastructureConfig {
7273
use_p2p_passive_relays: false,
7374
skip_signature_delayer: false,
7475
use_dmq: false,
76+
dmq_node_flavor: Some("fake".to_string()),
7577
use_era_specific_work_dir: false,
7678
}
7779
}
@@ -260,6 +262,7 @@ impl MithrilInfrastructure {
260262
chain_observer_type,
261263
leader_aggregator_endpoint: &leader_aggregator_endpoint,
262264
use_dmq: config.use_dmq,
265+
dmq_node_flavor: &config.dmq_node_flavor,
263266
})?;
264267

265268
aggregator
@@ -399,6 +402,7 @@ impl MithrilInfrastructure {
399402
enable_certification,
400403
skip_signature_delayer: config.skip_signature_delayer,
401404
use_dmq: config.use_dmq,
405+
dmq_node_flavor: &config.dmq_node_flavor,
402406
})?;
403407
signer.start().await?;
404408

mithril-test-lab/mithril-end-to-end/src/mithril/signer.rs

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1-
use crate::devnet::PoolNode;
2-
use crate::utils::MithrilCommand;
3-
use crate::{DEVNET_MAGIC_ID, ERA_MARKERS_VERIFICATION_KEY};
4-
use anyhow::Context;
5-
use mithril_common::StdResult;
6-
use mithril_common::entities::PartyId;
7-
use slog_scope::info;
81
use std::collections::HashMap;
92
use std::path::Path;
103
use std::sync::Arc;
4+
5+
use anyhow::{Context, anyhow};
6+
use mithril_common::StdResult;
7+
use mithril_common::entities::PartyId;
8+
use slog_scope::info;
119
use tokio::process::Child;
1210
use tokio::sync::RwLock;
1311

12+
use crate::devnet::PoolNode;
13+
use crate::utils::MithrilCommand;
14+
use crate::{DEVNET_MAGIC_ID, ERA_MARKERS_VERIFICATION_KEY};
15+
1416
#[derive(Debug)]
1517
pub struct SignerConfig<'a> {
1618
pub signer_number: usize,
@@ -27,6 +29,7 @@ pub struct SignerConfig<'a> {
2729
pub enable_certification: bool,
2830
pub skip_signature_delayer: bool,
2931
pub use_dmq: bool,
32+
pub dmq_node_flavor: &'a Option<String>,
3033
}
3134

3235
#[derive(Debug)]
@@ -105,14 +108,29 @@ impl Signer {
105108
} else {
106109
env.insert("PARTY_ID", &party_id);
107110
}
108-
let dmq_node_socket_path = signer_config
109-
.work_dir
110-
.join(format!("dmq-signer-{}.socket", signer_config.signer_number));
111+
let dmq_node_socket_path = if signer_config.use_dmq {
112+
match signer_config.dmq_node_flavor {
113+
Some(flavor) if flavor == "haskell" => {
114+
signer_config.pool_node.dmq_socket_path.to_str().unwrap().to_string()
115+
}
116+
Some(flavor) if flavor == "fake" => signer_config
117+
.work_dir
118+
.join(format!("dmq-signer-{}.socket", signer_config.signer_number))
119+
.to_str()
120+
.unwrap()
121+
.to_string(),
122+
_ => {
123+
return Err(anyhow!(format!(
124+
"Unsupported DMQ node flavor: {:?}",
125+
signer_config.dmq_node_flavor
126+
)));
127+
}
128+
}
129+
} else {
130+
"".to_string()
131+
};
111132
if signer_config.use_dmq {
112-
env.insert(
113-
"DMQ_NODE_SOCKET_PATH",
114-
dmq_node_socket_path.to_str().unwrap(),
115-
);
133+
env.insert("DMQ_NODE_SOCKET_PATH", dmq_node_socket_path.as_str());
116134
}
117135
let args = vec!["-vvv"];
118136

mithril-test-lab/mithril-end-to-end/src/stress_test/aggregator_helpers.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ pub async fn bootstrap_aggregator(
3737
chain_observer_type,
3838
leader_aggregator_endpoint: &None,
3939
use_dmq: false,
40+
dmq_node_flavor: &None,
4041
})
4142
.unwrap();
4243

mithril-test-lab/mithril-end-to-end/src/stress_test/entities.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ impl AggregatorParameters {
7474
let full_node = FullNode {
7575
db_path: db_path.to_path_buf(),
7676
socket_path: PathBuf::new(),
77+
dmq_socket_path: PathBuf::new(),
7778
};
7879
let tmp_dir = opts
7980
.temporary_path

0 commit comments

Comments
 (0)