From cc8befaddab4f6695f7c80c83b4b6a90f89fcce9 Mon Sep 17 00:00:00 2001 From: Justin Starry Date: Wed, 12 Jun 2024 05:15:51 +0000 Subject: [PATCH] fix tests --- accounts-db/src/accounts.rs | 4 ++++ svm/src/account_loader.rs | 25 +++++++++----------- svm/src/transaction_processor.rs | 40 ++++++++++++++++++++++++++++---- 3 files changed, 51 insertions(+), 18 deletions(-) diff --git a/accounts-db/src/accounts.rs b/accounts-db/src/accounts.rs index 775b78aec78dc9..f19c990a358ebd 100644 --- a/accounts-db/src/accounts.rs +++ b/accounts-db/src/accounts.rs @@ -1572,6 +1572,7 @@ mod tests { program_indices: vec![], nonce: None, fee_details: FeeDetails::default(), + compute_budget_limits: ComputeBudgetLimits::default(), rent: 0, rent_debits: RentDebits::default(), loaded_accounts_data_size: 0, @@ -1582,6 +1583,7 @@ mod tests { program_indices: vec![], nonce: None, fee_details: FeeDetails::default(), + compute_budget_limits: ComputeBudgetLimits::default(), rent: 0, rent_debits: RentDebits::default(), loaded_accounts_data_size: 0, @@ -1858,6 +1860,7 @@ mod tests { program_indices: vec![], nonce: nonce.clone(), fee_details: FeeDetails::default(), + compute_budget_limits: ComputeBudgetLimits::default(), rent: 0, rent_debits: RentDebits::default(), loaded_accounts_data_size: 0, @@ -1964,6 +1967,7 @@ mod tests { program_indices: vec![], nonce: nonce.clone(), fee_details: FeeDetails::default(), + compute_budget_limits: ComputeBudgetLimits::default(), rent: 0, rent_debits: RentDebits::default(), loaded_accounts_data_size: 0, diff --git a/svm/src/account_loader.rs b/svm/src/account_loader.rs index cda2af967fc815..c8e03413895fa4 100644 --- a/svm/src/account_loader.rs +++ b/svm/src/account_loader.rs @@ -1181,10 +1181,9 @@ mod tests { &mock_bank, sanitized_transaction.message(), ValidatedTransactionDetails { - nonce: None, fee_details, fee_payer_account: fee_payer_account_data, - fee_payer_rent_debit: 0, + ..ValidatedTransactionDetails::default() }, &mut error_metrics, None, @@ -1207,6 +1206,7 @@ mod tests { program_indices: vec![vec![]], nonce: None, fee_details, + compute_budget_limits: ComputeBudgetLimits::default(), rent: 0, rent_debits: RentDebits::default(), loaded_accounts_data_size: 0, @@ -1385,10 +1385,9 @@ mod tests { &mock_bank, sanitized_transaction.message(), ValidatedTransactionDetails { - nonce: None, fee_details, fee_payer_account: fee_payer_account_data, - fee_payer_rent_debit: 0, + ..ValidatedTransactionDetails::default() }, &mut error_metrics, None, @@ -1410,6 +1409,7 @@ mod tests { ], nonce: None, fee_details, + compute_budget_limits: ComputeBudgetLimits::default(), program_indices: vec![vec![1]], rent: 0, rent_debits: RentDebits::default(), @@ -1565,10 +1565,9 @@ mod tests { &mock_bank, sanitized_transaction.message(), ValidatedTransactionDetails { - nonce: None, fee_details, fee_payer_account: fee_payer_account_data, - fee_payer_rent_debit: 0, + ..ValidatedTransactionDetails::default() }, &mut error_metrics, None, @@ -1595,6 +1594,7 @@ mod tests { program_indices: vec![vec![2, 1]], nonce: None, fee_details, + compute_budget_limits: ComputeBudgetLimits::default(), rent: 0, rent_debits: RentDebits::default(), loaded_accounts_data_size: 0, @@ -1658,10 +1658,9 @@ mod tests { &mock_bank, sanitized_transaction.message(), ValidatedTransactionDetails { - nonce: None, fee_details, fee_payer_account: fee_payer_account_data, - fee_payer_rent_debit: 0, + ..ValidatedTransactionDetails::default() }, &mut error_metrics, None, @@ -1691,6 +1690,7 @@ mod tests { program_indices: vec![vec![3, 1], vec![3, 1]], nonce: None, fee_details, + compute_budget_limits: ComputeBudgetLimits::default(), rent: 0, rent_debits: RentDebits::default(), loaded_accounts_data_size: 0, @@ -1809,10 +1809,8 @@ mod tests { false, ); let validation_result = Ok(ValidatedTransactionDetails { - nonce: None, - fee_details: FeeDetails::default(), fee_payer_account: fee_payer_account_data, - fee_payer_rent_debit: 0, + ..ValidatedTransactionDetails::default() }); let results = load_accounts( @@ -1850,6 +1848,7 @@ mod tests { program_indices: vec![vec![3, 1], vec![3, 1]], nonce: None, fee_details: FeeDetails::default(), + compute_budget_limits: ComputeBudgetLimits::default(), rent: 0, rent_debits: RentDebits::default(), loaded_accounts_data_size: 0, @@ -1880,9 +1879,7 @@ mod tests { let validation_result = Ok(ValidatedTransactionDetails { nonce: Some(NonceFull::default()), - fee_details: FeeDetails::default(), - fee_payer_account: AccountSharedData::default(), - fee_payer_rent_debit: 0, + ..ValidatedTransactionDetails::default() }); let result = load_accounts( diff --git a/svm/src/transaction_processor.rs b/svm/src/transaction_processor.rs index e63d43e7087d8a..76474bcef5e110 100644 --- a/svm/src/transaction_processor.rs +++ b/svm/src/transaction_processor.rs @@ -1155,6 +1155,7 @@ mod tests { program_indices: vec![vec![0]], nonce: None, fee_details: FeeDetails::default(), + compute_budget_limits: ComputeBudgetLimits::default(), rent: 0, rent_debits: RentDebits::default(), loaded_accounts_data_size: 32, @@ -1167,7 +1168,6 @@ mod tests { &mock_bank, &sanitized_transaction, &mut loaded_transaction, - ComputeBudget::default(), &mut ExecuteTimings::default(), &mut TransactionErrorMetrics::default(), &program_cache_for_tx_batch, @@ -1189,7 +1189,6 @@ mod tests { &mock_bank, &sanitized_transaction, &mut loaded_transaction, - ComputeBudget::default(), &mut ExecuteTimings::default(), &mut TransactionErrorMetrics::default(), &program_cache_for_tx_batch, @@ -1219,7 +1218,6 @@ mod tests { &mock_bank, &sanitized_transaction, &mut loaded_transaction, - ComputeBudget::default(), &mut ExecuteTimings::default(), &mut TransactionErrorMetrics::default(), &program_cache_for_tx_batch, @@ -1281,6 +1279,7 @@ mod tests { program_indices: vec![vec![0]], nonce: None, fee_details: FeeDetails::default(), + compute_budget_limits: ComputeBudgetLimits::default(), rent: 0, rent_debits: RentDebits::default(), loaded_accounts_data_size: 0, @@ -1296,7 +1295,6 @@ mod tests { &mock_bank, &sanitized_transaction, &mut loaded_transaction, - ComputeBudget::default(), &mut ExecuteTimings::default(), &mut error_metrics, &program_cache_for_tx_batch, @@ -1965,6 +1963,8 @@ mod tests { Some(&Pubkey::new_unique()), &Hash::new_unique(), )); + let compute_budget_limits = + process_compute_budget_instructions(message.program_instructions_iter()).unwrap(); let fee_payer_address = message.fee_payer(); let rent_collector = RentCollector::default(); let min_balance = rent_collector.rent.minimum_balance(nonce::State::size()); @@ -2005,6 +2005,7 @@ mod tests { assert_eq!( result, Ok(( + compute_budget_limits, FeeDetails::new_for_tests(transaction_fee, priority_fee, false), post_validation_fee_payer_account, 0 // rent due @@ -2020,6 +2021,8 @@ mod tests { Some(&Pubkey::new_unique()), &Hash::new_unique(), )); + let compute_budget_limits = + process_compute_budget_instructions(message.program_instructions_iter()).unwrap(); let fee_payer_address = message.fee_payer(); let mut rent_collector = RentCollector::default(); rent_collector.rent.lamports_per_byte_year = 1_000_000; @@ -2063,6 +2066,7 @@ mod tests { assert_eq!( result, Ok(( + compute_budget_limits, FeeDetails::new_for_tests(transaction_fee, 0, false), post_validation_fee_payer_account, rent_due, @@ -2178,6 +2182,31 @@ mod tests { assert_eq!(result, Err(TransactionError::InvalidAccountForFee)); } + #[test] + fn test_validate_transaction_fee_payer_invalid_compute_budget() { + let lamports_per_signature = 5000; + let message = new_unchecked_sanitized_message(Message::new( + &[ + ComputeBudgetInstruction::set_compute_unit_limit(2000u32), + ComputeBudgetInstruction::set_compute_unit_limit(42u32), + ], + Some(&Pubkey::new_unique()), + )); + + let mock_bank = MockBankCallback::default(); + let mut error_counters = TransactionErrorMetrics::default(); + let batch_processor = TransactionBatchProcessor::::default(); + let result = batch_processor.validate_transaction_fee_payer( + &mock_bank, + &message, + lamports_per_signature, + &mut error_counters, + ); + + assert_eq!(error_counters.invalid_compute_budget, 1); + assert_eq!(result, Err(TransactionError::DuplicateInstruction(1u8))); + } + #[test] fn test_validate_transaction_fee_payer_is_nonce() { let lamports_per_signature = 5000; @@ -2190,6 +2219,8 @@ mod tests { Some(&Pubkey::new_unique()), &Hash::new_unique(), )); + let compute_budget_limits = + process_compute_budget_instructions(message.program_instructions_iter()).unwrap(); let fee_payer_address = message.fee_payer(); let min_balance = Rent::default().minimum_balance(nonce::State::size()); let transaction_fee = lamports_per_signature; @@ -2232,6 +2263,7 @@ mod tests { assert_eq!( result, Ok(( + compute_budget_limits, FeeDetails::new_for_tests(transaction_fee, priority_fee, false), post_validation_fee_payer_account, 0 // rent due