Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Commit 7d4ab60

Browse files
authored
stake-pool: Split up more tests to help CI, avoid warping (#3852)
* stake-pool: Split up more tests to help CI, avoid warping * Remove unnecessary updates * Split preferred test that keeps failing
1 parent 792ffbc commit 7d4ab60

File tree

6 files changed

+896
-640
lines changed

6 files changed

+896
-640
lines changed

stake-pool/program/tests/deposit.rs

Lines changed: 2 additions & 230 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,6 @@ async fn setup(
5656
)
5757
.await;
5858

59-
let first_normal_slot = context.genesis_config().epoch_schedule.first_normal_slot;
60-
let slots_per_epoch = context.genesis_config().epoch_schedule.slots_per_epoch;
61-
let mut slot = first_normal_slot;
62-
context.warp_to_slot(slot).unwrap();
63-
6459
let user = Keypair::new();
6560
// make stake account
6661
let deposit_stake = Keypair::new();
@@ -92,8 +87,8 @@ async fn setup(
9287
)
9388
.await;
9489

95-
slot += slots_per_epoch;
96-
context.warp_to_slot(slot).unwrap();
90+
let first_normal_slot = context.genesis_config().epoch_schedule.first_normal_slot;
91+
context.warp_to_slot(first_normal_slot).unwrap();
9792
stake_pool_accounts
9893
.update_all(
9994
&mut context.banks_client,
@@ -805,226 +800,3 @@ async fn fail_with_wrong_mint_for_receiver_acc() {
805800
}
806801
}
807802
}
808-
809-
#[tokio::test]
810-
async fn fail_with_uninitialized_validator_list() {} // TODO
811-
812-
#[tokio::test]
813-
async fn fail_with_out_of_dated_pool_balances() {} // TODO
814-
815-
#[tokio::test]
816-
async fn success_with_preferred_deposit() {
817-
let (
818-
mut context,
819-
stake_pool_accounts,
820-
validator_stake,
821-
user,
822-
deposit_stake,
823-
pool_token_account,
824-
_stake_lamports,
825-
) = setup(spl_token::id()).await;
826-
827-
stake_pool_accounts
828-
.set_preferred_validator(
829-
&mut context.banks_client,
830-
&context.payer,
831-
&context.last_blockhash,
832-
instruction::PreferredValidatorType::Deposit,
833-
Some(validator_stake.vote.pubkey()),
834-
)
835-
.await;
836-
837-
let error = stake_pool_accounts
838-
.deposit_stake(
839-
&mut context.banks_client,
840-
&context.payer,
841-
&context.last_blockhash,
842-
&deposit_stake,
843-
&pool_token_account,
844-
&validator_stake.stake_account,
845-
&user,
846-
)
847-
.await;
848-
assert!(error.is_none());
849-
}
850-
851-
#[tokio::test]
852-
async fn fail_with_wrong_preferred_deposit() {
853-
let (
854-
mut context,
855-
stake_pool_accounts,
856-
validator_stake,
857-
user,
858-
deposit_stake,
859-
pool_token_account,
860-
_stake_lamports,
861-
) = setup(spl_token::id()).await;
862-
863-
let preferred_validator = simple_add_validator_to_pool(
864-
&mut context.banks_client,
865-
&context.payer,
866-
&context.last_blockhash,
867-
&stake_pool_accounts,
868-
None,
869-
)
870-
.await;
871-
872-
stake_pool_accounts
873-
.set_preferred_validator(
874-
&mut context.banks_client,
875-
&context.payer,
876-
&context.last_blockhash,
877-
instruction::PreferredValidatorType::Deposit,
878-
Some(preferred_validator.vote.pubkey()),
879-
)
880-
.await;
881-
882-
let error = stake_pool_accounts
883-
.deposit_stake(
884-
&mut context.banks_client,
885-
&context.payer,
886-
&context.last_blockhash,
887-
&deposit_stake,
888-
&pool_token_account,
889-
&validator_stake.stake_account,
890-
&user,
891-
)
892-
.await
893-
.unwrap()
894-
.unwrap();
895-
match error {
896-
TransactionError::InstructionError(_, InstructionError::Custom(error_index)) => {
897-
assert_eq!(
898-
error_index,
899-
StakePoolError::IncorrectDepositVoteAddress as u32
900-
);
901-
}
902-
_ => panic!("Wrong error occurs while try to make a deposit with wrong stake program ID"),
903-
}
904-
}
905-
906-
#[tokio::test]
907-
async fn success_with_referral_fee() {
908-
let (
909-
mut context,
910-
stake_pool_accounts,
911-
validator_stake_account,
912-
user,
913-
deposit_stake,
914-
pool_token_account,
915-
stake_lamports,
916-
) = setup(spl_token::id()).await;
917-
918-
let referrer = Keypair::new();
919-
let referrer_token_account = Keypair::new();
920-
create_token_account(
921-
&mut context.banks_client,
922-
&context.payer,
923-
&context.last_blockhash,
924-
&stake_pool_accounts.token_program_id,
925-
&referrer_token_account,
926-
&stake_pool_accounts.pool_mint.pubkey(),
927-
&referrer,
928-
&[],
929-
)
930-
.await
931-
.unwrap();
932-
933-
let referrer_balance_pre =
934-
get_token_balance(&mut context.banks_client, &referrer_token_account.pubkey()).await;
935-
936-
let mut transaction = Transaction::new_with_payer(
937-
&instruction::deposit_stake(
938-
&id(),
939-
&stake_pool_accounts.stake_pool.pubkey(),
940-
&stake_pool_accounts.validator_list.pubkey(),
941-
&stake_pool_accounts.withdraw_authority,
942-
&deposit_stake,
943-
&user.pubkey(),
944-
&validator_stake_account.stake_account,
945-
&stake_pool_accounts.reserve_stake.pubkey(),
946-
&pool_token_account,
947-
&stake_pool_accounts.pool_fee_account.pubkey(),
948-
&referrer_token_account.pubkey(),
949-
&stake_pool_accounts.pool_mint.pubkey(),
950-
&spl_token::id(),
951-
),
952-
Some(&context.payer.pubkey()),
953-
);
954-
transaction.sign(&[&context.payer, &user], context.last_blockhash);
955-
context
956-
.banks_client
957-
.process_transaction(transaction)
958-
.await
959-
.unwrap();
960-
961-
let referrer_balance_post =
962-
get_token_balance(&mut context.banks_client, &referrer_token_account.pubkey()).await;
963-
let stake_pool = get_account(
964-
&mut context.banks_client,
965-
&stake_pool_accounts.stake_pool.pubkey(),
966-
)
967-
.await;
968-
let stake_pool =
969-
try_from_slice_unchecked::<state::StakePool>(stake_pool.data.as_slice()).unwrap();
970-
let rent = context.banks_client.get_rent().await.unwrap();
971-
let stake_rent = rent.minimum_balance(std::mem::size_of::<stake::state::StakeState>());
972-
let fee_tokens = stake_pool
973-
.calc_pool_tokens_sol_deposit_fee(stake_rent)
974-
.unwrap()
975-
+ stake_pool
976-
.calc_pool_tokens_stake_deposit_fee(stake_lamports - stake_rent)
977-
.unwrap();
978-
let referral_fee = stake_pool_accounts.calculate_referral_fee(fee_tokens);
979-
assert!(referral_fee > 0);
980-
assert_eq!(referrer_balance_pre + referral_fee, referrer_balance_post);
981-
}
982-
983-
#[tokio::test]
984-
async fn fail_with_invalid_referrer() {
985-
let (
986-
mut context,
987-
stake_pool_accounts,
988-
validator_stake_account,
989-
user,
990-
deposit_stake,
991-
pool_token_account,
992-
_stake_lamports,
993-
) = setup(spl_token::id()).await;
994-
995-
let invalid_token_account = Keypair::new();
996-
997-
let mut transaction = Transaction::new_with_payer(
998-
&instruction::deposit_stake(
999-
&id(),
1000-
&stake_pool_accounts.stake_pool.pubkey(),
1001-
&stake_pool_accounts.validator_list.pubkey(),
1002-
&stake_pool_accounts.withdraw_authority,
1003-
&deposit_stake,
1004-
&user.pubkey(),
1005-
&validator_stake_account.stake_account,
1006-
&stake_pool_accounts.reserve_stake.pubkey(),
1007-
&pool_token_account,
1008-
&stake_pool_accounts.pool_fee_account.pubkey(),
1009-
&invalid_token_account.pubkey(),
1010-
&stake_pool_accounts.pool_mint.pubkey(),
1011-
&spl_token::id(),
1012-
),
1013-
Some(&context.payer.pubkey()),
1014-
);
1015-
transaction.sign(&[&context.payer, &user], context.last_blockhash);
1016-
let transaction_error = context
1017-
.banks_client
1018-
.process_transaction(transaction)
1019-
.await
1020-
.err()
1021-
.unwrap()
1022-
.unwrap();
1023-
1024-
match transaction_error {
1025-
TransactionError::InstructionError(_, InstructionError::InvalidAccountData) => (),
1026-
_ => panic!(
1027-
"Wrong error occurs while try to make a deposit with an invalid referrer account"
1028-
),
1029-
}
1030-
}

0 commit comments

Comments
 (0)