mango-v3/program/tests/test_update_banks.rs

181 lines
6.2 KiB
XML

// #![cfg(feature = "test-bpf")]
//
// mod helpers;
//
// use helpers::*;
// use solana_program::account_info::AccountInfo;
// use solana_program_test::*;
// use solana_sdk::{
// account::Account,
// pubkey::Pubkey,
// signature::{Keypair, Signer},
// transaction::Transaction,
// };
// use std::mem::size_of;
//
// use mango::instruction::cache_root_banks;
// use mango::{
// entrypoint::process_instruction,
// instruction::{deposit, init_mango_account, update_root_bank},
// state::{MangoAccount, NodeBank, RootBank, QUOTE_INDEX},
// };
//
// #[tokio::test]
// async fn test_root_bank_update_succeeds() {
// let program_id = Pubkey::new_unique();
//
// let mut test = ProgramTest::new("mango", program_id, processor!(process_instruction));
//
// // limit to track compute unit increase
// test.set_bpf_compute_max_units(50_000);
//
// let initial_amount = 2;
// let deposit_amount = 1;
//
// // setup mango group
// let mango_group = add_mango_group_prodlike(&mut test, program_id);
//
// // setup user account
// let user = Keypair::new();
// test.add_account(user.pubkey(), Account::new(u32::MAX as u64, 0, &user.pubkey()));
//
// // setup user token accounts
// let user_account =
// add_token_account(&mut test, user.pubkey(), mango_group.tokens[0].pubkey, initial_amount);
//
// let mango_account_pk = Pubkey::new_unique();
// test.add_account(
// mango_account_pk,
// Account::new(u32::MAX as u64, size_of::<MangoAccount>(), &program_id),
// );
//
// let (mut banks_client, payer, recent_blockhash) = test.start().await;
//
// {
// let mut transaction = Transaction::new_with_payer(
// &[
// mango_group.init_mango_group(&payer.pubkey()),
// init_mango_account(
// &program_id,
// &mango_group.mango_group_pk,
// &mango_account_pk,
// &user.pubkey(),
// )
// .unwrap(),
// cache_root_banks(
// &program_id,
// &mango_group.mango_group_pk,
// &mango_group.mango_cache_pk,
// &[mango_group.root_banks[0].pubkey],
// )
// .unwrap(),
// deposit(
// &program_id,
// &mango_group.mango_group_pk,
// &mango_account_pk,
// &user.pubkey(),
// &mango_group.mango_cache_pk,
// &mango_group.root_banks[0].pubkey,
// &mango_group.root_banks[0].node_banks[0].pubkey,
// &mango_group.root_banks[0].node_banks[0].vault,
// &user_account.pubkey,
// deposit_amount,
// )
// .unwrap(),
// ],
// Some(&payer.pubkey()),
// );
//
// transaction.sign(&[&payer, &user], recent_blockhash);
//
// let result = banks_client.process_transaction(transaction).await;
//
// let mut node_bank = banks_client
// .get_account(mango_group.root_banks[0].node_banks[0].pubkey)
// .await
// .unwrap()
// .unwrap();
// let account_info: AccountInfo =
// (&mango_group.root_banks[0].node_banks[0].pubkey, &mut node_bank).into();
// let node_bank = NodeBank::load_mut_checked(&account_info, &program_id).unwrap();
//
// assert_eq!(node_bank.deposits, 1);
// assert_eq!(node_bank.borrows, 0);
//
// // Test transaction succeeded
// assert!(result.is_ok());
// }
//
// {
// let node_bank_pks: Vec<Pubkey> =
// mango_group.root_banks[0].node_banks.iter().map(|node_bank| node_bank.pubkey).collect();
// let mut transaction = Transaction::new_with_payer(
// &[update_root_bank(
// &program_id,
// &mango_group.mango_group_pk,
// &mango_group.root_banks[0].pubkey,
// &node_bank_pks.as_slice(),
// )
// .unwrap()],
// Some(&payer.pubkey()),
// );
//
// transaction.sign(&[&payer], recent_blockhash);
//
// let result = banks_client.process_transaction(transaction).await;
//
// // Test transaction succeeded
// assert!(result.is_ok());
//
// let mut root_bank =
// banks_client.get_account(mango_group.root_banks[0].pubkey).await.unwrap().unwrap();
// let account_info: AccountInfo = (&mango_group.root_banks[0].pubkey, &mut root_bank).into();
// let root_bank = RootBank::load_mut_checked(&account_info, &program_id).unwrap();
//
// assert_eq!(root_bank.deposit_index, 1);
// assert_eq!(root_bank.borrow_index, 1);
// }
//
// {
// let node_bank_pks: Vec<Pubkey> = vec![];
// let mut transaction = Transaction::new_with_payer(
// &[update_root_bank(
// &program_id,
// &mango_group.mango_group_pk,
// &mango_group.root_banks[0].pubkey,
// &node_bank_pks.as_slice(),
// )
// .unwrap()],
// Some(&payer.pubkey()),
// );
//
// transaction.sign(&[&payer], recent_blockhash);
//
// let result = banks_client.process_transaction(transaction).await;
//
// // Test transaction fails when no node bank accounts are passed in
// assert!(result.is_err());
// }
//
// {
// let node_bank_pks: Vec<Pubkey> = vec![Pubkey::new_unique()];
// let mut transaction = Transaction::new_with_payer(
// &[update_root_bank(
// &program_id,
// &mango_group.mango_group_pk,
// &mango_group.root_banks[0].pubkey,
// &node_bank_pks.as_slice(),
// )
// .unwrap()],
// Some(&payer.pubkey()),
// );
//
// transaction.sign(&[&payer], recent_blockhash);
//
// let result = banks_client.process_transaction(transaction).await;
//
// // Test transaction fails when invalid node bank accounts are passed in
// assert!(result.is_err());
// }
// }