Skip to content

Commit 2d041d2

Browse files
committed
Add hard fork latest era at epoch configuration to end to end test
This will allow to test hard fork of the Cardano node to the latest era at given epoch.
1 parent 098468d commit 2d041d2

File tree

4 files changed

+67
-37
lines changed

4 files changed

+67
-37
lines changed

mithril-test-lab/mithril-devnet/mkfiles/mkfiles-init.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ fi
1111
if [ -z "${HARD_FORK_BABBAGE_AT_EPOCH}" ]; then
1212
HARD_FORK_BABBAGE_AT_EPOCH=0
1313
fi
14-
if [ -n "${HARD_FORK_LATEST_ERA_AT_EPOCH}" ]; then
15-
HARD_FORK_CONWAY_AT_EPOCH=$(( HARD_FORK_BABBAGE_AT_EPOCH + HARD_FORK_LATEST_ERA_AT_EPOCH ))
14+
if [ -n "${CARDANO_HARD_FORK_LATEST_ERA_AT_EPOCH}" ]; then
15+
HARD_FORK_CONWAY_AT_EPOCH=$(( HARD_FORK_BABBAGE_AT_EPOCH + CARDANO_HARD_FORK_LATEST_ERA_AT_EPOCH ))
1616
fi
1717
if [ -z "${HARD_FORK_CONWAY_AT_EPOCH}" ]; then
1818
HARD_FORK_CONWAY_AT_EPOCH=0
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
mod runner;
22

3-
pub use runner::{BftNode, Devnet, DevnetTopology, PoolNode};
3+
pub use runner::{BftNode, Devnet, DevnetBootstrapArgs, DevnetTopology, PoolNode};

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

Lines changed: 49 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -52,47 +52,72 @@ pub struct DevnetTopology {
5252
pub pool_nodes: Vec<PoolNode>,
5353
}
5454

