diff --git a/cli/src/test_utils.rs b/cli/src/test_utils.rs index 5f5fcbd4ad..5526022591 100644 --- a/cli/src/test_utils.rs +++ b/cli/src/test_utils.rs @@ -39,15 +39,23 @@ pub fn check_ready(rpc_client: &RpcClient) { } } -pub fn wait_for_next_epoch(rpc_client: &RpcClient) -> Epoch { +pub fn wait_for_next_epoch_plus_n_slots(rpc_client: &RpcClient, n: u64) -> (Epoch, u64) { let current_epoch = rpc_client.get_epoch_info().unwrap().epoch; - println!("waiting for epoch {}", current_epoch + 1); + let next_epoch = current_epoch + 1; + println!("waiting for epoch {next_epoch} plus {n} slots"); loop { sleep(Duration::from_millis(DEFAULT_MS_PER_SLOT)); let next_epoch = rpc_client.get_epoch_info().unwrap().epoch; if next_epoch > current_epoch { - return next_epoch; + let slot = rpc_client.get_slot().unwrap(); + loop { + sleep(Duration::from_millis(DEFAULT_MS_PER_SLOT)); + let new_slot = rpc_client.get_slot().unwrap(); + if new_slot - slot > n { + return (next_epoch, new_slot); + } + } } } } diff --git a/cli/tests/stake.rs b/cli/tests/stake.rs index b009cbe6c7..b815ec0975 100644 --- a/cli/tests/stake.rs +++ b/cli/tests/stake.rs @@ -6,7 +6,7 @@ use { cli::{process_command, request_and_confirm_airdrop, CliCommand, CliConfig}, spend_utils::SpendAmount, stake::StakeAuthorizationIndexed, - test_utils::{check_ready, wait_for_next_epoch}, + test_utils::{check_ready, wait_for_next_epoch_plus_n_slots}, }, solana_cli_output::{parse_sign_only_reply_string, OutputFormat}, solana_faucet::faucet::run_local_faucet, @@ -158,7 +158,7 @@ fn test_stake_redelegation() { process_command(&config).unwrap(); // wait for new epoch - wait_for_next_epoch(&rpc_client); + wait_for_next_epoch_plus_n_slots(&rpc_client, 0); // `stake_keypair` should now be delegated to `vote_keypair` and fully activated let stake_account = rpc_client.get_account(&stake_keypair.pubkey()).unwrap(); @@ -200,7 +200,7 @@ fn test_stake_redelegation() { // wait for a new epoch to ensure the `Redelegate` happens as soon as possible in the epoch // to reduce the risk of a race condition when checking the stake account correctly enters the // deactivating state for the remainder of the current epoch - wait_for_next_epoch(&rpc_client); + wait_for_next_epoch_plus_n_slots(&rpc_client, 0); // Redelegate to `vote2_keypair` via `stake2_keypair config.signers = vec![&default_signer, &stake2_keypair]; @@ -251,7 +251,7 @@ fn test_stake_redelegation() { check_balance!(50_000_000_000, &rpc_client, &stake2_keypair.pubkey()); // wait for new epoch - wait_for_next_epoch(&rpc_client); + wait_for_next_epoch_plus_n_slots(&rpc_client, 0); // `stake_keypair` should now be deactivated assert_eq!(