Skip to content

Commit

Permalink
test/e2e: add a test for genesis manipulation
Browse files Browse the repository at this point in the history
  • Loading branch information
tzemanovic committed Sep 25, 2024
1 parent 112c930 commit 6d41daa
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 3 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/scripts/e2e.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@
"e2e::wallet_tests::wallet_encrypted_key_cmds_env_var": 1,
"e2e::wallet_tests::wallet_unencrypted_key_cmds": 1,
"e2e::ledger_tests::masp_txs_and_queries": 82,
"e2e::ledger_tests::test_genesis_chain_id_change": 35
"e2e::ledger_tests::test_genesis_chain_id_change": 35,
"e2e::ledger_tests::test_genesis_manipulation": 103
}
74 changes: 72 additions & 2 deletions crates/tests/src/e2e/ledger_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,16 @@ use color_eyre::eyre::Result;
use color_eyre::owo_colors::OwoColorize;
use namada_apps_lib::cli::context::ENV_VAR_CHAIN_ID;
use namada_apps_lib::client::utils::PRE_GENESIS_DIR;
use namada_apps_lib::config::genesis::chain;
use namada_apps_lib::config::genesis::templates::TokenBalances;
use namada_apps_lib::config::utils::convert_tm_addr_to_socket_addr;
use namada_apps_lib::config::{self, ethereum_bridge};
use namada_apps_lib::tendermint_config::net::Address as TendermintAddress;
use namada_apps_lib::wallet;
use namada_apps_lib::wallet::{self, Alias};
use namada_core::chain::ChainId;
use namada_core::token::NATIVE_MAX_DECIMAL_PLACES;
use namada_sdk::address::Address;
use namada_sdk::chain::Epoch;
use namada_sdk::chain::{ChainIdPrefix, Epoch};
use namada_sdk::time::DateTimeUtc;
use namada_sdk::token;
use namada_test_utils::TestWasms;
Expand Down Expand Up @@ -2734,3 +2736,71 @@ fn test_genesis_chain_id_change() -> Result<()> {

Ok(())
}

/// Test that any changes done to a genesis config after a chain is finalized
/// will make it fail validation.
#[test]
fn test_genesis_manipulation() -> Result<()> {
let test = setup::single_node_net().unwrap();

set_ethereum_bridge_mode(
&test,
&test.net.chain_id,
Who::Validator(0),
ethereum_bridge::ledger::Mode::Off,
None,
);

let chain_dir = test.get_chain_dir(Who::Validator(0));
let genesis = chain::Finalized::read_toml_files(&chain_dir).unwrap();

let modified_genesis = [
{
let mut genesis = genesis.clone();
genesis
.balances
.token
.insert(Alias::from("test"), TokenBalances(Default::default()));
genesis
},
{
let mut genesis = genesis.clone();
genesis.balances.token.remove(&Alias::from("NAM"));
genesis
},
{
let mut genesis = genesis.clone();
genesis.metadata.address_gen = None;
genesis
},
{
let mut genesis = genesis.clone();
// Invalid chain ID
genesis.metadata.chain_id = ChainId("Invalid ID".to_string());
genesis
},
{
let mut genesis = genesis.clone();
// Random valid chain ID
genesis.metadata.chain_id = ChainId::from_genesis(
ChainIdPrefix::from_str("TEST").unwrap(),
[1, 2, 3],
);
genesis
},
];

for genesis in modified_genesis {
// Any modification should invalide the genesis
assert!(!genesis.is_valid());

genesis.write_toml_files(&chain_dir).unwrap();

// A node should fail to start-up
let result =
start_namada_ledger_node_wait_wasm(&test, Some(0), Some(40));
assert!(result.is_err())
}

Ok(())
}

0 comments on commit 6d41daa

Please sign in to comment.