55+
#[derive(Debug, Clone)]
56+
pub struct DevnetBootstrapArgs {
57+
pub devnet_scripts_dir: PathBuf,
58+
pub artifacts_target_dir: PathBuf,
59+
pub number_of_bft_nodes: u8,
60+
pub number_of_pool_nodes: u8,
61+
pub cardano_slot_length: f64,
62+
pub cardano_epoch_length: f64,
63+
pub cardano_hard_fork_latest_era_at_epoch: u16,
64+
pub skip_cardano_bin_download: bool,
65+
}
66+
5567
impl Devnet {
56-
pub async fn bootstrap(
57-
devnet_scripts_dir: PathBuf,
58-
artifacts_target_dir: PathBuf,
59-
number_of_bft_nodes: u8,
60-
number_of_pool_nodes: u8,
61-
cardano_slot_length: f64,
62-
cardano_epoch_length: f64,
63-
skip_cardano_bin_download: bool,
64-
) -> StdResult<Devnet> {
68+
pub async fn bootstrap(bootstrap_args: &DevnetBootstrapArgs) -> StdResult<Devnet> {
6569
let bootstrap_script = "devnet-mkfiles.sh";
66-
let bootstrap_script_path = devnet_scripts_dir
70+
let bootstrap_script_path = bootstrap_args
71+
.devnet_scripts_dir
6772
.canonicalize()
6873
.with_context(|| {
6974
format!(
7075
"Can't find bootstrap script '{}' in {}",
7176
bootstrap_script,
72-
devnet_scripts_dir.display(),
77+
bootstrap_args.devnet_scripts_dir.display(),
7378
)
7479
})?
7580
.join(bootstrap_script);
7681

77-
if artifacts_target_dir.exists() {
78-
fs::remove_dir_all(&artifacts_target_dir)
82+
if bootstrap_args.artifacts_target_dir.exists() {
83+
fs::remove_dir_all(&bootstrap_args.artifacts_target_dir)
7984
.with_context(|| "Previous artifacts dir removal failed")?;
8085
}
8186

8287
let mut bootstrap_command = Command::new(&bootstrap_script_path);
8388
bootstrap_command.env(
8489
"SKIP_CARDANO_BIN_DOWNLOAD",
85-
skip_cardano_bin_download.to_string(),
90+
bootstrap_args.skip_cardano_bin_download.to_string(),
91+
);
92+
bootstrap_command.env(
93+
"ARTIFACTS_DIR",
94+
bootstrap_args.artifacts_target_dir.to_str().unwrap(),
95+
);
96+
bootstrap_command.env(
97+
"NUM_BFT_NODES",
98+
bootstrap_args.number_of_bft_nodes.to_string(),
99+
);
100+
bootstrap_command.env(
101+
"NUM_POOL_NODES",
102+
bootstrap_args.number_of_pool_nodes.to_string(),
103+
);
104+
bootstrap_command.env(
105+
"SLOT_LENGTH",
106+
bootstrap_args.cardano_slot_length.to_string(),
107+
);
108+
bootstrap_command.env(
109+
"EPOCH_LENGTH",
110+
bootstrap_args.cardano_epoch_length.to_string(),
111+
);
112+
bootstrap_command.env(
113+
"CARDANO_HARD_FORK_LATEST_ERA_AT_EPOCH",
114+
bootstrap_args
115+
.cardano_hard_fork_latest_era_at_epoch
116+
.to_string(),
86117
);
87-
bootstrap_command.env("ARTIFACTS_DIR", artifacts_target_dir.to_str().unwrap());
88-
bootstrap_command.env("NUM_BFT_NODES", number_of_bft_nodes.to_string());
89-
bootstrap_command.env("NUM_POOL_NODES", number_of_pool_nodes.to_string());
90-
bootstrap_command.env("SLOT_LENGTH", cardano_slot_length.to_string());
91-
bootstrap_command.env("EPOCH_LENGTH", cardano_epoch_length.to_string());
92-
bootstrap_command.env("HARD_FORK_LATEST_ERA_AT_EPOCH", "1000"); //TODO: set as configuration parameter
93118

94119
bootstrap_command
95-
.current_dir(devnet_scripts_dir)
120+
.current_dir(&bootstrap_args.devnet_scripts_dir)
96121
.stdout(Stdio::null())
97122
.kill_on_drop(true);
98123

@@ -106,9 +131,9 @@ impl Devnet {
106131
.with_context(|| format!("{bootstrap_script} failed to run"))?;
107132

108133
Ok(Devnet {
109-
artifacts_dir: artifacts_target_dir,
110-
number_of_bft_nodes,
111-
number_of_pool_nodes,
134+
artifacts_dir: bootstrap_args.artifacts_target_dir.to_owned(),
135+
number_of_bft_nodes: bootstrap_args.number_of_bft_nodes,
136+
number_of_pool_nodes: bootstrap_args.number_of_pool_nodes,
112137
})
113138
}
114139

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

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use clap::Parser;
22
use mithril_common::StdResult;
33
use mithril_end_to_end::{
4-
Devnet, MithrilInfrastructure, MithrilInfrastructureConfig, RunOnly, Spec,
4+
Devnet, DevnetBootstrapArgs, MithrilInfrastructure, MithrilInfrastructureConfig, RunOnly, Spec,
55
};
66
use slog::{Drain, Level, Logger};
77
use slog_scope::{error, info};
@@ -54,6 +54,10 @@ pub struct Args {
5454
#[clap(long, default_value_t = 45.0)]
5555
cardano_epoch_length: f64,
5656

57+
/// Epoch at which hard fork to the latest Cardano era will be made (starts with the latest era by default)
58+
#[clap(long, default_value_t = 0)]
59+
cardano_hard_fork_latest_era_at_epoch: u16,
60+
5761
/// Mithril era to run
5862
#[clap(long, default_value = "thales")]
5963
mithril_era: String,
@@ -118,15 +122,16 @@ async fn main() -> StdResult<()> {
118122
let run_only_mode = args.run_only;
119123
let use_p2p_network_mode = args.use_p2p_network;
120124

121-
let devnet = Devnet::bootstrap(
122-
args.devnet_scripts_directory,
123-
work_dir.join("devnet"),
124-
args.number_of_bft_nodes,
125-
args.number_of_pool_nodes,
126-
args.cardano_slot_length,
127-
args.cardano_epoch_length,
128-
args.skip_cardano_bin_download,
129-
)
125+
let devnet = Devnet::bootstrap(&DevnetBootstrapArgs {
126+
devnet_scripts_dir: args.devnet_scripts_directory,
127+
artifacts_target_dir: work_dir.join("devnet"),
128+
number_of_bft_nodes: args.number_of_bft_nodes,
129+
number_of_pool_nodes: args.number_of_pool_nodes,
130+
cardano_slot_length: args.cardano_slot_length,
131+
cardano_epoch_length: args.cardano_epoch_length,
132+
cardano_hard_fork_latest_era_at_epoch: args.cardano_hard_fork_latest_era_at_epoch,
133+
skip_cardano_bin_download: args.skip_cardano_bin_download,
134+
})
130135
.await?;
131136

132137
let mut infrastructure = MithrilInfrastructure::start(&MithrilInfrastructureConfig {

0 commit comments

Comments
 (0)