Reduce repeated logic in BankForks unit tests (#32852)

* Move repeated BankForks logic into a loop
* Do away with redundant Vec<Arc<Bank>>
* Condense repeated logic into helper function
This commit is contained in:
steviez 2023-08-18 11:58:04 -05:00 committed by GitHub
parent 48e51134d7
commit 480851b865
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 43 additions and 40 deletions

View File

@ -877,16 +877,25 @@ mod tests {
.collect() .collect()
} }
fn extend_bank_forks(bank_forks: &mut BankForks, parent_child_pairs: &[(Slot, Slot)]) {
for (parent, child) in parent_child_pairs.iter() {
bank_forks.insert(Bank::new_from_parent(
&bank_forks[*parent],
&Pubkey::default(),
*child,
));
}
}
#[test] #[test]
fn test_bank_forks_with_set_root() { fn test_bank_forks_with_set_root() {
let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
let mut banks = vec![Arc::new(Bank::new_for_tests(&genesis_config))]; let bank = Bank::new_for_tests(&genesis_config);
assert_eq!(banks[0].slot(), 0); let mut bank_forks = BankForks::new(bank);
let mut bank_forks = BankForks::new_from_banks(&banks, 0);
banks.push(bank_forks.insert(Bank::new_from_parent(&banks[0], &Pubkey::default(), 1))); let parent_child_pairs = vec![(0, 1), (1, 2), (0, 3), (3, 4)];
banks.push(bank_forks.insert(Bank::new_from_parent(&banks[1], &Pubkey::default(), 2))); extend_bank_forks(&mut bank_forks, &parent_child_pairs);
banks.push(bank_forks.insert(Bank::new_from_parent(&banks[0], &Pubkey::default(), 3)));
banks.push(bank_forks.insert(Bank::new_from_parent(&banks[3], &Pubkey::default(), 4)));
assert_eq!( assert_eq!(
bank_forks.ancestors(), bank_forks.ancestors(),
make_hash_map(vec![ make_hash_map(vec![
@ -912,14 +921,15 @@ mod tests {
&AbsRequestSender::default(), &AbsRequestSender::default(),
None, // highest confirmed root None, // highest confirmed root
); );
banks[2].squash(); bank_forks[2].squash();
assert_eq!(bank_forks.ancestors(), make_hash_map(vec![(2, vec![]),])); assert_eq!(bank_forks.ancestors(), make_hash_map(vec![(2, vec![]),]));
assert_eq!( assert_eq!(
bank_forks.descendants(), bank_forks.descendants(),
make_hash_map(vec![(0, vec![2]), (1, vec![2]), (2, vec![]),]) make_hash_map(vec![(0, vec![2]), (1, vec![2]), (2, vec![]),])
); );
banks.push(bank_forks.insert(Bank::new_from_parent(&banks[2], &Pubkey::default(), 5)));
banks.push(bank_forks.insert(Bank::new_from_parent(&banks[5], &Pubkey::default(), 6))); let parent_child_pairs = vec![(2, 5), (5, 6)];
extend_bank_forks(&mut bank_forks, &parent_child_pairs);
assert_eq!( assert_eq!(
bank_forks.ancestors(), bank_forks.ancestors(),
make_hash_map(vec![(2, vec![]), (5, vec![2]), (6, vec![2, 5])]) make_hash_map(vec![(2, vec![]), (5, vec![2]), (6, vec![2, 5])])
@ -939,13 +949,13 @@ mod tests {
#[test] #[test]
fn test_bank_forks_with_highest_super_majority_root() { fn test_bank_forks_with_highest_super_majority_root() {
let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
let mut banks = vec![Arc::new(Bank::new_for_tests(&genesis_config))]; let bank = Bank::new_for_tests(&genesis_config);
assert_eq!(banks[0].slot(), 0); assert_eq!(bank.slot(), 0);
let mut bank_forks = BankForks::new_from_banks(&banks, 0); let mut bank_forks = BankForks::new(bank);
banks.push(bank_forks.insert(Bank::new_from_parent(&banks[0], &Pubkey::default(), 1)));
banks.push(bank_forks.insert(Bank::new_from_parent(&banks[1], &Pubkey::default(), 2))); let parent_child_pairs = vec![(0, 1), (1, 2), (0, 3), (3, 4)];
banks.push(bank_forks.insert(Bank::new_from_parent(&banks[0], &Pubkey::default(), 3))); extend_bank_forks(&mut bank_forks, &parent_child_pairs);
banks.push(bank_forks.insert(Bank::new_from_parent(&banks[3], &Pubkey::default(), 4)));
assert_eq!( assert_eq!(
bank_forks.ancestors(), bank_forks.ancestors(),
make_hash_map(vec![ make_hash_map(vec![
@ -971,7 +981,7 @@ mod tests {
&AbsRequestSender::default(), &AbsRequestSender::default(),
Some(1), // highest confirmed root Some(1), // highest confirmed root
); );
banks[2].squash(); bank_forks[2].squash();
assert_eq!( assert_eq!(
bank_forks.ancestors(), bank_forks.ancestors(),
make_hash_map(vec![(1, vec![]), (2, vec![]),]) make_hash_map(vec![(1, vec![]), (2, vec![]),])
@ -980,8 +990,9 @@ mod tests {
bank_forks.descendants(), bank_forks.descendants(),
make_hash_map(vec![(0, vec![1, 2]), (1, vec![2]), (2, vec![]),]) make_hash_map(vec![(0, vec![1, 2]), (1, vec![2]), (2, vec![]),])
); );
banks.push(bank_forks.insert(Bank::new_from_parent(&banks[2], &Pubkey::default(), 5)));
banks.push(bank_forks.insert(Bank::new_from_parent(&banks[5], &Pubkey::default(), 6))); let parent_child_pairs = vec![(2, 5), (5, 6)];
extend_bank_forks(&mut bank_forks, &parent_child_pairs);
assert_eq!( assert_eq!(
bank_forks.ancestors(), bank_forks.ancestors(),
make_hash_map(vec![ make_hash_map(vec![
@ -1009,26 +1020,18 @@ mod tests {
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let mut bank_forks = BankForks::new(bank); let mut bank_forks = BankForks::new(bank);
let bank = Bank::new_from_parent(&bank_forks[0], &Pubkey::default(), 1); let parent_child_pairs = vec![
bank_forks.insert(bank); (0, 1),
let bank = Bank::new_from_parent(&bank_forks[1], &Pubkey::default(), 3); (1, 3),
bank_forks.insert(bank); (3, 8),
let bank = Bank::new_from_parent(&bank_forks[3], &Pubkey::default(), 8); (0, 2),
bank_forks.insert(bank); (2, 4),
(4, 5),
let bank = Bank::new_from_parent(&bank_forks[0], &Pubkey::default(), 2); (5, 10),
bank_forks.insert(bank); (4, 6),
let bank = Bank::new_from_parent(&bank_forks[2], &Pubkey::default(), 4); (6, 12),
bank_forks.insert(bank); ];
let bank = Bank::new_from_parent(&bank_forks[4], &Pubkey::default(), 5); extend_bank_forks(&mut bank_forks, &parent_child_pairs);
bank_forks.insert(bank);
let bank = Bank::new_from_parent(&bank_forks[5], &Pubkey::default(), 10);
bank_forks.insert(bank);
let bank = Bank::new_from_parent(&bank_forks[4], &Pubkey::default(), 6);
bank_forks.insert(bank);
let bank = Bank::new_from_parent(&bank_forks[6], &Pubkey::default(), 12);
bank_forks.insert(bank);
// Fork graph created for the test // Fork graph created for the test
// 0 // 0