Skip to content

Commit

Permalink
Merge branch 'tomas/masp-e2e-test' (#3365)
Browse files Browse the repository at this point in the history
* tomas/masp-e2e-test:
  e2e/ledger: revive masp txs and queries test
  • Loading branch information
brentstone committed Jul 10, 2024
2 parents d102a7e + b6ee545 commit 2a7d5ad
Show file tree
Hide file tree
Showing 3 changed files with 155 additions and 4 deletions.
5 changes: 3 additions & 2 deletions .github/workflows/scripts/e2e.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,6 @@
"e2e::wallet_tests::wallet_address_cmds": 1,
"e2e::wallet_tests::wallet_encrypted_key_cmds": 1,
"e2e::wallet_tests::wallet_encrypted_key_cmds_env_var": 1,
"e2e::wallet_tests::wallet_unencrypted_key_cmds": 1
}
"e2e::wallet_tests::wallet_unencrypted_key_cmds": 1,
"e2e::ledger_tests::masp_txs_and_queries": 82
}
150 changes: 150 additions & 0 deletions crates/tests/src/e2e/ledger_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2320,3 +2320,153 @@ fn rollback() -> Result<()> {

Ok(())
}

/// We test shielding, shielded to shielded and unshielding transfers:
/// 1. Run the ledger node
/// 2. Shield 20 BTC from Albert to PA(A)
/// 3. Transfer 7 BTC from SK(A) to PA(B)
/// 4. Assert BTC balance at VK(A) is 13
/// 5. Unshield 5 BTC from SK(B) to Bertha
/// 6. Assert BTC balance at VK(B) is 2
///
/// NOTE: We need this test to verify the correctness of the proofs generation
/// and verification process because integration tests use mocks.
#[test]
fn masp_txs_and_queries() -> Result<()> {
// Lengthen epoch to ensure that a transaction can be constructed and
// submitted within the same block. Necessary to ensure that conversion is
// not invalidated.
let test = setup::network(
|mut genesis, base_dir| {
genesis.parameters.parameters.epochs_per_year =
epochs_per_year_from_min_duration(3600);
genesis.parameters.parameters.min_num_of_blocks = 1;
setup::set_validators(1, genesis, base_dir, default_port_offset)
},
None,
)?;
// Run all cmds on the first validator
let who = Who::Validator(0);
set_ethereum_bridge_mode(
&test,
&test.net.chain_id,
who,
ethereum_bridge::ledger::Mode::Off,
None,
);

// 1. Run the ledger node
let _bg_ledger =
start_namada_ledger_node_wait_wasm(&test, Some(0), Some(40))?
.background();

let rpc_address = get_actor_rpc(&test, who);
let _ep1 = epoch_sleep(&test, &rpc_address, 720)?;

// add necessary viewing keys to shielded context
let mut sync = run_as!(
test,
who,
Bin::Client,
vec![
"shielded-sync",
"--viewing-keys",
AA_VIEWING_KEY,
AB_VIEWING_KEY,
"--node",
&rpc_address,
],
Some(15),
)?;
sync.assert_success();
let txs_args = vec![
// 2. Shield 20 BTC from Albert to PA(A)
(
vec![
"shield",
"--source",
ALBERT,
"--target",
AA_PAYMENT_ADDRESS,
"--token",
BTC,
"--amount",
"20",
],
TX_APPLIED_SUCCESS,
),
// 3. Transfer 7 BTC from SK(A) to PA(B)
(
vec![
"transfer",
"--source",
A_SPENDING_KEY,
"--target",
AB_PAYMENT_ADDRESS,
"--token",
BTC,
"--amount",
"7",
"--gas-payer",
CHRISTEL_KEY,
],
TX_APPLIED_SUCCESS,
),
// 4. Assert BTC balance at VK(A) is 13
(
vec!["balance", "--owner", AA_VIEWING_KEY, "--token", BTC],
"btc: 13",
),
// 5. Unshield 5 BTC from SK(B) to Bertha
(
vec![
"unshield",
"--source",
B_SPENDING_KEY,
"--target",
BERTHA,
"--token",
BTC,
"--amount",
"5",
"--gas-payer",
CHRISTEL_KEY,
],
TX_APPLIED_SUCCESS,
),
// 6. Assert BTC balance at VK(B) is 2
(
vec!["balance", "--owner", AB_VIEWING_KEY, "--token", BTC],
"btc: 2",
),
];

for (tx_args, tx_result) in &txs_args {
// sync shielded context
let mut sync = run_as!(
test,
who,
Bin::Client,
vec!["shielded-sync", "--node", &rpc_address],
Some(15),
)?;
sync.assert_success();
for &dry_run in &[true, false] {
let tx_args = if dry_run
&& (tx_args[0] == "transfer"
|| tx_args[0] == "shield"
|| tx_args[0] == "unshield")
{
[tx_args.clone(), vec!["--dry-run"]].concat()
} else {
tx_args.clone()
};
let mut client =
run_as!(test, who, Bin::Client, tx_args, Some(720))?;

client.exp_string(tx_result)?;
}
}

Ok(())
}
4 changes: 2 additions & 2 deletions crates/tests/src/e2e/setup.rs
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ where
let mut sign_pre_genesis_txs = run_cmd(
Bin::Client,
args,
Some(5),
Some(15),
&working_dir(),
base_dir,
format!("{}:{}", std::file!(), std::line!()),
Expand Down Expand Up @@ -434,7 +434,7 @@ pub fn network(
let mut init_network = run_cmd(
Bin::Client,
args,
Some(5),
Some(15),
&working_dir,
&genesis_dir,
format!("{}:{}", std::file!(), std::line!()),
Expand Down

0 comments on commit 2a7d5ad

Please sign in to comment.