From d530a8baabdfbb1b1d0f8eeccd08ae84c68eaa03 Mon Sep 17 00:00:00 2001 From: wacban Date: Thu, 5 Oct 2023 17:14:49 +0100 Subject: [PATCH] feat: resharding - use full alphabet in tests (#9643) I'm not sure who and why hates the letters i..z but I kind of need them for testing resharding. --- core/store/src/test_utils.rs | 33 ++++++++++++------- .../src/tests/client/resharding.rs | 4 +-- tools/mock-node/src/setup.rs | 4 +-- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/core/store/src/test_utils.rs b/core/store/src/test_utils.rs index 93446227d00..795f309abc5 100644 --- a/core/store/src/test_utils.rs +++ b/core/store/src/test_utils.rs @@ -1,6 +1,7 @@ use std::collections::HashMap; use std::sync::Arc; +use itertools::Itertools; use near_primitives::state::{FlatStateValue, ValueRef}; use near_primitives::trie_key::TrieKey; use rand::seq::SliceRandom; @@ -165,6 +166,11 @@ pub fn test_populate_store_rc(store: &Store, data: &[(DBCol, Vec, Vec)]) update.commit().expect("db commit failed"); } +fn gen_alphabet() -> Vec { + let alphabet = 'a'..='z'; + alphabet.map(|c| c as u8).collect_vec() +} + fn gen_accounts_from_alphabet( rng: &mut impl Rng, min_size: usize, @@ -172,18 +178,23 @@ fn gen_accounts_from_alphabet( alphabet: &[u8], ) -> Vec { let size = rng.gen_range(min_size..=max_size); - std::iter::repeat_with(|| gen_account(rng, alphabet)).take(size).collect() + std::iter::repeat_with(|| gen_account_from_alphabet(rng, alphabet)).take(size).collect() } -pub fn gen_account(rng: &mut impl Rng, alphabet: &[u8]) -> AccountId { +pub fn gen_account_from_alphabet(rng: &mut impl Rng, alphabet: &[u8]) -> AccountId { let str_length = rng.gen_range(4..8); let s: Vec = (0..str_length).map(|_| *alphabet.choose(rng).unwrap()).collect(); from_utf8(&s).unwrap().parse().unwrap() } +pub fn gen_account(rng: &mut impl Rng) -> AccountId { + let alphabet = gen_alphabet(); + gen_account_from_alphabet(rng, &alphabet) +} + pub fn gen_unique_accounts(rng: &mut impl Rng, min_size: usize, max_size: usize) -> Vec { - let alphabet = b"abcdefghijklmn"; - let mut accounts = gen_accounts_from_alphabet(rng, min_size, max_size, alphabet); + let alphabet = gen_alphabet(); + let mut accounts = gen_accounts_from_alphabet(rng, min_size, max_size, &alphabet); accounts.sort(); accounts.dedup(); accounts.shuffle(rng); @@ -191,8 +202,8 @@ pub fn gen_unique_accounts(rng: &mut impl Rng, min_size: usize, max_size: usize) } pub fn gen_receipts(rng: &mut impl Rng, max_size: usize) -> Vec { - let alphabet = &b"abcdefgh"[0..rng.gen_range(4..8)]; - let accounts = gen_accounts_from_alphabet(rng, 1, max_size, alphabet); + let alphabet = gen_alphabet(); + let accounts = gen_accounts_from_alphabet(rng, 1, max_size, &alphabet); accounts .iter() .map(|account_id| Receipt { @@ -209,8 +220,8 @@ pub fn gen_receipts(rng: &mut impl Rng, max_size: usize) -> Vec { /// Keys are randomly constructed from alphabet, and they have max_length size. fn gen_changes_helper( rng: &mut impl Rng, - max_size: usize, alphabet: &[u8], + max_size: usize, max_length: u64, ) -> Vec<(Vec, Option>)> { let mut state: HashMap, Vec> = HashMap::new(); @@ -240,15 +251,15 @@ fn gen_changes_helper( } pub fn gen_changes(rng: &mut impl Rng, max_size: usize) -> Vec<(Vec, Option>)> { - let alphabet = &b"abcdefgh"[0..rng.gen_range(2..8)]; + let alphabet = gen_alphabet(); let max_length = rng.gen_range(2..8); - gen_changes_helper(rng, max_size, alphabet, max_length) + gen_changes_helper(rng, &alphabet, max_size, max_length) } pub fn gen_larger_changes(rng: &mut impl Rng, max_size: usize) -> Vec<(Vec, Option>)> { - let alphabet = b"abcdefghijklmnopqrst"; + let alphabet = gen_alphabet(); let max_length = rng.gen_range(10..20); - gen_changes_helper(rng, max_size, alphabet, max_length) + gen_changes_helper(rng, &alphabet, max_size, max_length) } pub fn simplify_changes(changes: &[(Vec, Option>)]) -> Vec<(Vec, Option>)> { diff --git a/integration-tests/src/tests/client/resharding.rs b/integration-tests/src/tests/client/resharding.rs index 5f4c452715d..9fb0afe0590 100644 --- a/integration-tests/src/tests/client/resharding.rs +++ b/integration-tests/src/tests/client/resharding.rs @@ -773,7 +773,7 @@ fn generate_create_accounts_txs( KeyType::ED25519, &signer_account.to_string(), ); - let account_id = gen_account(&mut rng, b"abcdefghijkmn"); + let account_id = gen_account(&mut rng); if all_accounts.insert(account_id.clone()) { let signer = InMemorySigner::from_seed( account_id.clone(), @@ -1012,7 +1012,7 @@ fn generate_cross_contract_tx( new_accounts: &mut HashMap, nonce: &mut u64, ) -> Option { - let account_id = gen_account(rng, b"abcdefghijkmn"); + let account_id = gen_account(rng); if !all_accounts.insert(account_id.clone()) { return None; } diff --git a/tools/mock-node/src/setup.rs b/tools/mock-node/src/setup.rs index acacde0e935..d6de94c097a 100644 --- a/tools/mock-node/src/setup.rs +++ b/tools/mock-node/src/setup.rs @@ -287,7 +287,7 @@ mod tests { use near_o11y::testonly::init_integration_logger; use near_o11y::WithSpanContextExt; use near_primitives::transaction::SignedTransaction; - use near_store::test_utils::gen_account; + use near_store::test_utils::gen_account_from_alphabet; use nearcore::config::GenesisExt; use nearcore::{load_test_config, start_with_config, NEAR_BASE}; use rand::thread_rng; @@ -346,7 +346,7 @@ mod tests { let transaction = SignedTransaction::create_account( next_nonce, "test1".parse().unwrap(), - gen_account(&mut rng, b"abcdefghijklmn") + gen_account_from_alphabet(&mut rng, b"abcdefghijklmn") .parse() .unwrap(), 5 * NEAR_BASE,