From ea3081bd6b9130ee21741c25dbe9c88146bccecb Mon Sep 17 00:00:00 2001 From: jeluard Date: Wed, 28 May 2025 16:01:12 +0200 Subject: [PATCH 01/14] chore: extract Network from NetworkName Signed-off-by: jeluard --- crates/amaru/tests/summary.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/crates/amaru/tests/summary.rs b/crates/amaru/tests/summary.rs index de3cecd1..ca9cd66e 100644 --- a/crates/amaru/tests/summary.rs +++ b/crates/amaru/tests/summary.rs @@ -91,10 +91,16 @@ fn compare_preprod_snapshot(epoch: u64) { let global_parameters: &GlobalParameters = network.into(); let protocol_parameters = ProtocolParameters::default(); + let network_name = NetworkName::Preprod; + let network = if network_name == NetworkName::Mainnet { + Network::Mainnet + } else { + Network::Testnet + }; let dreps = GovernanceSummary::new( snapshot.as_ref(), preprod_protocol_version(epoch), - network.into(), + network_name.into(), &protocol_parameters, ) .unwrap(); @@ -108,7 +114,7 @@ fn compare_preprod_snapshot(epoch: u64) { .unwrap(); insta::assert_json_snapshot!( format!("stake_distribution_{}", epoch), - stake_distr.for_network(Network::Testnet), + stake_distr.for_network(network), ); let snapshot_from_the_future = db(epoch + 2); From 276ceec7f278b4e3aed67f853fa7ec38517e821f Mon Sep 17 00:00:00 2001 From: jeluard Date: Wed, 28 May 2025 16:26:33 +0200 Subject: [PATCH 02/14] chore: use From for conversion Signed-off-by: jeluard --- crates/amaru-kernel/src/network.rs | 11 +++++++++++ crates/amaru/tests/summary.rs | 9 ++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/crates/amaru-kernel/src/network.rs b/crates/amaru-kernel/src/network.rs index e179bb65..8e6a67e2 100644 --- a/crates/amaru-kernel/src/network.rs +++ b/crates/amaru-kernel/src/network.rs @@ -14,6 +14,7 @@ use std::{fs::File, io::BufReader, path::Path, sync::LazyLock}; +use pallas_addresses::Network; pub use slot_arithmetic::{Bound, EraHistory, EraParams, Summary}; use slot_arithmetic::{Epoch, Slot}; @@ -308,6 +309,16 @@ impl std::str::FromStr for NetworkName { } } +impl From for Network { + fn from(value: NetworkName) -> Self { + if value == NetworkName::Mainnet { + Network::Mainnet + } else { + Network::Testnet + } + } +} + impl NetworkName { pub fn to_network_magic(self) -> u32 { match self { diff --git a/crates/amaru/tests/summary.rs b/crates/amaru/tests/summary.rs index ca9cd66e..e38f0b4c 100644 --- a/crates/amaru/tests/summary.rs +++ b/crates/amaru/tests/summary.rs @@ -15,7 +15,7 @@ use amaru_kernel::{ network::NetworkName, protocol_parameters::{GlobalParameters, ProtocolParameters}, - Network, ProtocolVersion, PROTOCOL_VERSION_10, PROTOCOL_VERSION_9, + ProtocolVersion, PROTOCOL_VERSION_10, PROTOCOL_VERSION_9, }; use amaru_ledger::{ store::Snapshot, @@ -92,11 +92,6 @@ fn compare_preprod_snapshot(epoch: u64) { let protocol_parameters = ProtocolParameters::default(); let network_name = NetworkName::Preprod; - let network = if network_name == NetworkName::Mainnet { - Network::Mainnet - } else { - Network::Testnet - }; let dreps = GovernanceSummary::new( snapshot.as_ref(), preprod_protocol_version(epoch), @@ -114,7 +109,7 @@ fn compare_preprod_snapshot(epoch: u64) { .unwrap(); insta::assert_json_snapshot!( format!("stake_distribution_{}", epoch), - stake_distr.for_network(network), + stake_distr.for_network(network_name.into()), ); let snapshot_from_the_future = db(epoch + 2); From c2a66b3ac080fcc3950fd7cfaecfdf2c7fec9f15 Mon Sep 17 00:00:00 2001 From: jeluard Date: Wed, 28 May 2025 17:01:16 +0200 Subject: [PATCH 03/14] chore: move tests into per network folder Signed-off-by: jeluard --- .../summary__rewards_summary_163.snap | 0 .../summary__rewards_summary_164.snap | 0 .../summary__rewards_summary_165.snap | 0 .../summary__rewards_summary_166.snap | 0 .../summary__rewards_summary_167.snap | 0 .../summary__rewards_summary_168.snap | 0 .../summary__rewards_summary_169.snap | 0 .../summary__rewards_summary_170.snap | 0 .../summary__rewards_summary_171.snap | 0 .../summary__rewards_summary_172.snap | 0 .../summary__rewards_summary_173.snap | 0 .../summary__rewards_summary_174.snap | 0 .../summary__rewards_summary_175.snap | 0 .../summary__rewards_summary_176.snap | 0 .../summary__rewards_summary_177.snap | 0 .../summary__rewards_summary_178.snap | 0 .../summary__rewards_summary_179.snap | 0 .../summary__stake_distribution_163.snap | 0 .../summary__stake_distribution_164.snap | 0 .../summary__stake_distribution_165.snap | 0 .../summary__stake_distribution_166.snap | 0 .../summary__stake_distribution_167.snap | 0 .../summary__stake_distribution_168.snap | 0 .../summary__stake_distribution_169.snap | 0 .../summary__stake_distribution_170.snap | 0 .../summary__stake_distribution_171.snap | 0 .../summary__stake_distribution_172.snap | 0 .../summary__stake_distribution_173.snap | 0 .../summary__stake_distribution_174.snap | 0 .../summary__stake_distribution_175.snap | 0 .../summary__stake_distribution_176.snap | 0 .../summary__stake_distribution_177.snap | 0 .../summary__stake_distribution_178.snap | 0 .../summary__stake_distribution_179.snap | 0 crates/amaru/tests/summary.rs | 44 ++++++++++--------- 35 files changed, 23 insertions(+), 21 deletions(-) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_163.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_164.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_165.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_166.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_167.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_168.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_169.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_170.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_171.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_172.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_173.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_174.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_175.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_176.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_177.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_178.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__rewards_summary_179.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_163.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_164.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_165.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_166.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_167.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_168.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_169.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_170.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_171.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_172.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_173.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_174.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_175.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_176.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_177.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_178.snap (100%) rename crates/amaru/tests/snapshots/{ => preprod}/summary__stake_distribution_179.snap (100%) diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_163.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_163.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_163.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_163.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_164.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_164.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_164.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_164.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_165.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_165.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_165.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_165.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_166.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_166.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_166.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_166.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_167.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_167.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_167.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_167.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_168.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_168.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_168.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_168.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_169.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_169.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_169.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_169.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_170.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_170.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_170.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_170.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_171.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_171.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_171.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_171.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_172.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_172.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_172.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_172.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_173.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_173.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_173.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_173.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_174.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_174.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_174.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_174.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_175.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_175.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_175.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_175.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_176.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_176.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_176.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_176.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_177.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_177.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_177.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_177.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_178.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_178.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_178.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_178.snap diff --git a/crates/amaru/tests/snapshots/summary__rewards_summary_179.snap b/crates/amaru/tests/snapshots/preprod/summary__rewards_summary_179.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__rewards_summary_179.snap rename to crates/amaru/tests/snapshots/preprod/summary__rewards_summary_179.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_163.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_163.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_163.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_163.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_164.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_164.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_164.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_164.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_165.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_165.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_165.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_165.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_166.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_166.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_166.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_166.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_167.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_167.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_167.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_167.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_168.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_168.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_168.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_168.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_169.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_169.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_169.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_169.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_170.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_170.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_170.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_170.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_171.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_171.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_171.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_171.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_172.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_172.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_172.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_172.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_173.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_173.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_173.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_173.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_174.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_174.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_174.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_174.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_175.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_175.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_175.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_175.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_176.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_176.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_176.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_176.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_177.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_177.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_177.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_177.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_178.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_178.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_178.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_178.snap diff --git a/crates/amaru/tests/snapshots/summary__stake_distribution_179.snap b/crates/amaru/tests/snapshots/preprod/summary__stake_distribution_179.snap similarity index 100% rename from crates/amaru/tests/snapshots/summary__stake_distribution_179.snap rename to crates/amaru/tests/snapshots/preprod/summary__stake_distribution_179.snap diff --git a/crates/amaru/tests/summary.rs b/crates/amaru/tests/summary.rs index e38f0b4c..cffbe620 100644 --- a/crates/amaru/tests/summary.rs +++ b/crates/amaru/tests/summary.rs @@ -65,33 +65,32 @@ fn db(epoch: Epoch) -> Arc { handle } -#[test_case(163)] -#[test_case(164)] -#[test_case(165)] -#[test_case(166)] -#[test_case(167)] -#[test_case(168)] -#[test_case(169)] -#[test_case(170)] -#[test_case(171)] -#[test_case(172)] -#[test_case(173)] -#[test_case(174)] -#[test_case(175)] -#[test_case(176)] -#[test_case(177)] -#[test_case(178)] -#[test_case(179)] +#[test_case(NetworkName::Preprod, 163)] +#[test_case(NetworkName::Preprod, 164)] +#[test_case(NetworkName::Preprod, 165)] +#[test_case(NetworkName::Preprod, 166)] +#[test_case(NetworkName::Preprod, 167)] +#[test_case(NetworkName::Preprod, 168)] +#[test_case(NetworkName::Preprod, 169)] +#[test_case(NetworkName::Preprod, 170)] +#[test_case(NetworkName::Preprod, 171)] +#[test_case(NetworkName::Preprod, 172)] +#[test_case(NetworkName::Preprod, 173)] +#[test_case(NetworkName::Preprod, 174)] +#[test_case(NetworkName::Preprod, 175)] +#[test_case(NetworkName::Preprod, 176)] +#[test_case(NetworkName::Preprod, 177)] +#[test_case(NetworkName::Preprod, 178)] +#[test_case(NetworkName::Preprod, 179)] #[ignore] #[allow(clippy::unwrap_used)] -fn compare_preprod_snapshot(epoch: u64) { +fn compare_preprod_snapshot(network_name: NetworkName, epoch: u64) { let epoch = Epoch::from(epoch); let network = NetworkName::Preprod; let snapshot = db(epoch); let global_parameters: &GlobalParameters = network.into(); let protocol_parameters = ProtocolParameters::default(); - let network_name = NetworkName::Preprod; let dreps = GovernanceSummary::new( snapshot.as_ref(), preprod_protocol_version(epoch), @@ -108,7 +107,7 @@ fn compare_preprod_snapshot(epoch: u64) { ) .unwrap(); insta::assert_json_snapshot!( - format!("stake_distribution_{}", epoch), + format!("{}/stake_distribution_{}", network_name, epoch), stake_distr.for_network(network_name.into()), ); @@ -124,7 +123,10 @@ fn compare_preprod_snapshot(epoch: u64) { .with_unclaimed_refunds(snapshot_from_the_future.as_ref(), &protocol_parameters) .unwrap(); - insta::assert_json_snapshot!(format!("rewards_summary_{}", epoch), rewards_summary); + insta::assert_json_snapshot!( + format!("{}/rewards_summary_{}", network_name, epoch), + rewards_summary + ); } fn preprod_protocol_version(epoch: Epoch) -> ProtocolVersion { From 3dfb944a4379bb3f36c6ed1365604e4f68f3dd4b Mon Sep 17 00:00:00 2001 From: jeluard Date: Thu, 29 May 2025 09:42:43 +0200 Subject: [PATCH 04/14] fix: wrong path Signed-off-by: jeluard --- crates/amaru/tests/summary.rs | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/crates/amaru/tests/summary.rs b/crates/amaru/tests/summary.rs index cffbe620..bfe0564f 100644 --- a/crates/amaru/tests/summary.rs +++ b/crates/amaru/tests/summary.rs @@ -106,10 +106,15 @@ fn compare_preprod_snapshot(network_name: NetworkName, epoch: u64) { &protocol_parameters, ) .unwrap(); - insta::assert_json_snapshot!( - format!("{}/stake_distribution_{}", network_name, epoch), - stake_distr.for_network(network_name.into()), - ); + + insta::with_settings!({ + snapshot_path => format!("snapshots/{}", network_name) + }, { + insta::assert_json_snapshot!( + format!("stake_distribution_{}", epoch), + stake_distr.for_network(network_name.into()), + ); + }); let snapshot_from_the_future = db(epoch + 2); @@ -123,10 +128,14 @@ fn compare_preprod_snapshot(network_name: NetworkName, epoch: u64) { .with_unclaimed_refunds(snapshot_from_the_future.as_ref(), &protocol_parameters) .unwrap(); - insta::assert_json_snapshot!( - format!("{}/rewards_summary_{}", network_name, epoch), + insta::with_settings!({ + snapshot_path => format!("snapshots/{}", network_name) + }, { + insta::assert_json_snapshot!( + format!("rewards_summary_{}", epoch), rewards_summary - ); + ); + }); } fn preprod_protocol_version(epoch: Epoch) -> ProtocolVersion { From d8757c7506a358eb6bc76d4749daddb049bdc933 Mon Sep 17 00:00:00 2001 From: jeluard Date: Mon, 2 Jun 2025 15:54:32 +0200 Subject: [PATCH 05/14] fix: incorrect path and added check Signed-off-by: jeluard --- conformance-tests/scripts/generate.mjs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/conformance-tests/scripts/generate.mjs b/conformance-tests/scripts/generate.mjs index fa9a7d6f..34a532c4 100644 --- a/conformance-tests/scripts/generate.mjs +++ b/conformance-tests/scripts/generate.mjs @@ -67,7 +67,12 @@ const dreps = drepsInfo }); // Relative source of the snapshot test in the target crate. -const source = "crates/amaru/tests/summary.rs"; +const source = "crates/amaru-ledger/src/summary/rewards.rs"; +const exists = fs.existsSync(`../${source}`); +if (!exists) { + console.error(`Source file ${source} does not exist.`); + process.exit(1); +} // ---------- Rewards summary snapshot From 423708fa7323a3a1af30d4f4e3d92d976b14411e Mon Sep 17 00:00:00 2001 From: jeluard Date: Mon, 2 Jun 2025 16:14:33 +0200 Subject: [PATCH 06/14] feat: prepare for test_case generation Signed-off-by: jeluard --- .../tests/compare_snapshot_test_cases.incl | 22 ++++++++++++++++ crates/amaru/tests/summary.rs | 26 +++---------------- 2 files changed, 26 insertions(+), 22 deletions(-) create mode 100644 crates/amaru/tests/compare_snapshot_test_cases.incl diff --git a/crates/amaru/tests/compare_snapshot_test_cases.incl b/crates/amaru/tests/compare_snapshot_test_cases.incl new file mode 100644 index 00000000..4b46d124 --- /dev/null +++ b/crates/amaru/tests/compare_snapshot_test_cases.incl @@ -0,0 +1,22 @@ +#[test_case(NetworkName::Preprod, 163)] +#[test_case(NetworkName::Preprod, 164)] +#[test_case(NetworkName::Preprod, 165)] +#[test_case(NetworkName::Preprod, 166)] +#[test_case(NetworkName::Preprod, 167)] +#[test_case(NetworkName::Preprod, 168)] +#[test_case(NetworkName::Preprod, 169)] +#[test_case(NetworkName::Preprod, 170)] +#[test_case(NetworkName::Preprod, 171)] +#[test_case(NetworkName::Preprod, 172)] +#[test_case(NetworkName::Preprod, 173)] +#[test_case(NetworkName::Preprod, 174)] +#[test_case(NetworkName::Preprod, 175)] +#[test_case(NetworkName::Preprod, 176)] +#[test_case(NetworkName::Preprod, 177)] +#[test_case(NetworkName::Preprod, 178)] +#[test_case(NetworkName::Preprod, 179)] +#[ignore] +pub fn compare_snapshot_test_case(network_name: NetworkName, epoch: u64) { + let epoch = Epoch::from(epoch); + compare_snapshot(network_name, epoch) +} \ No newline at end of file diff --git a/crates/amaru/tests/summary.rs b/crates/amaru/tests/summary.rs index bfe0564f..bd9423ab 100644 --- a/crates/amaru/tests/summary.rs +++ b/crates/amaru/tests/summary.rs @@ -65,30 +65,12 @@ fn db(epoch: Epoch) -> Arc { handle } -#[test_case(NetworkName::Preprod, 163)] -#[test_case(NetworkName::Preprod, 164)] -#[test_case(NetworkName::Preprod, 165)] -#[test_case(NetworkName::Preprod, 166)] -#[test_case(NetworkName::Preprod, 167)] -#[test_case(NetworkName::Preprod, 168)] -#[test_case(NetworkName::Preprod, 169)] -#[test_case(NetworkName::Preprod, 170)] -#[test_case(NetworkName::Preprod, 171)] -#[test_case(NetworkName::Preprod, 172)] -#[test_case(NetworkName::Preprod, 173)] -#[test_case(NetworkName::Preprod, 174)] -#[test_case(NetworkName::Preprod, 175)] -#[test_case(NetworkName::Preprod, 176)] -#[test_case(NetworkName::Preprod, 177)] -#[test_case(NetworkName::Preprod, 178)] -#[test_case(NetworkName::Preprod, 179)] -#[ignore] +include!("compare_snapshot_test_cases.incl"); + #[allow(clippy::unwrap_used)] -fn compare_preprod_snapshot(network_name: NetworkName, epoch: u64) { - let epoch = Epoch::from(epoch); +fn compare_snapshot(network_name: NetworkName, epoch: Epoch) { let network = NetworkName::Preprod; - let snapshot = db(epoch); - let global_parameters: &GlobalParameters = network.into(); + let snapshot = db(epoch); let global_parameters: &GlobalParameters = network.into(); let protocol_parameters = ProtocolParameters::default(); let dreps = GovernanceSummary::new( From 6513a25dd098de57a073d87eaef00f1bfd49171d Mon Sep 17 00:00:00 2001 From: jeluard Date: Mon, 2 Jun 2025 16:19:57 +0200 Subject: [PATCH 07/14] chore: cargo format Signed-off-by: jeluard --- crates/amaru/tests/summary.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/amaru/tests/summary.rs b/crates/amaru/tests/summary.rs index bd9423ab..c1b6e211 100644 --- a/crates/amaru/tests/summary.rs +++ b/crates/amaru/tests/summary.rs @@ -70,7 +70,8 @@ include!("compare_snapshot_test_cases.incl"); #[allow(clippy::unwrap_used)] fn compare_snapshot(network_name: NetworkName, epoch: Epoch) { let network = NetworkName::Preprod; - let snapshot = db(epoch); let global_parameters: &GlobalParameters = network.into(); + let snapshot = db(epoch); + let global_parameters: &GlobalParameters = network.into(); let protocol_parameters = ProtocolParameters::default(); let dreps = GovernanceSummary::new( From b4a2f3d104588e47b089485d0ca6c637c267140e Mon Sep 17 00:00:00 2001 From: jeluard Date: Mon, 2 Jun 2025 18:30:56 +0200 Subject: [PATCH 08/14] feat: generate snapshot tests Signed-off-by: jeluard --- crates/amaru/Cargo.toml | 1 + crates/amaru/build.rs | 71 +++++++++++++++++++ .../tests/compare_snapshot_test_cases.incl | 22 ------ crates/amaru/tests/summary.rs | 5 +- 4 files changed, 76 insertions(+), 23 deletions(-) delete mode 100644 crates/amaru/tests/compare_snapshot_test_cases.incl diff --git a/crates/amaru/Cargo.toml b/crates/amaru/Cargo.toml index 3abb7347..cb0258c6 100644 --- a/crates/amaru/Cargo.toml +++ b/crates/amaru/Cargo.toml @@ -60,3 +60,4 @@ rocksdb.workspace = true [build-dependencies] built = { workspace = true, features = ["git2"] } +amaru-kernel.workspace = true \ No newline at end of file diff --git a/crates/amaru/build.rs b/crates/amaru/build.rs index 948b28cc..5682cb55 100644 --- a/crates/amaru/build.rs +++ b/crates/amaru/build.rs @@ -12,7 +12,78 @@ // See the License for the specific language governing permissions and // limitations under the License. +use std::{ + env, + fs::{read_dir, File}, + io::Write, + path::Path, +}; + +use amaru_kernel::network::NetworkName; + +fn network_name_to_string(network: &NetworkName) -> String { + match network { + NetworkName::Mainnet => "Mainnet".to_string(), + NetworkName::Preprod => "Preprod".to_string(), + NetworkName::Preview => "Preview".to_string(), + NetworkName::Testnet(magic) => format!("Testnet:{}", magic), + } +} + +fn generated_compare_snapshot_test_cases() { + let out_dir = env::var("OUT_DIR").unwrap(); + let dest_path = Path::new(&out_dir).join("generated_compare_snapshot_test_cases.rs"); + + let snapshots_root = Path::new("tests/snapshots"); + let mut test_cases: Vec<(String, u64)> = Vec::new(); + + for network_entry in read_dir(snapshots_root).unwrap() { + let network_entry = network_entry.unwrap(); + let network_path = network_entry.path(); + + if network_path.is_dir() { + let network_name = network_path + .file_name() + .unwrap() + .to_string_lossy() + .into_owned(); + + for file_entry in read_dir(&network_path).unwrap() { + let file_entry = file_entry.unwrap(); + let file_name = file_entry.file_name().to_string_lossy().into_owned(); + + if let Some(epoch_str) = file_name + .strip_prefix("summary__rewards_summary_") + .and_then(|s| s.strip_suffix(".snap")) + { + if let Ok(epoch) = epoch_str.parse::() { + test_cases.push((network_name.clone(), epoch)); + } + } + } + } + } + + test_cases.sort(); + + let mut file = File::create(&dest_path).unwrap(); + for (network, epoch) in test_cases { + let network_name: NetworkName = network.parse().unwrap(); + writeln!(file, "#[test_case(NetworkName::{}, {})]", network_name_to_string(&network_name), epoch).unwrap(); + } + + let test_content = " + #[ignore] + pub fn compare_snapshot_test_case(network_name: NetworkName, epoch: u64) { + let epoch = Epoch::from(epoch); + compare_snapshot(network_name, epoch) + }"; + writeln!(file, "{}", test_content).unwrap(); +} + #[allow(clippy::expect_used)] fn main() { built::write_built_file().expect("Failed to acquire build-time information"); + + generated_compare_snapshot_test_cases(); } diff --git a/crates/amaru/tests/compare_snapshot_test_cases.incl b/crates/amaru/tests/compare_snapshot_test_cases.incl deleted file mode 100644 index 4b46d124..00000000 --- a/crates/amaru/tests/compare_snapshot_test_cases.incl +++ /dev/null @@ -1,22 +0,0 @@ -#[test_case(NetworkName::Preprod, 163)] -#[test_case(NetworkName::Preprod, 164)] -#[test_case(NetworkName::Preprod, 165)] -#[test_case(NetworkName::Preprod, 166)] -#[test_case(NetworkName::Preprod, 167)] -#[test_case(NetworkName::Preprod, 168)] -#[test_case(NetworkName::Preprod, 169)] -#[test_case(NetworkName::Preprod, 170)] -#[test_case(NetworkName::Preprod, 171)] -#[test_case(NetworkName::Preprod, 172)] -#[test_case(NetworkName::Preprod, 173)] -#[test_case(NetworkName::Preprod, 174)] -#[test_case(NetworkName::Preprod, 175)] -#[test_case(NetworkName::Preprod, 176)] -#[test_case(NetworkName::Preprod, 177)] -#[test_case(NetworkName::Preprod, 178)] -#[test_case(NetworkName::Preprod, 179)] -#[ignore] -pub fn compare_snapshot_test_case(network_name: NetworkName, epoch: u64) { - let epoch = Epoch::from(epoch); - compare_snapshot(network_name, epoch) -} \ No newline at end of file diff --git a/crates/amaru/tests/summary.rs b/crates/amaru/tests/summary.rs index c1b6e211..a9def969 100644 --- a/crates/amaru/tests/summary.rs +++ b/crates/amaru/tests/summary.rs @@ -65,7 +65,10 @@ fn db(epoch: Epoch) -> Arc { handle } -include!("compare_snapshot_test_cases.incl"); +include!(concat!( + env!("OUT_DIR"), + "/generated_compare_snapshot_test_cases.rs" +)); #[allow(clippy::unwrap_used)] fn compare_snapshot(network_name: NetworkName, epoch: Epoch) { From bbb7d196b2c69fec6688c4f44c5490b677b5ce85 Mon Sep 17 00:00:00 2001 From: jeluard Date: Mon, 2 Jun 2025 19:04:54 +0200 Subject: [PATCH 09/14] chore: cargo format Signed-off-by: jeluard --- crates/amaru/build.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/amaru/build.rs b/crates/amaru/build.rs index 5682cb55..a0b8854a 100644 --- a/crates/amaru/build.rs +++ b/crates/amaru/build.rs @@ -69,7 +69,13 @@ fn generated_compare_snapshot_test_cases() { let mut file = File::create(&dest_path).unwrap(); for (network, epoch) in test_cases { let network_name: NetworkName = network.parse().unwrap(); - writeln!(file, "#[test_case(NetworkName::{}, {})]", network_name_to_string(&network_name), epoch).unwrap(); + writeln!( + file, + "#[test_case(NetworkName::{}, {})]", + network_name_to_string(&network_name), + epoch + ) + .unwrap(); } let test_content = " From ff9b002ce62df1cba6f1bd0d07c00f1206567779 Mon Sep 17 00:00:00 2001 From: jeluard Date: Mon, 2 Jun 2025 20:18:39 +0200 Subject: [PATCH 10/14] chore: cargo clippy Signed-off-by: jeluard --- crates/amaru/build.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/amaru/build.rs b/crates/amaru/build.rs index a0b8854a..667bb5c0 100644 --- a/crates/amaru/build.rs +++ b/crates/amaru/build.rs @@ -30,6 +30,7 @@ fn network_name_to_string(network: &NetworkName) -> String { } } +#[allow(clippy::unwrap_used)] fn generated_compare_snapshot_test_cases() { let out_dir = env::var("OUT_DIR").unwrap(); let dest_path = Path::new(&out_dir).join("generated_compare_snapshot_test_cases.rs"); From ab33883c32c821199f55fb60141adbcffe8d05a2 Mon Sep 17 00:00:00 2001 From: jeluard Date: Mon, 2 Jun 2025 20:20:59 +0200 Subject: [PATCH 11/14] chore: address coderabbit comment Signed-off-by: jeluard --- crates/amaru/tests/summary.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/amaru/tests/summary.rs b/crates/amaru/tests/summary.rs index a9def969..8950cd8f 100644 --- a/crates/amaru/tests/summary.rs +++ b/crates/amaru/tests/summary.rs @@ -77,9 +77,10 @@ fn compare_snapshot(network_name: NetworkName, epoch: Epoch) { let global_parameters: &GlobalParameters = network.into(); let protocol_parameters = ProtocolParameters::default(); + let protocol_version = protocol_version(epoch); let dreps = GovernanceSummary::new( snapshot.as_ref(), - preprod_protocol_version(epoch), + protocol_version, network_name.into(), &protocol_parameters, ) @@ -87,7 +88,7 @@ fn compare_snapshot(network_name: NetworkName, epoch: Epoch) { let stake_distr = StakeDistribution::new( snapshot.as_ref(), - preprod_protocol_version(epoch), + protocol_version, dreps, &protocol_parameters, ) @@ -124,7 +125,7 @@ fn compare_snapshot(network_name: NetworkName, epoch: Epoch) { }); } -fn preprod_protocol_version(epoch: Epoch) -> ProtocolVersion { +fn protocol_version(epoch: Epoch) -> ProtocolVersion { if epoch <= Epoch::from(180) { return PROTOCOL_VERSION_9; } From b75cbd14c29a6f9654b42fb63596079e8b5eefde Mon Sep 17 00:00:00 2001 From: jeluard Date: Wed, 4 Jun 2025 15:25:27 +0200 Subject: [PATCH 12/14] fix: properly handle network type Signed-off-by: jeluard --- crates/amaru/tests/summary.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/amaru/tests/summary.rs b/crates/amaru/tests/summary.rs index 8950cd8f..8ec60881 100644 --- a/crates/amaru/tests/summary.rs +++ b/crates/amaru/tests/summary.rs @@ -77,7 +77,7 @@ fn compare_snapshot(network_name: NetworkName, epoch: Epoch) { let global_parameters: &GlobalParameters = network.into(); let protocol_parameters = ProtocolParameters::default(); - let protocol_version = protocol_version(epoch); + let protocol_version = protocol_version(epoch, network_name); let dreps = GovernanceSummary::new( snapshot.as_ref(), protocol_version, @@ -125,8 +125,8 @@ fn compare_snapshot(network_name: NetworkName, epoch: Epoch) { }); } -fn protocol_version(epoch: Epoch) -> ProtocolVersion { - if epoch <= Epoch::from(180) { +fn protocol_version(epoch: Epoch, network_name: NetworkName) -> ProtocolVersion { + if network_name == NetworkName::Preprod && epoch <= Epoch::from(180) { return PROTOCOL_VERSION_9; } From 1312d68650ea7a653801cac102bd3088552b712b Mon Sep 17 00:00:00 2001 From: jeluard Date: Wed, 4 Jun 2025 15:26:04 +0200 Subject: [PATCH 13/14] fix: typo Signed-off-by: jeluard --- crates/amaru/build.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/amaru/build.rs b/crates/amaru/build.rs index 667bb5c0..2894018c 100644 --- a/crates/amaru/build.rs +++ b/crates/amaru/build.rs @@ -31,7 +31,7 @@ fn network_name_to_string(network: &NetworkName) -> String { } #[allow(clippy::unwrap_used)] -fn generated_compare_snapshot_test_cases() { +fn generate_compare_snapshot_test_cases() { let out_dir = env::var("OUT_DIR").unwrap(); let dest_path = Path::new(&out_dir).join("generated_compare_snapshot_test_cases.rs"); @@ -92,5 +92,5 @@ fn generated_compare_snapshot_test_cases() { fn main() { built::write_built_file().expect("Failed to acquire build-time information"); - generated_compare_snapshot_test_cases(); + generate_compare_snapshot_test_cases(); } From 44d70fb12be81980040ba94e4ed250bca0bc8c7f Mon Sep 17 00:00:00 2001 From: jeluard Date: Tue, 10 Jun 2025 15:26:59 +0200 Subject: [PATCH 14/14] feat: use bash file to generate test_cases Signed-off-by: jeluard --- crates/amaru/build.rs | 78 ---------------- ...generated_compare_snapshot_test_cases.incl | 22 +++++ crates/amaru/tests/summary.rs | 5 +- scripts/generate-snapshot-test-cases | 91 +++++++++++++++++++ 4 files changed, 114 insertions(+), 82 deletions(-) create mode 100644 crates/amaru/tests/generated_compare_snapshot_test_cases.incl create mode 100755 scripts/generate-snapshot-test-cases diff --git a/crates/amaru/build.rs b/crates/amaru/build.rs index 2894018c..948b28cc 100644 --- a/crates/amaru/build.rs +++ b/crates/amaru/build.rs @@ -12,85 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use std::{ - env, - fs::{read_dir, File}, - io::Write, - path::Path, -}; - -use amaru_kernel::network::NetworkName; - -fn network_name_to_string(network: &NetworkName) -> String { - match network { - NetworkName::Mainnet => "Mainnet".to_string(), - NetworkName::Preprod => "Preprod".to_string(), - NetworkName::Preview => "Preview".to_string(), - NetworkName::Testnet(magic) => format!("Testnet:{}", magic), - } -} - -#[allow(clippy::unwrap_used)] -fn generate_compare_snapshot_test_cases() { - let out_dir = env::var("OUT_DIR").unwrap(); - let dest_path = Path::new(&out_dir).join("generated_compare_snapshot_test_cases.rs"); - - let snapshots_root = Path::new("tests/snapshots"); - let mut test_cases: Vec<(String, u64)> = Vec::new(); - - for network_entry in read_dir(snapshots_root).unwrap() { - let network_entry = network_entry.unwrap(); - let network_path = network_entry.path(); - - if network_path.is_dir() { - let network_name = network_path - .file_name() - .unwrap() - .to_string_lossy() - .into_owned(); - - for file_entry in read_dir(&network_path).unwrap() { - let file_entry = file_entry.unwrap(); - let file_name = file_entry.file_name().to_string_lossy().into_owned(); - - if let Some(epoch_str) = file_name - .strip_prefix("summary__rewards_summary_") - .and_then(|s| s.strip_suffix(".snap")) - { - if let Ok(epoch) = epoch_str.parse::() { - test_cases.push((network_name.clone(), epoch)); - } - } - } - } - } - - test_cases.sort(); - - let mut file = File::create(&dest_path).unwrap(); - for (network, epoch) in test_cases { - let network_name: NetworkName = network.parse().unwrap(); - writeln!( - file, - "#[test_case(NetworkName::{}, {})]", - network_name_to_string(&network_name), - epoch - ) - .unwrap(); - } - - let test_content = " - #[ignore] - pub fn compare_snapshot_test_case(network_name: NetworkName, epoch: u64) { - let epoch = Epoch::from(epoch); - compare_snapshot(network_name, epoch) - }"; - writeln!(file, "{}", test_content).unwrap(); -} - #[allow(clippy::expect_used)] fn main() { built::write_built_file().expect("Failed to acquire build-time information"); - - generate_compare_snapshot_test_cases(); } diff --git a/crates/amaru/tests/generated_compare_snapshot_test_cases.incl b/crates/amaru/tests/generated_compare_snapshot_test_cases.incl new file mode 100644 index 00000000..b9e7a505 --- /dev/null +++ b/crates/amaru/tests/generated_compare_snapshot_test_cases.incl @@ -0,0 +1,22 @@ +#[test_case(NetworkName::Preprod, 163)] +#[test_case(NetworkName::Preprod, 164)] +#[test_case(NetworkName::Preprod, 165)] +#[test_case(NetworkName::Preprod, 166)] +#[test_case(NetworkName::Preprod, 167)] +#[test_case(NetworkName::Preprod, 168)] +#[test_case(NetworkName::Preprod, 169)] +#[test_case(NetworkName::Preprod, 170)] +#[test_case(NetworkName::Preprod, 171)] +#[test_case(NetworkName::Preprod, 172)] +#[test_case(NetworkName::Preprod, 173)] +#[test_case(NetworkName::Preprod, 174)] +#[test_case(NetworkName::Preprod, 175)] +#[test_case(NetworkName::Preprod, 176)] +#[test_case(NetworkName::Preprod, 177)] +#[test_case(NetworkName::Preprod, 178)] +#[test_case(NetworkName::Preprod, 179)] +#[ignore] +pub fn compare_snapshot_test_case(network_name: NetworkName, epoch: u64) { + let epoch = Epoch::from(epoch); + compare_snapshot(network_name, epoch) +} diff --git a/crates/amaru/tests/summary.rs b/crates/amaru/tests/summary.rs index 8ec60881..d5763fb5 100644 --- a/crates/amaru/tests/summary.rs +++ b/crates/amaru/tests/summary.rs @@ -65,10 +65,7 @@ fn db(epoch: Epoch) -> Arc { handle } -include!(concat!( - env!("OUT_DIR"), - "/generated_compare_snapshot_test_cases.rs" -)); +include!("generated_compare_snapshot_test_cases.incl"); #[allow(clippy::unwrap_used)] fn compare_snapshot(network_name: NetworkName, epoch: Epoch) { diff --git a/scripts/generate-snapshot-test-cases b/scripts/generate-snapshot-test-cases new file mode 100755 index 00000000..a6fc824e --- /dev/null +++ b/scripts/generate-snapshot-test-cases @@ -0,0 +1,91 @@ +#!/bin/bash + +# Must match what is included in `crates/amaru/tests/summary.rs` +DEST_PATH="crates/amaru/tests/generated_compare_snapshot_test_cases.incl" +if [[ ! -f "$DEST_PATH" ]]; then + echo "Error: File $DEST_PATH does not exist" + exit 1 +fi + +SNAPSHOTS_ROOT="crates/amaru/tests/snapshots" + +# Check if snapshots directory exists +if [[ ! -d "$SNAPSHOTS_ROOT" ]]; then + echo "Error: Directory $SNAPSHOTS_ROOT does not exist" + exit 1 +fi + +network_name_to_string() { + local network="$1" + case "$network" in + "mainnet") + echo "Mainnet" + ;; + "preprod") + echo "Preprod" + ;; + "preview") + echo "Preview" + ;; + testnet*) + # Extract magic number if it's a testnet variant + if [[ "$network" =~ ^testnet[_-]?([0-9]+)$ ]]; then + echo "Testnet:${BASH_REMATCH[1]}" + else + echo "Testnet:0" # Default magic number + fi + ;; + *) + # Fallback: capitalize first letter + echo "${network^}" + ;; + esac +} + +# Iterate through network directories +for NETWORK_PATH in "$SNAPSHOTS_ROOT"/*; do + if [[ -d "$NETWORK_PATH" ]]; then + NETWORK_NAME=$(basename "$NETWORK_PATH") + + # Iterate through files in network directory + for FILE_PATH in "$NETWORK_PATH"/*; do + if [[ -f "$FILE_PATH" ]]; then + FILE_NAME=$(basename "$FILE_PATH") + + # Check if filename matches pattern: summary__rewards_summary_*.snap + if [[ "$FILE_NAME" =~ ^summary__rewards_summary_([0-9]+)\.snap$ ]]; then + EPOCH="${BASH_REMATCH[1]}" + # Add to test_cases array + TEST_CASES+=("$NETWORK_NAME:$EPOCH") + fi + fi + done + fi +done + +# Sort test cases +IFS=$'\n' TEST_CASES=($(sort <<<"${TEST_CASES[*]}")) +unset IFS + +# Create/truncate the output file +> "$DEST_PATH" + +# Write test cases to file +for TEST_CASE in "${TEST_CASES[@]}"; do + NETWORK="${TEST_CASE%:*}" + EPOCH="${TEST_CASE#*:}" + + NETWORK_ENUM=$(network_name_to_string "$NETWORK") + echo "#[test_case(NetworkName::$NETWORK_ENUM, $EPOCH)]" >> "$DEST_PATH" +done + +# Append the test function content +cat >> "$DEST_PATH" << 'EOF' +#[ignore] +pub fn compare_snapshot_test_case(network_name: NetworkName, epoch: u64) { + let epoch = Epoch::from(epoch); + compare_snapshot(network_name, epoch) +} +EOF + +echo "Generated test cases written to: $DEST_PATH" \ No newline at end of file